コードがあります。セルに Excel ワークブックのパスを入力してボタンをクリックすると、ワークブックが開き、B2 の現在のワークブックのデータがコピーされ、新しく開いたワークブックに貼り付けられます。コードは正常に動作します。しかし、問題はコードがクラッシュしてエラーが発生することです。何が問題なのか理解できません。コードが正常でない場合、コードは完全に実行されることはありません。しかし、私の場合は、正常に実行されることもあれば、エラーが発生することもあります。助けてください。エラーは次のとおりです。
範囲クラスの選択メソッドが失敗しました
そしてこれがコードです -
Private Sub CommandButton1_Click()
Dim pathCell As String
pathCell = Range("locationPath").Value
Dim wbTarget As Workbook 'workbook where the data is to be pasted
Dim wbThis As Workbook 'workbook from where the data is to be copied
'set to the current active workbook (the source book)
Set wbThis = ActiveWorkbook
'copy the range from source book
wbThis.Worksheets(1).Range("B1").Copy
'open a workbook that has same name as the sheet name
Set wbTarget = Workbooks.Open(pathCell)
'Select the target cell
wbTarget.Worksheets(2).Range("B1").Select
'paste the data on the target book
wbTarget.Worksheets(2).Range("B1").PasteSpecial Paste:=xlPasteAll
'clear any thing on clipboard to maximize available memory
Application.CutCopyMode = False
Worksheets(1).Activate
End Sub
ご協力いただければ幸いです。
答え1
この行だけが含まれているので、この行で失敗していると思われます。.Select
'Select the target cell
wbTarget.Worksheets(2).Range("B1").Select
その行は、実行時に
Worksheets(2)
アクティブ シートでない場合、エラーが表示されて失敗します。ワークシートと範囲は別のコード行で選択する必要があります。マクロが断続的にエラーになるのは、おそらくこのためです。おそらく、ブックを閉じる前にそのワークシートから移動することもありますが、それ以外のときは移動しません。しかし貼り付け操作に関しては、これは役に立たないようですが、行を削除しても貼り付けは同様に機能するはずです。
- 後続のコード行は、ターゲット セルを完全に修飾します。
'paste the data on the target book
wbTarget.Worksheets(2).Range("B1").PasteSpecial Paste:=xlPasteAll
何らかの理由で、マクロの完了時にそのセルを必ず選択する必要がある場合は、まずワークシートを選択し、次にセルを選択します。
こちらもご覧くださいExcel VBAでSelectの使用を避ける方法 姉妹サイトの StackOverflow で。