通过 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

在 Excel VBA 中对一系列单元格使用自动填充

Excel vba将公式从一列自动填充到Excel中的最后一列

使用excel VBA仅引用一个数字来自动填充日期