【发布时间】: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 行。这有影响吗?