Can';t在Excel vba宏中指定精确范围

Can';t在Excel vba宏中指定精确范围,excel,vba,Excel,Vba,今天是我在Excel中使用VBA宏的第一天。我所要做的就是指定一列,从中获取不同的值,并将它们复制到另一列中,该列位于不同的工作表上。我读了很多书,这就是我想到的: Sub TestS() Dim lastRow As Long lastRow = Worksheets(3).Range("A" & Rows.count).End(xlUp).Row Worksheets(3).Range(Cells(3, 1), Cells(lastRow, 1)).Advan

今天是我在Excel中使用VBA宏的第一天。我所要做的就是指定一列,从中获取不同的值,并将它们复制到另一列中,该列位于不同的工作表上。我读了很多书,这就是我想到的:

Sub TestS()
    Dim lastRow As Long
    lastRow = Worksheets(3).Range("A" & Rows.count).End(xlUp).Row
    Worksheets(3).Range(Cells(3, 1), Cells(lastRow, 1)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets(2).Range("A3"), Unique:=True
End Sub
lastRow当前指向正确的位置,但我得到错误:

运行时错误1004提取范围缺少字段名或字段名无效


显然语法有问题,但我尝试了许多不同的方法,但没有一种有效

像这样的任务,我建议使用简单的SQL查询。通过这种方式,您可以建立到源工作表的连接,该工作表可以随时刷新(如数据透视表),代码更加简单灵活。查询:

SELECT DISTINCT * FROM [Sheet1$]
如何在Excel中使用SQL?在“数据”功能区的“外部数据”部分中查找“Microsoft查询”。或者在此处下载我的Excel外接程序:

只需限定单元格():

Sub TestS()
    Dim lastRow As Long
    With Worksheets(3)
        lastRow = .Range("A" & Rows.Count).End(xlUp).Row
        .Range(.Cells(1, 1), .Cells(lastRow, 1)).AdvancedFilter _
            Action:=xlFilterCopy, _
            CopyToRange:=Worksheets(2).Range("A3"), Unique:=True
    End With
End Sub

对我来说工作正常-错误到底是什么?
运行时错误1004提取范围缺少字段名或字段名无效。
Btw确实
copytorrange:=工作表(2)。范围(“A3”)
意味着它将从A3开始,并复制所有唯一的元素,程序在指定列中找到了?否-这意味着它将把表3 A列中的唯一项复制到表2中的A列
A3
。在这种情况下,我如何指定从A3开始在表2中的A列中复制它们,以便第一个元素在A3中,A4中的第二个,依此类推?我正在从数据库导出数据,以便我可以在那里完成所有操作,但我想学习如何在vba中编写宏。请确保在调试时我们引用了正确的工作表,我可以看到列的值,并且它是正确的。