2017-07-10 107 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. 保存文件