エクセルVBE実行時のエラーの意味と対処方法

このQ&Aのポイント
  • エクセルVBE実行時に表示されるエラーメッセージ『実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されてません』の意味と対処方法についてご教示ください。
  • デバッグ時に10行目の『Set Grp1 = WS2.ChartObjects.Add(50, 50, 320, 200)』がデバッグされる原因について、お教えください。
  • エクセルVBAに詳しい方にお願いです。上記コードの内容について、ご指摘やアドバイスをいただけますか?
回答を見る
  • ベストアンサー

エクセルVBE実行時のエラーの意味とその対処方法

Windows Vistaでエクセル2007を使用しています。 添付の画像のエクセルファイルのVBEに 本文最後のコードを記述して実行させようとすると 下記のようなエラーが出ます。 (実行内容はsheet1の表の内容を sheet2で円グラフとして作成することです) 『実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されてません』 ○質問 1.上記のメッセージの意味を教えてください 2.デバックすると10行目の 『Set Grp1 = WS2.ChartObjects.Add(50, 50, 320, 200)』 がデバックされます。この記述のどこがおかしかったのでしょうか? エクセルVBAにお詳しい方、何とぞご教示お願いします。 なお、コードの内容は以下の通りです。 Sub グラフ作成() Dim WS1 As Worksheet Dim WS2 As Worksheet Dim Grp1 As ChartObject Set WS = Worksheets("sheet1") Set WS = Worksheets("sheet2") Set Grp1 = WS2.ChartObjects.Add(50, 50, 320, 200) Grp1.Chart.ChartType = xl3DPieExploded Grp1.Chart.SetSourceData Source:=WS1.Range("C3:D14"), PlotBy:=xlColumns Worksheets("sheet2").Activate Set WS1 = Nothing Set WS2 = Nothing Set Grp1 = Nothing End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

あきれて、物が言えない。。。 失礼。自分でプログラミングした場合、思い込みがあって、ケアレスミスに気づかないんですよね。 Set WS = Worksheets("sheet1") Set WS = Worksheets("sheet2") って、違和感ありませんか? ストレートに言います。 Set WS1 = Worksheets("sheet1") Set WS2 = Worksheets("sheet2") ですね。 WS2の初期設定が無いのでその次の行でエラーになります。 49歳、システムエンジニアより。

dradra33
質問者

お礼

ご指摘ありがとうございます。 Set WS1 = Worksheets("sheet1") Set WS2 = Worksheets("sheet2") にしたらsheet2に円グラフが作成できました。 見落としもいいところです(-。-;) まだVBAをはじめて2週間のど素人なもんで…。

その他の回答 (1)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

Set WS = Worksheets("sheet1") Set WS = Worksheets("sheet2") それぞれWS1とWS2だよね。 WS1、WS2にオブジェクトをSetしてないので、そのあとで使おうとしてエラーになる。 多分。

