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
Vba 无法选择范围_Vba_Excel - Fatal编程技术网

Vba 无法选择范围

Vba 无法选择范围,vba,excel,Vba,Excel,我正在创建一个VBA宏,以将经过筛选的数据范围拉入模板。我一直在获取未定义的范围错误 我曾尝试在Excel中使用宏录制工具,但当我尝试在编写代码时,它会立即中断 'filter to correct range ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=14, Criteria1:="-333" ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=17, Criteria1:= _

我正在创建一个VBA宏,以将经过筛选的数据范围拉入模板。我一直在获取未定义的范围错误

我曾尝试在Excel中使用宏录制工具,但当我尝试在编写代码时,它会立即中断

'filter to correct range
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=14, Criteria1:="-333"
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=17, Criteria1:= _
    "rslicenceHolder"

'Copy Results and Paste into Template
Range("A1082:T1082").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Active.Workbook("Sample Chasers Template .xlsx").Activate
Sheets("RS Chasers").Select
Range("A4").Select
ActiveSheet.Paste

您对工作簿示例追逐器模板.xlsx的引用不正确。试试这个:

ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=14, Criteria1:="-333"
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=17, Criteria1:= _
    "rslicenceHolder"

'Copy Results and Paste into Template
Range("A1082:T1082").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
'Active.Workbook(Sample Chasers Template .xlsx").Activate
Workbooks("Sample Chasers Template .xlsx").Activate

Sheets("RS Chasers").Select
Range("A4").Select
ActiveSheet.Paste
不过我要提到的是,无论过滤结果实际在哪里,您仍然会复制和粘贴A1082:T1082及其下。您可能还想将该部分替换为以下内容:

Range("A1:T1").Select
Range(Selection, Selection.End(xlDown)).Select
编辑以包括OP指定的实际工作簿名称

假设要将所有列A复制/粘贴到T过滤单元格(不包括标题):

Dim repWB as Workbook, tempWb as Workbook 

Set tempWb = Workbooks.Open("C:\Desktop\Template.xlsx") '<--| change "C:\Desktop\" to actual path of template workbook
Set repWB = Workbooks.Open("C:\Desktop\Report.xlsx") '<--| change "C:\Desktop\" to actual path of report workbook
With repWB.Range("$A$1:$X$1647")
    .AutoFilter Field:=14, Criteria1:="-333"
    .AutoFilter Field:=17, Criteria1:="rslicenceHolder"
    If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.count - 1, 20).Offset(1).SpecialCells(xlCellTypeVisible).Copy             tempWb.Sheets("RS Chasers").Range("A4")
    .Parent.AutoFilterMode = False
End With

下面的代码将过滤后的表格从工作表复制到示例Chasers Template.xlsx工作簿中的Chasers工作表

注意:尽量避免使用ActiveSheet,选择并选择,而使用完全限定对象

代码


你的目标是什么?要复制/粘贴所有筛选值还是仅复制/粘贴特定行范围内的筛选值?首先,不要使用。选择“无处不在”,使用变量来生成和存储这些范围。使用select是一个问题,因为如果在代码运行时单击Excel中的任意位置,它会抛出所有内容,因为您正在更改当前选择。其次,什么是活动的。工作簿?它应该是ActiveWorkbook.User3598756,我想将过滤后的数据从A行复制到T行的模板中,并且标题已经在模板中,所以我不想复制工作表中的标题。这很好,但现在我得到的错误9下标超出了范围,但它正在复制,并且进度总是很好。目前,我的两个工作簿如下:Dim wkb as Workbook和Dim tmp as workbooks Set tmp=workbooks.OpenTemplate.xlsx和Set wkb=workbooks.OpenReport.xlsx您需要包括完整路径和引号,例如Set tmp=workbooks.OpenC:\Desktop\Template。xlsx@bagleyboy,请参见编辑后的答案以匹配您的实际工作簿名称。您只需将其当前路径C\Desktop\更改为实际路径。如果这解决了您的问题,请将答案标记为已接受谢谢。谢谢!这就像一个符咒,必须始终记住使用昏暗的范围。
Option Explicit

Sub CopyFilterData()

Dim Rng As Range, VisRng As Range

With Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name
    Set Rng = .Range("$A$1:$X$1647") ' <-- better use referenced sheet than ActiveSheet

    Rng.AutoFilter Field:=14, Criteria1:="-333"
    Rng.AutoFilter Field:=17, Criteria1:="rslicenceHolder"

    Set VisRng = Rng.Resize(Rng.Columns(17).SpecialCells(xlCellTypeVisible).Cells.Count, 20).Offset(1, 0) '<-- set visible Range to filtered range

    VisRng.Copy Destination:=Workbooks("Chasers Template.xlsx").Worksheets("RS Chasers").Range("A4")   '<-- copy >> paste in 1 line
End With

End Sub