- ベストアンサー
エクセルコントロールのVB2008での参照方法
- VB2008でエクセルから値を取得するプログラムを作成しています。セルの値を取得することはできたのですが、シートに貼り付けられたチェックボックスやラジオボックスの値の取得方法が分からずに困っています。
- セルの値を取得するまでのフローは以下の様に作成しました。上記のセルの値を取得している流れの中でチェックボックスやラジオボックスの値を参照したいのですが、どのようにすればよいでしょうか。
- VB2008でエクセルから値を取得するプログラムを作成しています。セルの値の取得方法は分かりましたが、シートに貼り付けられたチェックボックスやラジオボックスの値の取得方法が分からずに困っています。アドバイスなどいただけるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サンプルコードです。 string strFileName = @"D:\OKWaveSample.xls"; Excel.Application oExcel = new Excel.Application(); oExcel.Visible = true; Excel.Workbook oBook = (Excel.Workbook)oExcel.Workbooks.Open(strFileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Worksheet oSheet = (Excel.Worksheet)oBook.Worksheets["Sheet1"]; Excel.Shape oShape = (Excel.Shape)oSheet.Shapes.Item("TextBox1"); Excel.OLEObject oOLE = (Excel.OLEObject)oShape.OLEFormat.Object; string val = oOLE.Object.GetType().InvokeMember("Text", System.Reflection.BindingFlags.GetProperty, null, oOLE.Object, null).ToString(); Console.WriteLine(val);
その他の回答 (1)
- oboroxx
- ベストアンサー率40% (317/792)
すみません、VBでしたね。 再度掲載します。 Imports Microsoft.Office.Interop Module Module1 Sub Main() Dim oExcel As Excel.Application = New Excel.Application() oExcel.Visible = True Dim strFileName As String = "D:\OKWaveSample.xls" Dim oWorkbook As Excel.Workbook = CType(oExcel.Workbooks.Open(strFileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing), Excel.Workbook) Dim oSheet As Excel.Worksheet = CType(oWorkbook.Worksheets("Sheet1"), Excel.Worksheet) Dim oShape As Excel.Shape = CType(oSheet.Shapes.Item("CheckBox1"), Excel.Shape) Dim oOLEObject As Excel.OLEObject = CType(oShape.OLEFormat.Object, Excel.OLEObject) Dim strValue As String = oOLEObject.Object.GetType().InvokeMember("Value", Reflection.BindingFlags.GetProperty, Nothing, oOLEObject.Object, Nothing).ToString() Console.WriteLine(strValue) Console.ReadLine() End Sub End Module InvokeMemberで指定するNameがプロパティであれば、Reflection.BindingFlags.GetPropertyで良いと思いますが、もしかしてフィールドであるのかもしれないので、Reflection.BindingFlags.GetFieldで試してみてはどうでしょうか。
お礼
ありがとうございます 無事に値を取得することが出来ました 値取得後に作成したオブジェクトを破棄して 正常に終了する所まで到達できました。 今後ともよろしくお願いします
補足
回答ありがとうございます。 お送りいただいたコードはVBではないように見えたので VBでのコードに該当するようにコードを書き直してみたのですが うまく行きません。InvokeMemberの最初の引数(Name)が不正との メッセージが出ているのですが、対象としているコントロール(チェックボックス)には確かに存在するプロパティなので現時点で何が 原因かわからない状態です いずれにしてもセルの値と異なりかなり事前の準備を必要と するのですね・・