- ベストアンサー
VBからExcelに書き込む方法
こんにちは。VB6.0(SP5),Excel2000,Win2000でVBの勉強をしています。 VBでコマンドボタンを押した時に、テキストボックスのデータを、Excelに書き込みたいと思っています。 特定のExcelに書き込むことは「GetObject」で出来たのですが、名前がわからない場合はどうしたらよいのでしょうか? ※ExcelはVBから起動したものではなく、人が任意のファイルを起動しています。Excelの名前はわかっていません(任意なので、何かわかりません) このような場合に、VBから書き込むのは可能なのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
'Microsoft Excel への参照を格納する変数を宣言します。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet 'Microsoft Excel が既に起動されているかどうかを調べます。 '第 1 引数を指定せずに GetObject 関数を呼び出すと、 'アプリケーションのインスタンスへの参照が返されます。 'Microsoft Excel が起動されていないと、エラーが発生します。 Set xlApp = GetObject(, "Excel.Application") If Err.Number Then MsgBox "Excel が起動されていません。" ' エラーが発生した場合は Err オブジェクトをクリアします。 Err.Clear Else ' MsgBox "Excel はすでに起動中です。" Set xlBook = xlApp.Workbooks.Item(1) Set xlSheet = xlBook.Worksheets.Item(1) xlSheet.Cells(3, 5) = Me.Text1.Text End If 上記のプログラムで開いてるエクセルの1つめのブックの1つめのシートにテキストボックスのデータが書き込まれます。 いかがでしょうか?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
ActiveBook、ActiveSheetが使えるかテストしてみました。名前を使っていません。エクセルが起動されているか・アクチブブックが存在するかどうかはチェックなし。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then MsgBox Form1.Text1.Text Set xlapp = GetObject(, "Excel.Application") 'Set xlbk = xlapp.workbooks("Book1") Set xlbk = xlapp.activeworkbook 'Set xlsh = xlbk.Sheets("sheet1") Set xlsh = xlbk.activesheet xlsh.cells(1, "C") = Form1.Text1.Text End If End Sub 上手く行くようです。 今開かれてアクチブになっているブック・シートにテキストボックスの値を(C1セルに)セットしました。 コメント化した行でも上手く行きます。 Msgboxは確認用。
お礼
回答ありがとうございます。参考になりました。
- sam_inoue
- ベストアンサー率47% (27/57)
>特定のExcelに書き込むことは「GetObject」で出来た >のですが、名前がわからない場合はどうしたらよいの >でしょうか? >※ExcelはVBから起動したものではなく、人が任意の >ファイルを起動しています。Excelの名前はわかって >いません(任意なので、何かわかりません) GetObjectで開いているExcelは掴めたが、 何のブックが開いているか解らないということですね。 Set xlApp = GetObject(, "Excel.Application") の後、 For Each objWbk In xlApp.Workbooks If objWbk.Name = "HOGE.xls" Then ' 目的のブックへの処理 End If Next とすれば開いている中で所望するブックに対して 処理ができます。 開いていなければ未処理で終わらせるとか、 その時点で開くとか、 後は方法を考えて下さい。
お礼
回答ありがとうございます。参考になりました。
- 2ch
- ベストアンサー率51% (64/125)
私だけでしょうか、質問の意味がわからないのは・・・(だいたひかる風) GetObject(, "Excel.Application") を知りたいのでしょうか? >特定のExcelに書き込むことは「GetObject」で出来たのですが、 というのであれば、その部分の抜粋を記さないと、既存が読めません。 現在はGetObjectのパラメータをどのように利用しているのでしょうか?
お礼
返答ありがとうございます。 特定のexcelというのは、名前がわかっている場合という意味で書きました。
お礼
回答ありがとうございます。 GetObjectは引数なしで使えるのですね。大変参考になりました。ありがとうございます。