2016-04-27 5 views
0

私は心が失われていると思います。変数を文字列として宣言し、VB.NETのExcelワークブックの範囲と同じにするにはどうすればいいですか? VBAでは、これは簡単だった:変数を範囲として定義する - VB.NET

Dim SQL as string 
SQL = ActiveWorkbook.Sheets("MySheet").Range("SQL") 

私は(Visual Studioの2015年)VB.NETでこのような何かをしようとした場合、最初に私はActiveworkbookを見つけることができません。次に、Excel.Range("SQL")を試してみると、'Range' is an interface type and cannot be used as an expressionというエラーが表示されます。また、Rangeのデータ型も存在しないように見えます。確かに、この機能はVB.NETに存在します。

ありがとうございました!まず、あなたのプロジェクトへの参照を追加する必要があり、VB.NETので、エクセル上で動作するように

答えて

1

Microsoft.Office.Interop 

リファレンス追加するには:、Solution Explorer

Referencesノードを右クリックして、 Add Referenceを選択します。

インポートあなたのコード内で参照:

Imports Microsoft.Office.Interop 

てみてくださいこのコードを使用する:

Dim AppExcel As New Excel.Application 'Create a new Excel Application 
Dim workbook As Excel.Workbook = AppExcel.Workbooks.Add() 'Create a new workbook 
Dim sheet As Excel.Worksheet = workbook.Sheets("Sheet1") ' Create variable a Sheet, Sheet1 must be in WorkBook 

'Work with range 
Dim cellRange1 As Excel.Range = sheet.Range("A1") 'Range with text address 
cellRange1.Value = "Text in Cell A1" 

Dim cellRange2 As Excel.Range = sheet.Cells(2, 2) 'Range("B2:B2") with index; Cells(N°Row,N°Col) 
cellRange2.Value = "Text in Cell B2" 


Dim tableRange3 As Excel.Range = sheet.Range("A1:F4") 'Range with text address 

Dim tableRange4 As Excel.Range = sheet.Range(sheet.Cells(1, 1), sheet.Cells(4, 6)) 'Range("A1:F4") with index; Cells(N°Row,N°Col) 

AppExcel.Visible = True 'To display the workbook 

コード可変シートなし

Dim AppExcel as New Excel.Application 
Dim workbook As Excel.Workbook = AppExcel.Workbooks.Add() 
'Range 
Dim cellrange1 as Excel.Range = AppExcel.ActiveWorkbook.Sheets("Feuil1").Range("A1") 
+0

申し訳ありません私はすでにその参照を持っていると言いましたが、私は思います。 Microsoft.Office.Interop.Excelとして表示されます。それは正しいですか? Importsステートメントは、すべてのオブジェクト修飾子を書き留めたくない場合にのみ必要だと思いました。それは必要ではないですね。 あなたが働いていた上の例だが、なぜ私はこれを行うことはできません:。Excel.Range = AppExcel.ActiveWorkbook.Sheets( "てMySheet")範囲(「SQLなどの新しいまずExcel.Application 薄暗いcellrange1として 薄暗いAppExcelを")。値。 他の変数に変数をネストするのは好きではありませんが、私が上記で書いたものはVisual Studioでは動作しないようです。 ありがとう! – christopheralan88

+0

まず、WorkBookオブジェクトを作成し、オブジェクト型をRange型に割り当てることができないため、これを行うことはできません。第2に、なぜSQLをRange( "SQL")に入れるのか。アドレス範囲でなければなりません。 –

+0

オブジェクト変数をRange変数に割り当てることができないのはなぜですか?どのように範囲の値/テキストを割り当てるのですか?私はVB.NETを初めて使っていますが、名前付きの範囲を参照できると確信しています。セルA1の名前が "BudgetSQL"の場合は、RangeオブジェクトのCell1パラメータに "BudgetSQL"を入れても問題ありません。 – christopheralan88

1

あなたは、あなたのアプリケーションから起動する必要がありますオブジェクト。それはだと仮定します。

Dim AppExcel As New Excel.Application 

そこから、あなたができる:

Dim cellrange1 as Excel.Range = AppExcel.ActiveWorkbook.Sheets("MySheet").Range("SQL") 

あなたはそれがRange("SQL").Valueに設定することはできませんRangeとしてcellrange1を宣言したので。
Valueは、Rangeに含まれる値であるobjectを返します。

これはとても言い方です。それを(もっと)明確にするために、Range("SQL")Rangeを返します。 Range("SQL").Valueはオブジェクトを返します。

値を取得する場合は、cellrange1.Value、またはおそらくcellrange1.Textになります。範囲にある種のSQLが含まれていると仮定すると、Textとします。

Excel interopプログラミングの不幸な側面は、多くのプロパティが強く型付けされた値ではなくオブジェクトを返すことです。たとえば、Range.Textによって返されるオブジェクトは常にstringになりますが、プロパティはまだobjectを返します。つまり、Visual Studioインテリセンスは、プロパティが返すタイプを通知しないことがよくあります。 documentationのプロパティと関数を調べて、実際に返される内容を知る必要があります。

+0

したがって、上記の行を記述するとVisual Studioはエラーをスローしませんが、シート( "MySheet")を入力するとIntellisenseはドロップダウンリストにRangeオブジェクトを表示しません。なぜそれが分かっていますか?これは、テキストと値のプロパティを説明していたときに意味があります。私はVBAの文字列変数をRangeオブジェクトに設定できる理由を知っていますか? VBAとinteropのValueオブジェクトを参照していますが、それらは非常によく似ていますが、Interopにはデータ型として「As Object」がありますが、VBAはオブジェクトブラウザにデータ型を表示しません。これはあなたが指している違いですか? – christopheralan88

+0

'Sheets()'はおそらく 'オブジェクト'を返します。実際のタイプが何であるかを何とか知る必要があります。これは、Excelの相互運用性に関する問題の1つです。関数またはプロパティは意味のある型を返すべきです(少なくともC#のような強く型付けされた言語では)。 –

関連する問題