通过 VBA 自动填充导致列清除
Posted
技术标签:
【中文标题】通过 VBA 自动填充导致列清除【英文标题】:Autofill via VBA results in column clearing 【发布时间】:2018-10-21 23:15:05 【问题描述】:我对 VBA 非常熟悉,所以这是一个非常奇怪的问题。我正在尝试在导入数据后自动填充单独的列范围。一切正常,A:C 列自动填充正确,但 AT 列的自动填充会导致整个列被清除。我已经确定正确的公式在单元格 AT2 中。我可能只是在代码中有一个愚蠢的错误,但我很难过。任何帮助将不胜感激。
Dim wbCopy As Workbook
Dim wsCopy As Worksheet, wsPaste As Worksheet
Dim FileCopy As String
Dim rgCopy As Range, rgPaste As Range
Dim lRowPaste As Long
FileCopy = "C:\Users\Nick\File.csv"
Set wbCopy = Workbooks.Open(FileCopy)
Set wsCopy = wbCopy.Sheets(1)
Set wsPaste = Workbooks("Stats").Sheets("Logs")
Set rgCopy = wsCopy.Range("A1").CurrentRegion
Set rgCopy = rgCopy.Resize(rgCopy.Rows.Count - 1).Offset(1, 1)
Set rgPaste = wsPaste.Range("D2")
Set rgPaste = rgPaste.Resize(rgCopy.Rows.Count, rgCopy.Columns.Count)
rgPaste.Value2 = rgCopy.Value2
wbCopy.Close savechanges:=False
lRowPaste = wsPaste.Range("F" & Rows.Count).End(xlUp).Row
wsPaste.Range("A2:C" & lRowPaste).FillDown '-----> DOES WORK
wsPaste.Range("AT2").AutoFill Destination:=wsPaste.Range("AT2:AT" & lRowPaste) '-----> DOES NOT WORK
wsPaste.Range("AT2:AT" & lRowPaste).FillDown '-----> DOES NOT WORK
【问题讨论】:
【参考方案1】:我没有发现任何问题,但您可以尝试更换这部分:
With wsPaste
lRowPaste = .Range("F" & Rows.Count).End(xlUp).Row
.Range("A2:C" & lRowPaste).FillDown '-----> DOES WORK
.Range("AT2").AutoFill Destination:=.Range("AT2:AT" & lRowPaste) '-----> DOES NOT WORK
.Range("AT2:AT" & lRowPaste).FillDown '-----> DOES NOT WORK
End With
用这个:
With wsPaste
lRowPaste = .Range("F" & Rows.Count).End(xlUp).Row
.Range("A2:C" & lRowPaste).FillDown '-----> DOES WORK
.Range("AT2").AutoFill Destination:=.Range("AT2:AT" & lRowPaste) '-----> DOES NOT WORK
.Range("AT2:AT" & lRowPaste).FillDown '-----> DOES NOT WORK
End With
并检查 lastrow 是否得到正确的值,以确认您使用了正确的范围。
【讨论】:
我试了一下,结果一样。我真的很难过......幸运的是这是一个小问题,但它真的没有意义。以上是关于通过 VBA 自动填充导致列清除的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)
应用公式,然后自动填充数据,直到列中的最后一个可见单元格:VBA