2

下面的代码有什么问题?我正在尝试vlookup使用另一个工作簿中的封闭数据。如果我运行此代码,则需要很长时间才能执行。最后它挂起......但它最终会产生正确的结果:

Sub testing()
  Range("G1").EntireColumn.Insert
  With Range("G2")
    .Formula = "=VLOOKUP(F2,'C:\Users\sathisk\Desktop\Macros\ReferencePath\[HUL_Assets_18th April 2012.xls]HUL_Assets_18th April 2012.xls'!A$1:J$65536,10,0)"
    .Copy
    .Offset(0, -1).Select
  End With

  Selection.End(xlDown).Offset(0, 1).Select

  With ActiveCell
    .PasteSpecial xlPasteFormulas
    .Copy
    .Select
  End With

  Range(ActiveCell, Selection.End(xlUp)).PasteSpecial xlPasteFormulas

End Sub
4

2 回答 2

2

这是你想要做的吗?

Option Explicit

Sub testing()
    Dim LastRow As Long

    Application.Calculation = xlCalculationManual

    Range("G1").EntireColumn.Insert

    LastRow = Range("F" & Rows.Count).End(xlUp).Row

    With Range("G2:G" & LastRow)
        .Formula = "=VLOOKUP(F2,'C:\Users\sathisk\Desktop\Macros\ReferencePath\[HUL_Assets_18th April 2012.xls]HUL_Assets_18th April 2012.xls'!A$1:J$65536,10,0)"
    End With

    Application.Calculation = xlCalculationAutomatic
End Sub

编辑

我还建议您更改J$65536为该表中实际的最后一行。例如,如果该表中的数据直到第 1000 行,则将其更改为J$1000

于 2012-04-19T10:29:49.407 回答
1

除了 Siddharth 的推荐,我还要补充

Application.ScreenUpdating = False '关闭屏幕更新以加快进程。在宏的顶部以及 Application.Calculation = xlCalculationManual

然后添加 Application.ScreenUpdating = True '打开屏幕更新。在底部连同 Application.Calculation = xlCalculationAutomatic

我使用这两种方法来释放 CPU 以仅运行宏,在宏完成之前不进行屏幕更新或计算。

于 2012-05-18T21:12:39.903 回答