【问题标题】:The program keeps executing for a long time程序长时间执行
【发布时间】:2017-07-10 22:21:15
【问题描述】:

我有三个工作表, sheet1 , sheet2 和 sheet3。

我正在尝试复制 sheet3 中的工作表 1、N 列和 F 列。

然后,使用这个 ID,我查看 A 列,看看它们是否匹配, 如果是这样,那么我将匹配的 ID 复制到 sheet3。

出于这个原因,我正在使用以下代码。

到目前为止,代码运行良好。但是我今天早上更新了我的 sheet2,由于某种原因,代码持续执行了很长时间,但我仍然无法获得输出,我无法找出原因。

我尝试调试并突出显示下面的行。

如果不是 rng 什么都不是,那么

此外,我正在使用工作表中的一个按钮并调用类似的函数

调用这个workbook.lookup

类似地,我有 6 个其他功能,附加到此按钮。

这是完整的代码。有人可以帮我弄清楚这是什么原因。

Sub lookup()
Dim totalrows As Long
Dim Totalcolumns As Long
Dim rng As Range
Dim rng1 As Range
Dim rng2 As Range
Dim i As Long
'Copy lookup values from sheet1 to sheet3
Sheets("S1").Select
totalrows = ActiveSheet.UsedRange.Rows.Count
Totalcolumns = ActiveSheet.UsedRange.Columns.Count
'TotalRows = 441
'Totalcolumns = 392
Range("N5:N" & totalrows).Copy Destination:=Sheets("s3").Range("E5")
Range("F5:F" & totalrows).Copy Destination:=Sheets("s3").Range("H5")
'Go to the destination sheet
Sheets("s3").Select
For i = 5 To totalrows
'Search for the value on sheet2
Set rng = Sheets("s2").UsedRange.Find(Cells(i, 5).Value)
'If it is found put its value on the destination sheet
If Not rng Is Nothing Then
Cells(i, 6).Value = rng.Value
Cells(i, 1).Value = rng.Offset(0, 1).Value
Cells(i, 2).Value = rng.Offset(0, 2).Value
Cells(i, 3).Value = rng.Offset(0, 3).Value
Cells(i, 4).Value = rng.Offset(0, 9).Value
Cells(i, 9).Value = rng.Offset(0, 10).Value
Cells(i, 12).Value = rng.Offset(0, 6).Value
Cells(i, 13).Value = rng.Offset(0, 5).Value
Cells(i, 14).Value = rng.Offset(0, 8).Value
End If
Next
End Sub

【问题讨论】:

  • 一些建议:在您选择各种工作表名称的“工作表”之前添加“Thisworkbook”作为限定符。这将确保它不会尝试使用 ActiveWorkbook(它不应该......)工作表是否有很多公式?您可以尝试:Application.Calculation = xlManual 开头,Application.Calculation = xlAutomatic 结尾。您也可以在开头尝试“application.screenupdating = false”,最后尝试“application.screenupdating=true”。这些东西加速了非常大的电子表格上的 vba 例程,这些电子表格需要大量时间来计算。
  • @ainwood ya,有什么建议?
  • 看起来你可以用几个 VLOOKUP 公式替换 VBA,你考虑过吗?
  • @jkpieterse 是的,我知道,但我想在 VBA 中使用它们。
  • @ainwood 我尝试了你建议我的方式,问题是由于某种原因,我无法退出 if 循环。另外,顺便说一句,我在 sht1 中有 118 行,而 sht2 有 950 行。这有影响吗?

标签: vba excel


【解决方案1】:

问题是由于工作表 S1 的 UserdRange 超出其真实大小而引起的。 问题解决者:

  1. 在电子表格 S1 中查找包含数据的最后一行。
  2. 选择该行下方的单元格。
  3. 按键盘上的 control+shift+End。
  4. 右键单击该范围并选择删除。
  5. 选择删除整行。
  6. 保存文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多