- 締切済み
VB6.0(SP6)でのExcelシート参照
VB6.0 SP6を使用して装置の時系列で変化するデータをExcelのシートに自動で出力しています。 実行中にユーザーが別にExcelを起動した場合は問題ないのですが、同ブック内で 【ファイル】→【新規作成】→【標準】→【ブック】を作成するとエラーが発生しました。 エラーは「オブジェクト変数のエラー」です。 但し、構文を(1)から(2)に変更するとエラーは解除されました。 (1)xlsheet.Cells(3+count,2).Select Selection.NumberFormatLocal="yyy/m/d h:mm" (2)xlsheet.Cells(3+count,2).NumberFormatLocal="yyy/m/d h:mm" 上記の原因が分かる方、回答して下さい。 また、どのBookが開かれても、最初にGet、もしくはSetしたExcelに データを出力する方法として、適切と思う方法を回答して下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 #1 ご回答のとおり、Range オブジェクトの Select は目的の Range を 含むシートがアクティブでないと失敗します。また、Selection プロパ ティーには Excel.Application オブジェクトが必要です。 ※ Selection は Excel VBA のプロパティーです (1)の方法でやるなら、こんな感じでしょうか。 Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Activate ’※ココ xlSheet.Cells(3 + Count, 2).Select xlApp.Selection.NumberFormatLocal = "yyy/m/d h:mm" ’※ココ
- siddhaartha
- ベストアンサー率25% (45/175)
Selectメソッドでのセルの選択は目的のセルを含むワークシートがアクティブでないとエラーになります。 ご質問の場合、途中でワークブックを作成されたために変数xlsheetにSETしたワークシートがアクティブでなくなって、(1)のSelectメソッドがエラーになったと思われます。 ちなみに、ActiveSheetオブジェクトはApplicationオブジェクトに属するので、別にEXCELを起動した場合は異なるApplicationなのでエラーになりません。 >また、どのBookが開かれても、最初にGet、もしくはSetしたExcelにデータを出力する方法として、適切と思う方法を回答して下さい。 常にSetしたワークシートオブジェクトを明示的に指定してやれば大丈夫です。 (1)だと、もし1行目と2行目の間にユーザーが別シートのセルを選択すれば2行目はユーザーが選択したセルに対して処理が行われますよね。 省略した記述もやめた方がいいでしょう。(ex... ×:cells(x,y)⇒○:xlsheet.cells(x,y) )