Excel 试图避免。选择或。激活,但失败,错误为1004
我正在编写一个带有一些循环的小宏,效果很好,但现在尝试清理并避免使用.Select和.Activate,但在这样做时,我遇到了“错误1004” 使用使其工作正常。选择要查找数据的工作表,然后选择“返回到应粘贴的工作表” 下面是一些代码:Excel 试图避免。选择或。激活,但失败,错误为1004,excel,vba,Excel,Vba,我正在编写一个带有一些循环的小宏,效果很好,但现在尝试清理并避免使用.Select和.Activate,但在这样做时,我遇到了“错误1004” 使用使其工作正常。选择要查找数据的工作表,然后选择“返回到应粘贴的工作表” 下面是一些代码: Sub Sæt_ind_i_eksporten() Dim dagensliste As Worksheet Dim trailerliste As Worksheet Dim trailernummer As String Dim finalrow As I
Sub Sæt_ind_i_eksporten()
Dim dagensliste As Worksheet
Dim trailerliste As Worksheet
Dim trailernummer As String
Dim finalrow As Integer
Dim i As Integer
Dim t As Integer
Dim targetcount As Integer
Set trailerliste = ThisWorkbook.Sheets("Data ud (2)")
Set dagensliste = ThisWorkbook.ActiveSheet
Application.ScreenUpdating = False
targetcount = trailerliste.Cells(30, 1).End(xlDown).Row
finalrow = Cells(Rows.Count, 1).End(xlUp).Row
For t = 30 To targetcount
trailernummer = trailerliste.Cells(t, 3).Value
For i = 4 To finalrow
If Cells(i, 3) = trailernummer Then
' Here is where it fails - If I select the sheet manually, it moves on
trailerliste.Range(Cells(t, 1), Cells(t, 13)).Copy
' And here it fails again (logic i know!) select manually again and it moves on.
dagensliste.Range(Cells(i, 1), Cells(i, 13)).PasteSpecial xlPasteValues
End If
Next i
Next t
Application.GoTo reportsheet.Range(A1)
MsgBox ("Søgning gennemført")
Application.ScreenUpdating = True
End Sub
如果我替换trailerliste.Range(单元格(t,1),单元格(t,13))。用trailerliste复制。选择和Range(单元格(t,1),单元格(t,13))。在单独的行上复制,对dagensliste也是如此。选择,代码工作正常
我知道这是一件简单的事情,但我试着阅读所有我能在论坛上找到的没有运气
我希望有人能帮我:)
范围(单元格(x,y))比较复杂,因为必须指定单元格所在的工作表
trailerliste.Range(Cells(t, 1), Cells(t, 13)).Copy
一定是
trailerliste.Range(trailerliste.Cells(t, 1), trailerliste.Cells(t, 13)).Copy
这一行:
trailerliste.Range(Cells(t, 1), Cells(t, 13)).Copy
相当于:
trailerliste.Range(ActiveSheet.Cells(t, 1), ActiveSheet.Cells(t, 13)).Copy
如果trailerListe
恰好是活动工作表,则此操作正常。如果其他工作表处于活动状态,则会导致错误
不正确地使用范围(单元格,单元格)
是Excel VBA中最常见的错误源之一。它要求对一个工作表有三个不同的引用,并且所有三个都必须引用同一个工作表
这将有助于:
trailerliste.Range(trailerliste.Cells(t, 1), trailerliste.Cells(t, 13)).Copy
但通常使用块更容易:
在这种情况下,任何以
开头的引用都是指中带有块的跟踪列表中的对象
类似的范围
调用dagensliste
也需要更改为带有
块的,尝试:dagensliste.Cells(i,1)。粘贴特殊的xlPasteValues
Activesheet
是一种相当“危险”的做法,因为如果宏从另一个工作表启动,会发生什么?而是指定sheetname并将与。。。以
块结束。另外,我不确定为什么需要复制/粘贴值而不是引用单元格?我复制的数据每天都在更改,因此引用会导致目标中的数据更改?我实际上尝试了使用块,但这在我身上触发了相同的错误?请注意,使用With块时有三个
字符。一个在范围
前面,一个在对单元格
的每次调用前面。再次检查这三个选项是否都存在,或者只是复制并粘贴答案中的代码
With trailerliste
.Range(.Cells(t, 1), .Cells(t, 13)).Copy
End With