Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 试图避免。选择或。激活,但失败,错误为1004_Excel_Vba - Fatal编程技术网

Excel 试图避免。选择或。激活,但失败,错误为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

我正在编写一个带有一些循环的小宏,效果很好,但现在尝试清理并避免使用.Select和.Activate,但在这样做时,我遇到了“错误1004”

使用使其工作正常。选择要查找数据的工作表,然后选择“返回到应粘贴的工作表”

下面是一些代码:

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