Sub 取り込み()
Dim myPath As String, myName As String
Dim twb As Workbook, ws As Worksheet
Dim OpenFileName As String
With ThisWorkbook
ChDir ThisWorkbook.Path & "\data\"
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
If OpenFileName = "False" Then Exit Sub
myName = Dir(OpenFileName)
Workbooks.Open OpenFileName
For Each ws In Worksheets
If SheetCopyFLG(ws) Then 'ここにあるのですが
ws.Copy after:=.Worksheets(.Worksheets.Count)
End If
Next ws
Workbooks(myName).Close
End With
End Sub
'-------------------------------------------------------------
Function SheetCopyFLG(tws As Worksheet) As Boolean 'ここをエラーと指す
Dim ws As Worksheet
SheetCopyFLG = True
For Each ws In ThisWorkbook.Worksheets
If tws.Name = ws.Name Then
If MsgBox(tws.Name & "は存在します。コピーしますか?", _
vbYesNo + vbExclamation, "SheetCopy") <> vbYes Then
SheetCopyFLG = False
End If
Exit Function
End If
Next ws
End Function
マクロ自体は動くのですが、ブックを起動時にvbaの画面になりコンパイルエラー
オートメーションエラーです
致命的なエラーです
とでます、どうしてでしょうか。
bvaを閉じマクロ実行すると問題なく実行します。
No.1
- 回答日時:
No.2ベストアンサー
- 回答日時:
>オートメーションエラーです
Sub 取り込み()
With ThisWorkbook
となっていて、
For Each ws In Worksheets 'オープンしたシートを
'以下でループさせて、
Function SheetCopyFLG(tws As Worksheet)
For Each ws In ThisWorkbook.Worksheets
エラーの直接の原因は分かってはいませんが、こちらで、そのパラメータのtwsを捨てるかどうか、対話型にしているわけですが、そういう、ループのオブジェクト型の変数を、そのまま外のコードに渡すのはうまくないと思います。
If tws.Name = ws.Name Then
やっていることは文字比較なのですから、最初から、文字列で渡せばよいわけです。
Sub 取り込み()
For Each ws In twb.Worksheets
If SheetCopyFLG(ws.Name) Then
'--------------------
Function SheetCopyFLG(shName As String) As Boolean '文字列で渡す
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If UCase(shName) = UCase(ws.Name) Then '文字列比較
If MsgBox(shName & "は存在します。コピーしますか?", _
vbYesNo + vbExclamation, "SheetCopy") <> vbYes Then
SheetCopyFLG = False
Exit Function
Else
SheetCopyFLG = True
Exit Function
End If
End If
Next ws
SheetCopyFLG = True
End Function
しかし、私なら、例えば、裏技的ですが、このように、dummy(dumm) を使って、オブジェクトが取れるなら、シートがある、オブジェクトがないなら、シートはないということも可能です。
For Each ws In twb.Worksheets
On Error Resume Next
Set dumm = .Worksheets(ws.Name)
If IsEmpty(dumm) = False Then
If MsgBox("同じシート名があります。" & ws.Name & vbCrLf & _
"コピーしますか?", vbOKCancel) = vbOK Then
ws.Copy after:=.Worksheets(.Worksheets.Count)
End If
Else
ws.Copy after:=.Worksheets(.Worksheets.Count)
End If
dumm = Empty 'Variant 型の空の値
On Error GoTo 0
Next
twb.Close False
End If
Next
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ワイルドカード「*」を使うとう...
-
【困っています2】VBA 追加処...
-
VBA シート名が一致した場合の...
-
EXCEL VBA 単語置き換え につい...
-
ExcelのVBAです。フォルダ内の...
-
エクセル VBA 他シートの行を選...
-
エクセルVBAで書式と値の貼付け...
-
VBA 別ブックからコピペしたい...
-
VBS Bookを閉じるコード
-
マクロで最終行を取得したい
-
【前回の続き続きです、ご教示...
-
クリップボードに貼付している...
-
Excel-VBAでのファイルの開き方
-
VBAで別ブックのシートを指定し...
-
【マクロ】違うフォルダにある...
-
VBSでExcelのオープン確認
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報