自动填充目标创建更长的运行时间

Posted

技术标签:

【中文标题】自动填充目标创建更长的运行时间【英文标题】:Autofill destination creating longer runtime 【发布时间】:2015-08-28 20:12:30 【问题描述】:

我使用以下宏将文本转换为正确的格式。我选择一个单元格并运行宏。假设 A 列包含 3 个填充行(比如 A1、A2 和 A3,我想将公式 PROPER 应用于 B1、B2 和 B3 列,B1 是我的活动单元格。当我运行宏时,自动填充需要很长时间,因为在选择 B1 到 B3 时,宏考虑的行数直到工作表的末尾,而不是 A 列中的行数。请建议我如何解决有关自动填充目标的问题。

Sub Macro7()
'
' Macro7 Macro
'
' Keyboard Shortcut: Ctrl+Shift+V
'
    ActiveCell.FormulaR1C1 = "=PROPER(RC[-1])"
    ActiveCell.Select
    **Selection.AutoFill Destination:=Range(Selection, Selection.End(xlDown))**
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, -1).Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.ClearContents
End Sub

【问题讨论】:

你怎么用宏?为什么不直接在B列的单元格中输入? 【参考方案1】:

假设您的数据从 A1 开始,并且您想将公式放在 B 列中,您可以使用以下内容(注意删除 .Select

Sub macro7()
Dim lastRow as integer
lastRow = Activesheet.usedrange.rows.count
Range("B1").Formular1c1 = "=Proper(RC[-1])"
Range("B1").AutoFill Destination:=Range(Cells(1,2),Cells(lastRow,2))
Range(Cells(1,2),Cells(lastRow,2)).Copy
Range(Cells(1,2),Cells(lastRow,2)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range(Cells(1,1),cells(lastRow,1)).ClearContents
End sub

但是,如上所述,您为什么要将它作为宏?除非要添加更多内容,否则仅在单元格中使用 =Proper(a1) 并在不使用 VBA 的情况下自动填充可能会更快更容易。

【讨论】:

Range("B1").AutoFill Destination:=Range(Cells(1,2),Cells(lastRow,2)) 在调试时出错。 它给你什么错误? lastRow 是否正常工作,取决于您的最后一个单元格,它可能正在尝试获取 Excel 中的最后一行...

以上是关于自动填充目标创建更长的运行时间的主要内容,如果未能解决你的问题,请参考以下文章

GWT 和自动填充

如何创建脚本来自动填充字段?

动态添加的行无法运行自动填充 ajax 脚本

Excel VBA 自动填充目标

如何使用 VBA 动态自动填充目标?

自动填充运行时错误 1004 - 自动填充动态范围