2016-01-08 66 views
0

我從文件讀取數據並檢查記錄是否已經在工作表中。Excel在IF語句中掛起

Excel在處理大約60k條記錄後凍結。如果我開始從宏停止的位置讀取文件,它會在讀取另一條60k記錄後再次凍結。

Sub aktualizacja() 
    Dim koniec As Long, dlugosc As Long, pozycja As Long, numer As Long, numer2 As Long, i As Long 
    Open "C:\bazy\test.dat" For Binary Access Read As #1 
    dlugosc = FileLen("C:\bazy\test.dat") 
    pozycja = 41 
    Do 
     koniec = Worksheets("Baza").Range("A1048576").End(xlUp).Row 
     Get #1, pozycja, numer 
     Get #1, pozycja + 4, numer2 
     For i = 2 To koniec 
      If Worksheets("Baza").Cells(i, 1) = numer Then 
       'If Worksheets("Baza").Cells(i, 2) <> numer2 Then 
       ' Worksheets("Baza").Cells(i, 2) = numer2 
       'End If 
       'Cells(1, 11) = i 
       'Exit For 
      End If 
     Next i 
     If i > koniec Then 
      Worksheets("Baza").Cells(koniec + 1, 1) = numer 
      Worksheets("Baza").Cells(koniec + 1, 2) = numer2 
     End If 
     pozycja = pozycja + 40 
    Loop Until (pozycja > dlugosc) 
    Close #1 
End Sub 

當我把所有的命令放在IF語句中時,宏仍然凍結。

+0

它凍結在哪條線上? –

+0

在行11.當我刪除以下語句:「如果工作表(」Baza「)。單元格(i,1)=數字然後」,宏按預期運行... – Stripe

+0

是否有任何計算運行的單元格填充? –

回答

0

如何在循環添加類似

If i Mod 1000 = 0 Then DoEvents 

防止鎖定?

+0

這個技巧!謝謝! :) – Stripe

+0

沒問題!通過將控制傳遞給操作系統,每循環1000次(根據自己的喜好進行調整),它將允許處理其他操作並使其停止凍結。 – Pure