我對VBA相當陌生,所以我的許多代碼就是我在互聯網上研究並放在一起的代碼。有點背景,我試圖實現: -對象所需的運行時錯誤VBA搜索不同的工作簿時
我有兩本作品的書有相同的佈局。一本工作手冊是我原來的VBA代碼保存的,另一本是一種覆蓋文檔。我在Overlay中有一個帶有代碼的列,並且如果找到該代碼,則需要搜索原始工作簿的相同列,然後將整個行從疊加層複製到原始層中,並刪除在原始層中找到的行(如果未找到它)原來只是爲了複製行。
的代碼,我得到的運行時錯誤的路線是: -
Set rngFound = Workbooks("OverLay").Worksheets("Overlay").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
下面是我使用的代碼的摘錄。雖然它看起來像你的搜索欄
Dim originalWS As Worksheet '// give your variables meaningful names!
Dim overlayWS As Worksheet
Dim rngSearchParam As Range
Dim rngFound As Range
Set originalWS = Workbooks("Original").Sheets("Formatted")
Set overlayWS = Workbooks("Overlay").Sheets("Overlay")
With overlayWS
For Each rngSearchParam In Intersect(.Range("G:G"), .UsedRange)
Set rngFound = .Range("G:G").Find(rngSearchParam.Value, LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not rngFound Is Nothing Then
originalWS.Range(rngFound.Address).Value = rngFound.Value
End If
Next
End With
,用於:
Dim sht1 As Worksheet 'Current active worksheet (original version)
Dim sht2 As Worksheet 'Worksheet in OverLay
Dim rngFound As Range
Set sht2 = Workbooks("Overlay").Worksheets("Overlay")
With Workbooks("Original").Worksheets("Formatted")
lastRow = .Range("G" & .Rows.Count).End(xlUp).Row
End With
With sht2
For Each Row In .Range("G:G")
Set rngFound = Workbooks("OverLay").Worksheets("Overlay").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not rngFound Is Nothing Then
rngFound.Copy
Workbooks("Original").Worksheets("Formatted").Range(rngFound).PasteSpecial
End If
Next
End With
引用工作簿時使用擴展名。例如'Set rngFound = Workbooks(「OverLay.xlsx」)....'。您可以通過激活工作簿並在即時窗口中使用'?activeworkbook.name'來獲取正確的名稱。 – Jeeped
@Jeeped我按照你的建議做了修改,但是我仍然得到那個錯誤 – user3088476
你試圖找到哪個'r'的「價值」是什麼?看起來你會輸入'Row' – user3598756