前提・実現したいこと
VBAの勉強を始めて2ヶ月の初心者です。
ユーザーにフォルダ名、検索シート名、検索列名を指定させ、予め用意したファイル一覧の中で、見出し(このプログラムだと9列目)に検索列名が含まれるものを別のシートに転記するプログラムをVBAで組んでいます。
以下のコードで実行時エラー1004『アプリケーション定義またはオブジェクト定義のエラーです』が出ます。
'最終列数を取得
最終列数 = .Cells(9, Columns.Count).End(xlToLeft).Column
発生している問題・エラーメッセージ
実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです
該当のソースコード
Excel
1Sub CommandButton1_Click() 2 3'変数の宣言 4Dim フォルダ名 As String 5Dim 検索シート名 As String 6Dim 検索列名 As String 7Dim ファイル名 As String 8 9Dim ファイル数 As Long 10Dim 読み込みファイル行 As Long 11Dim wb選択ブック As Workbook 12Dim ws選択シート As Worksheet 13Dim 最終列数 As Long 14Dim 列名検索結果 As Range 15 16Dim i As Long 17Dim j As Long 18Dim x As Long 19 20'入力情報の読み込み 21ファイル格納場所名 = wsデータ一覧.Range("B2").Value 22検索シート名 = wsデータ一覧 .Range("B4").Value 23検索列名 = wsデータ一覧 .Range("B6").Value 24 25'その他変数の宣言 26ファイル数 = wsデータ一覧.Cells(Rows.Count, 2).End(xlUp).row - 9 27読み込みファイル行 = 10 28x = 2 29 30'ファイルの数だけ繰り返す 31For i = 1 To ファイル数 32 'ファイル名の取得 33 ファイル名 = wsデータ一覧.Cells(読み込みファイル行, 2).Value 34 'ファイルを開く & 検索するシートを指定 35 Set wb選択ブック = Workbooks.Open(フォルダ名 & ファイル名) 36 Set ws選択シート = wb選択ブック.Worksheets(検索シート名) 37 '検索するシートに対する処理 38 With ws選択シート 39 40 '最終列数を取得 41 最終列数 = .Cells(9, Columns.Count).End(xlToLeft).Column 42 43 '検索列に該当するものを検索 44 For j = 1 To 最終列数 45 Set 列名検索結果 = .Cells(9, j).Find(What:= 検索列名 , LookAt:=xlWhole) 46 If 列名検索結果 Is Nothing Then 47 48 '該当の検索列が存在した場合 49 Else 50 'ファイル名を検索結果シートにセット 51 ws検索結果.Cells(x, 1).Value = ファイル名 52 '次にセットするセルを指定 53 x = x + 1 54 '繰り返し処理を抜ける 55 Exit For 56 57 End If 58 Next j 59 End With 60 61 'ファイルを閉じる 62 wb選択ブック.Close 63 '次に読み込むファイルの行を指定 64 読み込みファイル行 = 読み込みファイル行 + 1 65Next i 66 67End Sub 68
試したこと
ws選択シートを指定するとエラーが出ます(ワークシートを指定しない場合はwsデータ一覧の最終列数が取得出来ました)。
そこで.Nameと.CodeNameで確認したところ、ws選択シートには正しいワークシートオブジェクトが入っていることが分かりました。
補足情報(FW/ツールのバージョンなど)
使用しているのはExcel 2013です。
回答1件
あなたの回答
tips
プレビュー