VBAコンパイルエラー 変数が定義されてません

このQ&Aのポイント
  • エクセル2013を使用しております。Userform1を開いた際にリストビューにリストを載せるべく見よう見まねで作ったリストビュー用のコードですが、『コンパイルエラー 変数が定義されてません』と出ます。エラーを回避するにはどうしたら良いでしょうか。
  • 他のブックで使用していたコードをエクスポートして、現在使用しているブックにインポートしたらエラーが出るようになってしまいました。ネット等で調べても「lvwReport」は宣言もなく普通に使われているようですし、そもそも他のブックでは動いていたし、なぜこんなエラーが出るのかさっぱり想像がつきません。
  • ご教授いただけると幸いです。
回答を見る
  • ベストアンサー

VBA lvwReportが変数定義されていません

皆さんこんにちは。 エクセル2013を使用しております。 Userform1を開いた際にリストビューにリストを載せるべく 見よう見まねで作ったリストビュー用のコードですが 下記のコードを走らせると 「lvwReport」の箇所で 『コンパイルエラー 変数が定義されてません』と出ます。 他のブックで使用していたコードをエクスポートして 現在使用しているブックにインポートしたら エラーが出るようになってしまいました。 ネット等で調べても「lvwReport」は宣言もなく普通に使われているようですし そもそも他のブックでは動いていたし・・・ なぜこんなエラーが出るのかさっぱり想像がつきません。 エラーを回避するにはどうしたら良いでしょうか。 ご教授いただけると幸いです。 ------------------------------------------------------------------------------------------------ Private Sub UserForm_Initialize() Dim i As Long Dim LastRow As Long LastRow = Sheets("検索").cells(Sheets("検索").Rows.Count, "A").End(xlUp).Row With ListView1 .View = lvwReport .LabelEdit = lvwManual .HideSelection = False .AllowColumnReorder = True .FullRowSelect = True .Gridlines = True .ColumnHeaders.Add , "施主", Sheet1.Range("B2").Value, 120 .ColumnHeaders.Add , "駅", Sheet1.Range("A2").Value, 60 .ColumnHeaders.Add , "店舗", Sheet1.Range("C2").Value, 80 For i = 2 To LastRow With .ListItems.Add .Text = Sheets("検索").cells(i, 2).Text .SubItems(1) = Sheets("検索").cells(i, 1).Text .SubItems(2) = Sheets("検索").cells(i, 3).Text End With Next End With End Sub

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

lvwReportも、その下で使用しているlvwManualもListViewコントロールで使用される定数です。 特に宣言しなくてもListViewコントロールを組み込んでいればエラーにならずに使えるはずです。 ListViewコントロールを組み込んでいないだけでは? ListViewコントロールは外部コントローラなので標準では組み込まれていません。 自分で組み込む必要があります。

harumama0430
質問者

補足

ご回答ありがとうございます。 Userformを作るページ??のツールボックスに リストビューが入っていたので 組み込んであると思っていました。 確認してみます!

