Excel 范围选择不正确

Excel 范围选择不正确,excel,vba,filter,range,Excel,Vba,Filter,Range,有人能指出我的范围定义.range(“B1:D”和lRow2).Copy中的错误吗?-我尝试了范围定义的多种变体,但它们要么只复制标题行,要么复制大量空白行。这可能是由于与过滤的错误交互造成的吗 Sub PillarInstances_WordDoc_FormatTbl() Dim PlDict As Object Dim Pl As Range Dim PlLst As Variant Dim lRow As Long Dim lRow2 As Lon

有人能指出我的范围定义
.range(“B1:D”和lRow2).Copy中的错误吗?
-我尝试了范围定义的多种变体,但它们要么只复制标题行,要么复制大量空白行。这可能是由于与过滤的错误交互造成的吗

Sub PillarInstances_WordDoc_FormatTbl()

    Dim PlDict As Object
    Dim Pl As Range
    Dim PlLst As Variant
    Dim lRow As Long
    Dim lRow2 As Long
    Dim ws As Worksheet
    Dim i As Long
    Dim HoldingPath As String
    Dim LastDay As Date
    Dim wdApp As Object
    Dim wdDoc As Object
    Dim WordDocName As String

    Application.ScreenUpdating = False
        
    HoldingPath = "C:\Users\abc\xyz\Instances\"
    LastDay = DateSerial(Year(Date), Month(Date), 0) 'last day of previous month
    lRow = Range("A" & Rows.Count).End(xlUp).Row
    lRow2 = Range("B" & Rows.Count).End(xlUp).Row
            
    Set ws = Worksheets("Instances")

        ws.Select
        ActiveSheet.ListObjects("Instances").Unlist
    
    Set PlDict = CreateObject("Scripting.Dictionary")
    Set wdApp = CreateObject("Word.Application") 
    
    With PlDict
        For Each Pl In ws.Range("A2:A" & lRow)
            If Not .Exists(Pl.Text) Then .Add Pl.Text, Nothing
        Next Pl
        PlLst = .Keys
    End With
    
    With ws.Range("A1")
        .AutoFilter
        .AutoFilter Field:=5, Criteria1:=">" & CLng(LastDay) 
        For i = 0 To PlDict.Count - 1
            .AutoFilter Field:=1, Criteria2:=PlLst(i)
            .Range("B1:D" & lRow2).Copy
        
        Set wdDoc = wdApp.Documents.Add("C:\Users\abc\xyz\ReportTemplate1.dotx")
        wdDoc.Bookmarks("InstancesTable").Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False
        WordDocName = PlLst(i) & "_Instances_" & Format(Date, "yyyymmdd")
        wdDoc.SaveAs Filename:=HoldingPath & WordDocName & ".docx", FileFormat:=wdFormatXMLDocument, FileFormat:=wdFormatXMLDocument

        wdDoc.Close savechanges:=False
        Set wdDoc = Nothing
        
        Next i
    End With
    
    ws.AutoFilter.ShowAllData
    
    ws.Name = "Instances_" & Format(Date, "yyyymmdd")
    
    Application.ScreenUpdating = True
    
End Sub

非常感谢

您可以尝试以下调整来解决过滤器问题:

1) 您已经编写了两次
.AutoFilter
,这不是必需的

2) 尝试创建过滤器时,最好确定VBA中从第一行到最后一行的范围

3) 写入
xlCellTypeVisible
以防止复制空行

   With ws.Range("A1&F" & lRow2)
            .AutoFilter Field:=5, Criteria1:=">" & CLng(LastDay)
            For i = 0 To PlDict.Count - 1
                .AutoFilter Field:=1, Criteria2:=PlLst(i)
                .Range("B1:D" & lRow2).SpecialCells(xlCellTypeVisible).Copy
4) 完成所有操作后,建议重置过滤器以显示所有信息:

With ws.Range("A1&F" & lRow2)
    .AutoFilter Field:=1, Criteria2:="="
    .AutoFilter Field:=5, Criteria1:="="
End With

.Range(“B1:D”和lRow2).Copy
指向带有ws.Range(“A1”)的
,因此它得到
ws.Range(“A1”)Range(“B1:D”和lRow2).Copy
但它应该是
ws.Range(“B1:D”和lRow2).Copy
中的lRow2=范围(“B”和行数).结束(向上).Row
您没有指定要在哪个工作表中查找最后一行。切勿在未指定工作表的情况下使用
范围
单元格
(否则Excel可能会猜测并失败)。谢谢@PEH-明白!但是我现在正在努力进行下一步,因为过滤列(col F)超出了
.Range(“B1:D”&lRow2)
。我应该用什么替换
ws.Range(“A1”)
?我尝试了
ws.CurrentRegion
,但出现了错误。请离开
ws.Range(“A1”)
,但为复制行指定类似
ws.Range(“B1:D”&lRow2).的工作表。我只能猜测,因为我们不知道你的数据在应用过滤器前后是什么样子。谢谢Kin,我仍然只得到标题行,也是当我按照@PEH的建议添加
ws
时,即
ws.Range(“B1:D”&lRow2)。特殊单元格(xlCellTypeVisible)。复制
我明白了,也许您应该从
B2
开始,而不是从
B1
开始,因为您不应该复制标题。如果还需要标题,只需复制
B1:D1
即可将其分隔开。问题在于过滤,而不是复制。请原谅一个分析不当的问题-(好的,您可以尝试使用宏录制器并录制您的操作,从那里您将知道您应该使用的正确筛选条件,尤其是您正在使用的
。直到今天,我仍将使用录制器,以防我无法100%确认。非常感谢Kin和@PEH-您的提示非常有用!