2017-07-10 66 views
0

我有三张工作表,工作表1,工作表2和工作表3。该程序长时间执行

我试图复制工作表1中的第N列和第F列。

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

我正在使用下面的代码,为此。

代码工作正常,直到现在。但我今天早上更新了sheet2,由于某种原因,代码长时间执行并仍然无法获得输出,我无法找出原因。

我试图调试,并且下面的行突出显示。

如果不RNG是Nothing然后

另外,我使用工作表中的一个按钮,呼叫功能,如

呼叫thisworkbook.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 
+0

一对夫妇的建议:增加“的ThisWorkbook”作为领先的,你选择不同的工作表名称“表”限定词。这将确保它不尝试使用ActriveWorkbook(它不应该......)工作表是否有很多公式?你可以尝试:'Application.Calculation = xlManual'开头,'Application.Calculation = xlAutomatic'结束。您也可以在开始时尝试'application.screenupdating = false',最后使用'application.screenupdating = true'。这些东西加速了大型电子表格上的vba例程,需要大量的时间进行计算。 – ainwood

+0

@ainwood ya,有什么建议? – Mikz

+0

看起来你可以用几个VLOOKUP公式代替VBA,你有没有考虑过? – jkpieterse

回答

0

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

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