関連するQ&A

  • VBAデータ元から新規ブックに出力

    現在のブック内に出力されるとメモリの都合上時間がかかりすぎますそこで新規ブック1個に出力する構文を教えていただきたいのですが、宜しくお願いします。 Sub 1111() Dim c As Range Dim i As Integer, LastRow As Long Dim NewSheetName As String, MatchFlag As Boolean Application.ScreenUpdating = False NewSheetName = "" With Sheets("データ元") For Each c In .Range(.Cells(3, "B"), .Cells(Rows.Count, "B").End(xlUp)) MatchFlag = False If NewSheetName <> Year(c.Value2) & "年" & Month(c.Value2) & "月" Then NewSheetName = Year(c.Value2) & "年" & Month(c.Value2) & "月" For i = 1 To Worksheets.Count If Sheets(i).Name = NewSheetName Then Sheets(i).Cells.ClearContents MatchFlag = True Exit For End If Next i If MatchFlag = False Then Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = NewSheetName End If End If LastRow = Sheets(NewSheetName).Cells(Rows.Count, "A").End(xlUp).Row Sheets(NewSheetName).Cells(LastRow + 1, "A").Resize(1, 6).Value = .Cells(c.Row, "A").Resize(1, 6).Value Sheets(NewSheetName).Columns("A:F").EntireColumn.AutoFit '↑A列からF列まで自動幅調整してます Next .Activate End With Application.ScreenUpdating = True MsgBox "終了しました", vbInformation End Sub

  • シートからのListViewへのやり方

    はじめまして、宜しくお願い致します。 シートからのListViewへの読み込みで 早くListViewへ表示させたいのですが よろしければご教授できればと質問させて 頂きました。 下記のコードは現在利用しているコードです。 Private Sub UserForm_Initialize() With ListView1 .View = lvwReport .FullRowSelect = True .AllowColumnReorder = True .Gridlines = True .AllowColumnReorder = True '列幅の変更を許可 .CheckBoxes = True 'チェックボックスの追加 '.ForeColor = vbBlue .ColumnHeaders.Add , , "NO", 70 .ColumnHeaders.Add , "B", "名前", 100 .ColumnHeaders.Add , "C", "性別", 50 .ColumnHeaders.Add , "D", "血液型", 50 .ColumnHeaders.Add , "F", "生年月日", 100 For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row Application.ScreenUpdating = False With .ListItems.Add .Text = Format(Cells(i, "B"), "0") '.Text = Right(Space(3) & .Text, 3) .SubItems(1) = Cells(i, "C") .SubItems(2) = Cells(i, "D") .SubItems(3) = Cells(i, "E") .SubItems(4) = Cells(i, "F") End With Next End With Application.ScreenUpdating = True

  • エクセル マクロ チェックボックス

    sheet1にチェックボックスが3つあり、マクロを実行するコマンドボタンが1つあります。 チェックボックスにレ点を入れることにより、sheet4のデータからsheet2にグラフを作成しようと考えてますが、エラーが出てしまい解決できません。 どのように訂正したらいいのか教えて頂けないでしょうか。 Private Sub CommandButton1_Click() Dim GraphRange As String Dim Graph As ChartObject Dim lastRow As Long Set Graph = Sheets("sheet2").ChartObjects.Add(150, 27, 350, 200) lastRow = Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).Row GraphRange = Sheets("sheet4").Range(Cells(1, 1), Cells(lastRow, 1)).Value If Sheets("sheet1").CheckBox1.Value = True Then 'CheckBox1にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 2), Cells(lastRow, 2)).Value End If If Sheets("sheet1").CheckBox2.Value = True Then 'CheckBox2にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 3), Cells(lastRow, 3)).Value End If If CheckBox3.Value = True Then 'CheckBox3にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 4), Cells(lastRow, 4)).Value End If Graph.Chart.ChartWizard Source:=Sheets("sheet4").Range(GraphRange).Value, _ Gallery:=xlLine, Format:=1, PlotBy:=xlColumns, _ CategoryLabels:=1, SeriesLabels:=1, HasLegend:=True End Sub

  • VBAの転記について

    With Sheets("入力") '3行目~22行目まで For i = 5 To 24 SheetName = Sheets("入力").Cells(i, "C").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, "C").Value U最終行 = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 If U最終行 = 39 Then Sheets(SheetName2).Copy BEFORE:=ActiveSheet Sheets(SheetName).Delete End If If Err.Number = 0 Then A = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("C" & A).Value = .Cells(i, "G").Value Sheets(SheetName2).Range("D" & A).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("E" & A).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("F" & A).Value = .Cells(i, "N").Value Sheets(SheetName2).Range("G" & A).Value = .Cells(i, "P").Value Sheets(SheetName2).Range("H" & A).Value = .Cells(i, "R").Value Sheets(SheetName2).Range("I" & A).Value = .Cells(i, "T").Value Sheets(SheetName2).Range("K" & A).Value = .Cells(i, "V").Value Sheets(SheetName2).Range("L" & A).Value = .Cells(i, "X").Value ElseIf .Cells(i, "C").Value <> "" Then G = Sheets("原紙").Range("C65536").End(xlUp).Row + 1 Sheets("原紙").Range("B1").Value = .Cells(i, "D").Value Sheets("原紙").Range("B4").Value = .Cells(2, "D").Value Sheets("原紙").Range("C" & G).Value = .Cells(i, "G").Value Sheets("原紙").Range("D" & G).Value = .Cells(i, "I").Value Sheets("原紙").Range("E" & G).Value = .Cells(i, "L").Value Sheets("原紙").Range("F" & G).Value = .Cells(i, "N").Value Sheets("原紙").Range("G" & G).Value = .Cells(i, "P").Value Sheets("原紙").Range("H" & G).Value = .Cells(i, "R").Value Sheets("原紙").Range("I" & G).Value = .Cells(i, "T").Value Sheets("原紙").Range("K" & G).Value = .Cells(i, "V").Value Sheets("原紙").Range("L" & G).Value = .Cells(i, "X").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName End If Next i End With On Error GoTo 0 上記のVBAを作成しましたが、 C行の値ごとの転記(G~Xの値)が出来ません。 どこが間違いか教えていただけないでしょうか。

  • VBA アプリケーション定義またはオブジェクト定義エラーについて

    doc_wbkというブックのSheets(2)の内容をdoc_wbk2のActiveSheetにコピーしようとしています。 以下のコードの5行目で「アプリケーション定義またはオブジェクト定義エラー」が出てしまいます。ブックやシートまで指定しないといけないのかと思い doc_wbk.Sheets(2) を5行目行頭に追加しましたが変わりません。逆に5行目行頭の . を外してやるとアクティブシートの内容をコピーしてしまいます。Sheets(2)の内容をコピーしてやるにはどうしたらよいでしょうか?よろしくお願いします。 Set doc_wbk = Workbooks.Open(doc_dir + doc_file, 0) With Sheets(2) If .Range("A4").Value <> "" Then row_num = .Range("a65536").End(xlUp).Row .Range(Cells(4, 1), Cells(row_num, 11)).Copy doc_wbk2.ActiveSheet.Cells(row_num2 + 1, 1) End If End With

  • エクセルVBA全シートに差し込みマクロ構文

    Sheets("震圧データ").Select MsgBox "新規ブックに年月分けて" & vbCrLf & "震圧データを転記します、" & vbCrLf & "お待ちください。" Dim c As Range Dim i As Integer Dim LastRow As Long Dim NewSheetName As String, MatchFlag As Boolean Application.ScreenUpdating = False Workbooks.Add With ThisWorkbook.Sheets("震圧データ") For Each c In .Range(.Cells(4, "A"), .Cells(Rows.Count, "A").End(xlUp)) If NewSheetName <> Year(c.Value2) & "年" & Month(c.Value2) & "月" Then NewSheetName = Year(c.Value2) & "年" & Month(c.Value2) & "月" If c.Row - 2 > Sheets.Count Then Worksheets.Add after:=Worksheets(Worksheets.Count) Else Sheets(c.Row - 2).Select End If ActiveSheet.Name = NewSheetName Sheets(NewSheetName).Range("A1").Value = "年月日" Sheets(NewSheetName).Range("B1").Value = "曜日" Sheets(NewSheetName).Range("C1").Value = "A" Sheets(NewSheetName).Range("D1").Value = "B" Sheets(NewSheetName).Range("E1").Value = "C" Sheets(NewSheetName).Range("F1").Value = "時間" Sheets(NewSheetName).Range("G1").Value = "状態" Sheets(NewSheetName).Range("I1").Value = "No.1" Sheets(NewSheetName).Range("I2").Value = "記録者" Sheets(NewSheetName).Range("I3").Value = "氏名:" Sheets(NewSheetName).Range("I4").Value = "=IF(ISBLANK(A4),"""",DATEDIF("""",Today(),""Y"") & ""歳"")" Sheets(NewSheetName).Range("I5").Value = "=""転載日""" Sheets(NewSheetName).Range("I6").Value = "=TODAY()" Sheets(NewSheetName).Range("I56").Value = "=IF(ISBLANK(A56),"""",""No.2"")" Sheets(NewSheetName).Range("I57").Value = "=IF(ISBLANK(A56),"""",""記録者"")" Sheets(NewSheetName).Range("I58").Value = "=IF(ISBLANK(A56),"""", ""氏名:"")" Sheets(NewSheetName).Range("I59").Value = "=IF(ISBLANK(A56),"""",DATEDIF("""",Today(),""Y"") & ""歳"")" Sheets(NewSheetName).Range("I60").Value = "=IF(ISBLANK(A56),"""",""転載日"")" Sheets(NewSheetName).Range("I61").Value = "=IF(ISBLANK(A56),"""",TODAY())" Sheets(NewSheetName).Range("I111").Value = "=IF(ISBLANK(A111),"""",""No.3"")" Sheets(NewSheetName).Range("I112").Value = "=IF(ISBLANK(A111),"""",""記録者"")" Sheets(NewSheetName).Range("I113").Value = "=IF(ISBLANK(A111),"""", ""氏名:"")" Sheets(NewSheetName).Range("I114").Value = "=IF(ISBLANK(A111),"""",DATEDIF("""",Today(),""Y"") & ""歳"")" Sheets(NewSheetName).Range("I115").Value = "=IF(ISBLANK(A111),"""",""転載日"")" Sheets(NewSheetName).Range("I116").Value = "=IF(ISBLANK(A111),"""",TODAY())" Sheets(NewSheetName).Range("I166").Value = "=IF(ISBLANK(A166),"""",""No.4"")" Sheets(NewSheetName).Range("I167").Value = "=IF(ISBLANK(A166),"""",""記録者"")" Sheets(NewSheetName).Range("I168").Value = "=IF(ISBLANK(A166),"""", ""氏名"")" Sheets(NewSheetName).Range("I169").Value = "=IF(ISBLANK(A166),"""",DATEDIF("""",Today(),""Y"") & ""歳"")" Sheets(NewSheetName).Range("I170").Value = "=IF(ISBLANK(A166),"""",""転載日"")" Sheets(NewSheetName).Range("I171").Value = "=IF(ISBLANK(A166),"""",TODAY())" Sheets(NewSheetName).Range("H1").Value = "提出済○" Sheets(NewSheetName).Range("A57").Select Range("I6,I61,I116").Select Range("I6,I61,I116,I171").Select Selection.NumberFormatLocal = "yyyy/m/d" Columns("F:F").Select Selection.NumberFormatLocal = "[$-409]h:mm AM/PM;@" Range("G1").Select With Selection .HorizontalAlignment = xlCenter End With LastRow = Sheets(NewSheetName).Cells(Rows.Count, "A").End(xlUp).Row Sheets(NewSheetName).Cells(LastRow + 1, "A").Resize(1, 8).Value = .Cells(c.Row, "A").Resize(1, 8).Value Sheets(NewSheetName).Columns("A:I").EntireColumn.AutoFit Next 新規ブック最終シートのみ適用できますが他の月別シートに適用できておりません '↓どのような構文にしたら適用されるのでしょうか?ここからが質問です↓ If Sheets(NewSheetName).Range("A56") = "" Then Range("I56:I171").Delete Else Sheets(NewSheetName).Range("A56").Value = "年月日" Sheets(NewSheetName).Range("B56").Value = "曜日" Sheets(NewSheetName).Range("C56").Value = "A" Sheets(NewSheetName).Range("D56").Value = "B" Sheets(NewSheetName).Range("E56").Value = "C" Sheets(NewSheetName).Range("F56").Value = "時間" Sheets(NewSheetName).Range("G56").Value = "状態" End If 'ここまで! どなたかご教示お願いします .Activate End With

  • VBAのEXITでのエラー

    エクセルのフォームで入力したデータをシートに保存しようとしています。 ID番号でシートからvlookupで検索を行い、データがあれば自動で個人情報を入力します。マウス操作無しで連続入力したいので、一度登録ボタンをクリックし、シート最下行に登録したら、その後タブをIDテキストボックスにフォーカスします。Private Sub TextBoxID_Exit(ByVal Cancel As MSForms.ReturnBoolean)にコマンドを記入しているのですが、終了する際にテキストボックスに値がないためエラーが発生します。どうすればエラー回避できるでしょうか?フォームの画像とコマンドの一部を下記に記入します。よろしくお願いします。 フォーカスがIDにある状態で終了ボタンを押すとexitプロシージャが発生するためのエラーだと思うんですが、どうでしょうか? うまく説明できていないかもしれませんがよろしくお願いします。 ***************************************************************** Private Sub TextBoxID_Exit(ByVal Cancel As MSForms.ReturnBoolean) ID = TextBoxID.Text 'テキストボックスIDの値を取得 On Error GoTo ErrHdl '下記コマンドvlookupがエラーの場合ErrHdl処理する Worksheets("data").Activate 'dataシートをアクティブにする With ActiveSheet TextBoxシメイ.Value = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 2, False) TextBox誕生日.Value = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 3, False) sex = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 4, False) If sex = "M" Then OptionButton男.Value = True Else OptionButton女.Value = True End If TextBox体重.SetFocus End With Exit Sub ErrHdl: 'IDがなかった場合の処理 If TextBoxシメイ.Value = "" Then MsgBox "新規です" Exit Sub End If End Sub ************************************************************************************** Private Sub CommandButton登録_Click() With Worksheets("data") lastrow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 '最終行にデータを追加する .Cells(lastrow, 1).Value = TextBox撮影日.Text '最終行の1列目の値 .Cells(lastrow, 2).Value = TextBoxID.Text .Cells(lastrow, 3).Value = TextBoxシメイ.Text .Cells(lastrow, 4).Value = TextBox誕生日.Text .Cells(lastrow, 5).Value = sex .Cells(lastrow, 6).Value = TextBox体重.Text .Cells(lastrow, 7).Value = ComboBox撮影区分.Text .Cells(lastrow, 8).Value = ComboBox撮影部位.Text .Cells(lastrow, 9).Value = TextBoxFOV.Text .Cells(lastrow, 10).Value = TextBox寝台高.Text .Cells(lastrow, 11).Value = TextBoxDLP.Text .Cells(lastrow, 12).Value = TextBoxCTDI.Text .Cells(lastrow, 13).Value = TextBox電圧.Text .Cells(lastrow, 14).Value = TextBoxmAs.Text End With 'TextBox撮影日.Text = "" TextBoxID.Text = "" TextBoxシメイ.Text = "" TextBox誕生日.Text = "" OptionButton男.Value = False OptionButton女.Value = False TextBox体重.Text = "" ComboBox撮影区分.Text = "" ComboBox撮影部位.Text = "" TextBoxFOV.Text = "" TextBox寝台高.Text = "" TextBoxDLP.Text = "" TextBoxCTDI.Text = "" TextBox電圧.Text = "" TextBoxmAs.Text = "" Me.ComboBox撮影区分.Text = 区分 '初期値を再設定(この変数は他で宣言済み) Me.ComboBox撮影部位.Text = 部位 Me.TextBox電圧.Text = 電圧 TextBoxID.SetFocus 'TextBoxIDに移動 End Sub ***************************************************************************** Private Sub CommandButton終了_Click() Unload UserForm2 'フォームを消去 End Sub **********************************************************************************

  • <excel:VBA>変数を使って簡略化したい

    google検索してなんとか自力で作ったVBAを下記に貼りました。 きちんと動作はするのですが、せっかくなので変数を使って簡素化し、 データが多くても動作が速くなるようにしたいのです。 いろいろ試しましたが、変数の使い方の知識が乏しく、うまくいきませんでした。 変数としたいのは■マークの2箇所になると思います。 詳しい方、力を貸していただけないでしょうか。 どうぞよろしくお願いいたします。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Sub オートフィルタ貼付作業() With Sheets("データ").Range("A3") Application.ScreenUpdating = False Range("AA3:EK3").AutoFilter .AutoFilter Field:=1, Criteria1:="1" ’■Fieldが1ずつ増えていく Range("AA3").Copy Range("Z3") ’■AA3が1列ずつ右へずれていく .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter Range("AA3:EK3").AutoFilter .AutoFilter Field:=2, Criteria1:="1" Range("AB3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter ~~~~~~~~~~~~ 115列分のデータがあり 下記まで同じようにつづきます ~~~~~~~~~~~~ Range("AA3:EK3").AutoFilter .AutoFilter Field:=115, Criteria1:="1" Range("ek3").Copy Range("Z3") .CurrentRegion.Copy Sheets("貼付").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Range("A3").AutoFilter End With Application.ScreenUpdating = True Sheets("貼付").Activate Cells.Columns.AutoFit End Sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

  • vba エクセル

    2行目から、最終行までEmptyにしたいのにならないです。 1行目はフィールド行なのに、そのままにしたいのですが 2行目から最終行は空白にしたいです。 なので Sub TEST() With Sheets("log") lastRow = .Cells(.Rows.Count, "b").End(xlUp).Row LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column .Range(.Cells(2, LastCol), .Cells(lastRow, LastCol)) = Empty End With End Sub としたのですが、何も起こりません。 lastRowは100、LastColは5なのですが、 このマクロを実行しても何も起こらないです。 なぜでしょうか?

  • エクセルVBA  どうしても動きません。

    お世話になります。 なかなか上達しない超初心者です。 ↓↓ですが、Activesheetにすると動くのに、シート名を元々存在するシート”実験"に指定すると動きません(データ内容はまったく同じで、A列に色んな名前が入っていて、重複しているとC列に重複と入力します)。 2日間試行錯誤したのですが、やっぱり動かず・・・ ちなみに、Activateにするとアクティブになるし、CurrentRegionも選択できるのに なんでうごかないんでしょうか・・・ 何卒ご指導くださいませ。よろしくお願いいたします!!!!!! Sub Test2() With Sheets("実験").Range("A1").CurrentRegion Dim i As Long Dim LastRow As Long LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To LastRow If WorksheetFunction.CountIf(Range("A:A"), Cells(i, 1)) > 1 Then Cells(i, 3) = "重複" End If Next i End With End Sub Sheets("実験")をActivesheetに変えると別のシートがしっかり動いてくれます・・・が、なんとしてでも”実験”シートに動いていただきたいです・・・。

専門家に質問してみよう