プロが教える店舗&オフィスのセキュリティ対策術

タイトルの通りです。VBA詳しい方お教え頂けると助かります…
転記元データから転記先へ、シート名が同じだった場合に指定のセルを貼り付けるVBAを作成中です。
尚、シート名が同じ場合が2つ以上ある場合もあります。
VBAもサイトを巡って組んだ為、おかしい箇所あればご指摘下さい。
flag = True以下の転記内容を実行する際にエラーが出ます。
エラー内容はオブジェクト変数またはwithブロック変数が設定されていませんです。


Option Explicit

Sub マスターデータ取り込み02() '選択したファイルを取り込み、別のファイルに貼り付ける

Dim RC As Integer
Dim OpenFileName, fileName, SetFile As String
Dim wbMoto, wbSaki As Workbook
Dim sh1name As String
Dim i As Long
Dim flag As Boolean

sh1name = ActiveSheet.Name '現在開いているシート名

Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をセット

RC = MsgBox("転記元を開きますか?", vbYesNo + vbQuestion, "確認")
If RC = vbYes Then 'もしRCのメッセージにYesと答えたら

OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
'ダイアログボックスを表示して、マスターデータファイルを指定します。

If OpenFileName <> "Fales" Then 'もし指定したファイルがFalseではなかったら
SetFile = OpenFileName 'マスターデータファイルの指定=SetFile
Else '指定したファイルがなかったら
MsgBox "キャンセルされました" 'キャンセルされましたというメッセージボックスが表示される
Exit Sub 'マスターデータの取り込みをキャンセル
End If

For i = 1 To ActiveWorkbook.Worksheets.Count 'アクティブブックのシートを全てカウント
If Worksheets(i).Name = sh1name Then 'もし転記元のシートの名前と現在開いているブックのシートの名前が一緒だったら
flag = True

wbSaki.Worksheets(i).Range("G2:N32").Copy
wbMoto.Worksheets(sh1name).Range("G2:N32").PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next i
If flag <> True Then 'フラグが"True"ではなかったら
MsgBox sh1name & "シートはありません。", vbInformation 'シートはありませんの情報メッセージアイコンが出る
wbSaki.Close False 'ExcelBのファイルを閉じる
End If


Application.CutCopyMode = False 'コピー切り取りを解除
wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
Else
MsgBox "処理を中断します"
End If
Application.DisplayAlerts = True
End Sub

質問者からの補足コメント

  • つらい・・・

    wbSaki.Worksheets(i).Range("G2:N32").Copy
    ここの実行時にエラーが出ます。
    正しく実行するにはどういう式にすれば良いでしょうか?
    よろしくお願いいたします。

      補足日時:2021/11/15 16:38

A 回答 (2件)

こんにちは。



For i = 1 To ActiveWorkbook.Worksheets.Count
If Worksheets(i).Name = sh1name Then
flag = True
wbSaki.Worksheets(i).Range("G2:N32").Copy

変数iが、Forでは、ActiveWorkbookのシート数になっていて、
flag=Trueでは、wbSaki.Worksheets(i)になっているため、
wbSakiのブックのシート数が、ActiveWorkbookより少ないときに、
選ぶシートがないためにエラーになっていると思われます。
    • good
    • 0

こんにちは



>wbSaki.Worksheets(i).Range("G2:N32").Copy
っていきなり指定していますけれど、変数 wbSaki には何も代入されていないのでは?

というか、「マスターを開く」処理を消してしまったのはなぜなんでしょうか?
(その結果、ForループのActiveWorkbookって wbMoto 内の各シートを検索していることになっているような気がしますけれど・・・?)
    • good
    • 0
この回答へのお礼

申し訳ございません。set wbsakiを消していました…
ご指摘ありがとうございます。

お礼日時:2021/11/15 16:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!