関連するQ&A

  • 実行時エラー91について

    vbでエクセルにデータを入力したあと、2つのシートを選択し、 その後に両面印刷を行うプログラムを作成中ですが、 印刷の段階で 「実行時エラー91。オブジェクト変数または with ブロック変数が設定されていません。」 とのエラーがでます。 どの部分がおかしいのかわからないので教えて下さい。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlSheet2 As Excel.Worksheet Dim xlFile As String xlFile = App.Path & "表.xls" Dim MyFile As String MyFile = Dir$("表.xls") If Len(MyFile) > 1 Then Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(xlFile) Set xlSheet = xlBook.Worksheets("裏") Set xlSheet2 = xlBook.Worksheets("表") xlApp.Visible = True a1 = Label47.Caption a1 = Format(a1, "#,#") a2 = Label48.Caption m = a1 & "及び" & a2 & "とする。" For k = 1 To 18 s = Mid(m, k, 1) i = 8 + (k - 1) * 2 xlSheet.Cells(40, i).Value = s Next k Set xlSheet2 = xlBook.Worksheets("表") xlSheet2.Cells(4, 2).Value = Text11.Text xlSheet2.Cells(4, 10).Value = Text12.Text xlSheet2.Cells(4, 19).Value = Text13.Text xlBook.Sheets(Array("表", "裏")).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ←ここでエラー Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing Set xlSheet2 = Nothing

  • VBA 実行時エラーで、"プロパティまたはメソッド

    ・Sheet1(コード) Private Sub CommandButton1_Click() Call aaa End Sub ・Module1(コード) Sub aaa() Dim wb As Workbook Dim ws As Worksheet Workbooks.Open ("c:\test.xls") Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") wb.ws.Range("A2").Value = "CCC" End Sub wb.ws.Range("A2").Value = "CCC"の部分で 以下の実行エラーが出ます。 ------------------------------------------------------------------------ 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ------------------------------------------------------------------------ Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") の部分で特にエラーも出ないので、オブジェクトの取得は成功していると 思うのですが、WorkSheetオブジェクトのwsからRangeメソッドを呼ぶことが できません。 動かない原因と対策を教えてください!!

  • 『実行時エラー'1001': 'Range'メソッドは失敗しました:'

    『実行時エラー'1001': 'Range'メソッドは失敗しました:'_Worksheet'オブジェクト』 先週から仕事に必要なためVBAの勉強を始めましたが、別シートへコピーする際などに上記のエラーが発生してしまい原因が分からず困っています。どこが間違っているのでしょうか?? 処理はデータが書かれているシートから作業用のシートにセル範囲を指定してコピーする、というものです。 なお、マクロ自体は別にマクロ用ファイルを作成し、そこのシートモジュールへ記述しています。 よろしくお願いします。 Sub test() '--------- 対象ファイルの呼び出し Dim MAIN As Workbook Dim ws As Worksheet Dim sh As String 'ファイルを呼び出す Call GetMAINFile Set MAIN = ActiveWorkbook Set ws = MAIN.Worksheets(1) sh = ws.Name '--------- 一時作業用TEMPシートの作成 Dim TEMP As Worksheet Worksheets.Add(after:=ws).Name = "TEMP" Set TEMP = Worksheets("TEMP") '--------- 対象シートから一時作業用TEMPシートへデータのコピー Dim x1, x2, y1, y2 As Integer x1 = 5 x2 = 10 y1 = 1 y2 = 4 ws.Range(Cells(x1, y1), Cells(x2, y2)).Copy _ Destination:=TEMP.Range(Cells.SpecialCells(xlLastCell).Row, 1) End Sub '--------- ファイル名を指定ダイアログの表示 Sub GetMAINFile() Dim NewBook As Workbook Dim OpenFileName As String OpenFileName = Application.GetOpenFilename() If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else Exit Sub End If End Sub

  • エクセルのマクロを使ってデータ範囲が毎回異なるグラフを書きたいです

    あるシステムからデータをエクセルに落とすため、毎回、行や列の数が変わります。 テキスト本を見て下のようなマクロを作成しましたが、うまくいきません。どなたか教えていただけないでしょうか。 Sub グラフシート作成() Dim WS As Worksheet Dim Crt As Chart Range("A65536").End(xlUp).End(xlToRight).Activate Range("A1:" & Selection.Address).Select Set WS = Worksheets("Sheet1") Set Crt = Charts.Add With Crt .ChartType = xl3DBarStacked .SetSourceData Source:=WS.Range(ここに何を書けばいいのでしょうか?), PlotBy:=xlColumns .Name = "野菜栄養価表" End With Set WS = Nothing Set Crt = Nothing End Sub

  • Excel VBA オブジェクトの指定方法と速度

    Excel VBAについて質問です。 ワークシートを指定するときの書き方には色々ありますが、1~3の速度の順番はどうなりますか? オブジェクトは、変数に入れて使用したほうが速度が速くなるそうなので、 1より2のほうが速いと思いますが、3はどうでしょうか? 1.Worksheets("sheet1") 2.Dim ws As Worksheet   Set ws = Worksheets("sheet1") 3.Sheet1 (VBE画面で表示されるシートのプロパティのオブジェクト名) Excelのオブジェクトについて詳しいかたがいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • エクセル2003にて指定されたシートを複写するには?(2)

    エクセル2003にて指定されたシートを複写するには?(2) 同じ件で投稿してすみません。エクセル本を読んでも、ネットで探しても 丸2日進んでいないので、投稿させて頂きました。 以前、以下のURLで投稿したものです。 http://okwave.jp/qa/q5930740.html 【回答して頂いた内容】 Sub aaa() Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("シート1") Set Ws2 = Worksheets("シート2") Dim Endrow As Long, r As Integer Endrow = Ws1.Cells(Rows.Count, 1).End(xlUp).Row For r = 1 To Endrow     Worksheets.Add After:=Worksheets(Worksheets.Count)    ActiveSheet.Name = Ws1.Cells(r, 1).Value    Cells(5, 1).Value = Ws1.Cells(r, 1).Value    Cells(5, 2).Value = Ws1.Cells(r, 2).Value    Cells(5, 3).Value = Ws1.Cells(r, 3).Value Next r Set Ws1 = Nothing Set Ws2 = Nothing End Sub と、ご回答を頂き、想定していた対応が出来ていますが、 問題が2つほどございます。 (1)ひとつは、シート名及びテキストをA列ではなく、J列から持ってくる必要がある。 (2)もうひとつは、1行目はタイトル行なので、2行目から開始する必要がある。 この2点を解消しようと、色々数字を入れて試したのですが、改善できないので、 どなたか、是非、アドバイス・ご享受を宜しくお願い申し上げます。

  • excelからAccessのDBを更新でエラー

    excel2016 excelでaccessへのデータ登録はできたのですが、登録したaccessデータの更新でエラーが発生します。 構成 MENUシートのD4に表示されたシート名でaccessへ登録を実施。 このシート名はaccessのテーブル名になっている。 accesssのファイル名は Machine.accdbでサーバに登録している(サーバ名の実名は伏せて***にしてます) accessファイルは単独で編集できない様にパスワード付きでexcelからのみ追加更新を可能にする。 excelの題目 A1:ref_serial C1:result1 D1:result2 他にも題目ありますが、関係する部分とします。 データは A2セルに数字4桁 C2セル整数2桁小数点3桁 D2セル整数2桁小数点3桁 accessで ref_serial、オートナンバー、長整数型 result1,数値型、単精度浮動小数点型 result2,数値型、単精度浮動小数点型 としてます addのマクロで追加した内容を、そのままrenewのマクロ実行すると 実行時エラー424 オブジェクトが必要です とのポップアップエラーが発生します。 エラーが発生するのは strSQL = _ "UPDATE '" & sheet_name & "' " & _ "SET " & _ ws.Worksheets(sheet_name).Range("C1").Value & "=" & ws.Worksheets(sheet_name).Range("C2").Value & "," & _ ws.Worksheets(sheet_name).Range("D1").Value & "=" & ws.RWorksheets(sheet_name).ange("D2").Value & "," & _ "WHERE ref_serial =" & ws.Worksheets(sheet_name).Range("A2").Value の部分。 web等でも調べたのですが、何が悪いのかわからず、このエラーが出ない様に修正いただきたく、よろしくお願いします。 データ登録のマクロ Sub add() Dim strFileName As String strFileName = "Machine.accdb" Dim DBpath As String DBpath = "***" 'accdbファイルパス Dim password As String password = "AAAA" 'InputBox("パスワードを入力してください") If password = "" Then Exit Sub Dim adoCn As Object 'ADOコネクションオブジェクト Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & "\" & strFileName & ";" & _ "Jet OLEDB:Database Password=" & password & ";" 'Accessファイルに接続 Dim adoRS As Object 'ADOレコードセットオブジェクト Set adoRS = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 Dim day As String day = Worksheets("MENU").Cells(1, 2) Dim sheet_name As String sheet_name = Worksheets("MENU").Cells(4, 4) With adoRS .Open sheet_name, adoCn, adOpenKeyset, adLockOptimistic 'レコードセットを開く" Dim adoCON As New ADODB.Connection .AddNew !ref_serial = Worksheets(sheet_name).Cells(2, 1) !result1 = Worksheets(sheet_name).Cells(2, 3) !result2 = Worksheets(sheet_name).Cells(2, 4) !result_update = Worksheets("MENU").Cells(1, 2) .update .Close 'レコードセットのクローズ End With adoCn.Close 'コネクションのクローズ Set writeSht = Nothing Set adoRS = Nothing Set adoCON = Nothing End Sub 更新のマクロ Sub renew() Dim strFileName As String strFileName = "Machine.accdb" Dim DBpath As String DBpath = "***" 'accdbファイルパス Dim password As String password = "AAAA" 'InputBox("パスワードを入力してください") If password = "" Then Exit Sub Dim adoCn As Object 'ADOコネクションオブジェクト Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & "\" & strFileName & ";" & _ "Jet OLEDB:Database Password=" & password & ";" 'Accessファイルに接続 Dim day As String day = Worksheets("MENU").Cells(1, 2) Dim sheet_name As String sheet_name = Worksheets("MENU").Cells(4, 4) Dim strSQL As String strSQL = _ "UPDATE '" & sheet_name & "' " & _ "SET " & _ ws.Worksheets(sheet_name).Range("C1").Value & "=" & ws.Worksheets(sheet_name).Range("C2").Value & "," & _ ws.Worksheets(sheet_name).Range("D1").Value & "=" & ws.RWorksheets(sheet_name).ange("D2").Value & "," & _ "WHERE ref_serial =" & ws.Worksheets(sheet_name).Range("A2").Value adoCn.Execute strSQL 'SQLを実行 adoCn.Close 'コネクションのクローズ Set adoCn = Nothing 'オブジェクトの破棄 End Sub

  • メッセージボックスを前面に表示させるには?

    Sub 教えて() Dim ExAp As Application Dim ExBk As Workbook Dim ExSh As Worksheet Set ExAp = CreateObject("Excel.Application") Set ExBk = ExAp.Workbooks.Add Set ExSh = ExBk.Worksheets(1) ExAp.Visible = True ExAp.WindowState = xlMaximized ThisWorkbook.Worksheets(1).Activate MsgBox "前面表示させたいお!" Set ExAp = Nothing Set ExBk = Nothing Set ExSh = Nothing End Sub これを実行するとメッセージボックスが隠れてしまいます。 どうしたらよいでしょうか?

  • Excel出力後のExcelの起動について

    Vb側からデータをExcelに出力し、その画面を表示させたまま 出力したExcelを確認しようと思ったところ、Excelは起動するものの シートが表示されない現象が起こりました。 出力後のExcelの終了(解放?)のロジックは下記の通りです。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add … … Sheetへの出力処理 … … Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing この現象の回避方法がありましたらご教授ください。 Windows2000 Vb6.0 SP5 Excel2000

  • EXCELのセルの値を表示する

    VB6.0を使っています。 エクセルのC5のセルに50という値が入っています。 この値をVBのメッセージボックスで見たいのですが 実行して見てみると 「50」ではなく何故か「0」と表示されてしまいます。 どうしてでしょうか? その部分のコードは下です。 Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim Ea As Excel.Application Dim atai As Integer Set Wb = GetObject("C:\test\test.xls") Set Ea = Wb.Application Set Ws = Wb.Worksheets("Sheet1") atai = Ws.Cells(3, 5) MsgBox (atai)