昨日、このコードで助けを受けていましたが、私はVBAにとって全く新しいので、難しかったです。私のコードを説明するにはシート名に基づくブックのセル範囲のコピー
1つのブックから別のブックの同じセル範囲にセルの範囲をコピーしようとしていますが、ワークシートの名前は同じでなければなりません。コードはワークシートが存在するかどうかをテストすることになっているので、2つのワークブックに対応するワークシートがあります。名前が同じであれば値を取るが、そうでなければ、workbook1のすべてのシートを調べて正しいシートを見つける。コードが実行されますが、セルをコピーしていません。
問題は、最初のループ内のsheetexists行に起因すると考えられます。ループを実行する前にシートが存在するかどうか確認する必要があることを確認する必要があると言われましたが、その方法はわかりません。
ありがとうございました!
Function SheetExists(shtName As String, Optional wb As Workbook) As Boolean
Dim sht As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(shtName)
On Error GoTo 0
SheetExists = Not sht Is Nothing
End Function
Sub foo()
Dim wbk1 As Workbook
Dim wbk2 As Workbook
Dim shtName1 As String
Dim shtName2 As String
Dim i As Integer
Dim p As Integer
Set wkb1 = Workbooks.Open("C:\Users\lliao\Documents\Trad Reconciliation.xlsx")
Set wkb2 = Workbooks.Open("C:\Users\lliao\Documents\TradReconciliation.xlsx")
i = 2
p = 2
shtName2 = wkb2.Sheets(i).Name
shtName1 = wkb1.Sheets(p).Name
For i = 2 To wkb2.Worksheets.Count
If (SheetExists(shtName2) = True) And (SheetExists(shtName1) = True) Then
For p = 2 To wkb1.Worksheets.Count
If shtName2 = shtName1 Then
wkb2.Sheets(shtName2).Range("D2:G2").Value = wkb1.Sheets(shtName1).Range("D2:G2").Value
End If
Next p
End If
Next i
End Sub
私は何をしているのか分かります。これは私に、行とのByRef引数不一致エラーを与える。 SheetExists(wkb2.worksheets(i).Name、wkb1)、それはwkb1を強調表示した。 shtnameがそのループ内で変化していなかったことに気づいた。これはもっと意味があります – leetontea
申し訳ありません - タイプミス( "wbk"の代わりに "wkb") - 回答を修正します – YowE3K
@leetontea - 私は仕事をしました**なぜ**私はタイプミスを持っていました。私の答えの最後に追加したコメントを参照してください。 – YowE3K