• 締切済み

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に データを出力する方法として、適切と思う方法を回答して下さい。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。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" ’※ココ

回答No.1

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) )

関連するQ&A

  • AccessでExcel出力

    以前こちらでAccessからExcelファイルの操作方法を教えて頂き下記のように記述しているのですがC:\test.xlsのExcelファイルに何も出力されません。 又、エラーも出ません。 どこに誤りがあるか教えていただけますでしょうか。 長くなり大変申し訳ございませんが宜しく御願い致します。 ----------------------------------------------- Private Sub Command1_Click() On Error Resume Next Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String Dim xlSheet As Excel.Worksheet strExcelFile = "C:\test.xls" 'エクセルのファイル名 xlSheet = "aaaaa" 'ブックのシート名 Set objExcelApp = GetObject(strExcelFile, "Excel.Sheet") xlSheet.Cells(1, 1).Value = "12" With objExcelApp.Worksheets(xlSheet) With .Cells(1, 1) .Font.Size = 18 .Font.Name = "MS P明朝" .Font.Bold = True '太字の指定 End With .Cells(1, 1).ColumnWidth = 8 .Rows(1).RowHeight = 26 End With xlSheet.PrintOut objExcelApp.Application.Quit Set objExcelApp = Nothing DoCmd.Close End Sub -------------------------------------------------

  • VBでエクセルの区切りが使えない

    VBでエクセルを操作するプログラムをつくってるのですが、エクセルの区切りが使えません。どうしたらいいのでしょうか? (20060501を0501に区切る) VBでオブジェクトライブラリを使用せずにエクセルを操作しています。 xlBook.xlSheet.Columns("L:L").TextToColumns Destination:=xlSheet.Range("L1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 9), Array(4, 3)) xlSheet.Columns("L:L").Select xlSheet.Columns("L:L").NumberFormatLocal = "m/d

  • シート名をセルに入力しこれを使って別ブックを参照

    Excel2010を使用しています。 別のブックのあるシート内にある表からデータを取ってくる方法を教えて下さい。 ****前置き**** 例えば YYY.xlsx と ZZZ.xlsx という2つのブックがあるとします。 YYY.xlsxの内容 H1、H2、・・・、H9という名前の9つのシートがあるとします。 各シートには同じフォーマットの表があり、セルD10:P12に値が入っています。 ZZZ.xlsxの内容 1月 という名前のシートがあるとします。 シート1月の中に セルA1には H1 セルA2には H2  : セルA9には H9 という値が入っています。 ********本題******** ブック ZZZ.xlsx 内のシート 1月 のセルE1 に ブック YYY.xlsx 内のシートH1のセルD10の値を表示させる方法を教えて下さい。 ただし、シートの指定は、シート 1月 のセルA1内の値と一致するのシート名のセルD10の値を表示させたいと考えています。 ですので、例えば、セル A1 に H5 という値が入っていれば、セルE1には YYY.xlsx内のシートH5のセルD10を表示させるようにしたいです。 VLOOKUP関数とINDIRECT関数を使えばできるのでは?と思っていろいろ試しているのですが、上手くいかないのが現状です。 どうかよろしくお願いします。

  • VBで既存のExceシートlのTextBoxにデータをセットしたい

    VBで印刷プログラムを作成しています。 既存(雛型)のエクセルシートにデータをセットし印刷しようとしています。 セルにセットする場合は xlSheet.Cells(1, 9).value = InputItem.ManuNum、等 でセットできるのですが テキストボックスにセットするときどうすればいいのかわかりません。 コードの記述方法を教えて下さい。

  • VB2008 エクセル出力

    VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています

  • エクセル 何故かシート間の値のコピーが出来ない

    いつもお世話になります。 開いているブックのシート「リスト1~3」に、Book1.xlsの「リスト1~3」の値をコピーする為に、下記のマクロを作成しました。 Dim SH1, SH2, SH3, SH4, SH5, SH6 As Worksheet Set SH1 = ThisWorkbook.Worksheets("リスト1") Set SH2 = ThisWorkbook.Worksheets("リスト2") Set SH3 = ThisWorkbook.Worksheets("リスト3") Set SH4 = Workbooks("Book1.xls").Worksheets("リスト1") Set SH5 = Workbooks("Book1.xls").Worksheets("リスト2") Set SH6 = Workbooks("Book1.xls").Worksheets("リスト3") 'リスト1をコピーする D = SH4.Range("A1").CurrentRegion.Rows.Count E = SH4.Range("A1").CurrentRegion.Columns.Count SH1.Range(Cells(1, 1), Cells(D, E)).Value = SH4.Range("A1").CurrentRegion.Value 'リスト2をコピーする F = SH5.Range("A1").CurrentRegion.Rows.Count G = SH5.Range("A1").CurrentRegion.Columns.Count SH2.Range(Cells(1, 1), Cells(F, G)).Value = SH5.Range("A1").CurrentRegion.Value 'リスト3をコピーする H = SH6.Range("A1").CurrentRegion.Rows.Count I = SH6.Range("A1").CurrentRegion.Columns.Count SH3.Range(Cells(1, 1), Cells(H, I)).Value = SH6.Range("A1").CurrentRegion.Value 以上を実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーメッセージが出てしまいます。 それぞれのシートの処理の時に、 SH1.Select SH2.Select SH3.Select を入れて、シートを選択してから実行すると問題なく動くのですが、何故このようなことが起こるのでしょう?

  • VBでEXCELのシートのコピーに関して

    同一Book内で、シートのコピーをしようと考えて、幾つかのHPを参考に、以下のような 記述をしました。 その際に、以下の記述をした場合、本来はコピー先のシート名を変更したいにも関わらず、コピー 元のシート名が変わってしまいます。 追加したシートの名前を変更させるには、どのような書き方にすれば良いでしょうか? 自分で記述しておきながら、どのように対応したら良いかわからず。。。 また、以下のような記述をした場合、追加したセル側のシートを操作したいにも関わらず、 コピー元のシートを書き換えてしまいます。 追加したシートのセルを操作したい(値を入力)ような場合は、どのような記述を すれば良いでしょうか。。。 ご教授頂ければと思います。 '既存のEXCELファイルを開く Dim xlFilePath As String = "C:\test.xls" '起動時の処理 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) '確認のためExcelのウィンドウを表示する xlApp.Visible = True Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) Dim xlSheet2 As Excel.Worksheet = xlBook.Worksheets(1) 'シートのコピー xlSheet.Copy(After:=xlSheet2) 'シートに名前を付ける xlSheet.Name = "TEST" Dim xlRange As Excel.Range 'データの入力セル範囲 xlRange = xlSheet.Range("A1:A1") 'セルへデータの入力 xlRange.Value = “AABBCC”

  • vb2005でexcelピボットテーブルを使いたい

    使用環境は VB2005express ,excel2000 です。 VB6.0からVB2005へコンバートをしているのですが、excelのピボットテーブルの操作のところで 上手くいきません。具体的には、行列のタイトルを書き込むところまでは上手くいったのですが 中身のデータ貼り付けのところがわかりません。 宜しくお願い致します。   【以下VB6.0】 一部抜粋 With xlSheet.PivotTables("テーブル") .PivotFields("場所").Orientation = xlRowField  .PivotFields("日").Orientation = xlColumnField ’↑ここまではOKですが、以下が上手くいきません。 .AddDataField xlSheet.PivotTables("テーブル").PivotFields("数"), "データの個数 / 数",xlCount .PivotFields("データの個数 / 数").Function = xlSum .AddDataField xlSheet.PivotTables("PV_MECH").PivotFields("重量"), "デ ータの個数 / 重量", xlCount End With 【以下VB2005】  With BOOK.Worksheets(SHEETNAME).PivotTables("PV_MECH") .PivotFields("場所").orientation = Excel.XlPivotFieldOrientation.xlRowField .PivotFields("名").orientation = Excel.XlPivotFieldOrientation.xlRowField  ’↑ここまではOKですが、以下が上手くいきません。 '.PivotFields("数") = Excel.XlPivotFieldCalculation.xlPercentOfTotal '× .PivotFields("数").orientation = .PivotFields("数") '?

  • 【Excel】 表示形式のyyyyを2005で表示したい。

    こんにちは E列は、他のセルを参照し、その内容から日時を表示しています。 (E列の表示形式は「m/d h:mm;@」です。) これを「yyyy/m/d h:mm;@」に変更したところ参照するセルに 年のデータが無いために先月の分が 2006/12/31 12:30 というふうになってしまいます。 これを今から「yyyy/m/d h:mm;@」に変更し2005/12/31 12:30 にするにはどうしたら良いでしょうか。

  • VB6からEXCEL2000に罫線と塗りつぶしを出力したいのですが

    VB6から入力されたデータを計算や変換して EXCELに出力するプログラムを作成していますが EXCELのセルにデータを出力することはできましたが、 セルの塗りつぶしとフォントの色の出力(変更)がわかりません。 サンプルなどを探してみましたが見当たらなかったので、どなたかわかる方がいましたらよろしくお願いします。