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-您的提示非常有用!