2014-02-17 118 views
0

我會盡量保持我的查詢簡單,我不認爲我的代碼過於相關。運行時1004錯誤,每秒執行一次代碼

我有一個改變工作表上的值的子,其中一些改變trip工作表改變事件監聽器。所以這可能有點低效,但不應該給我帶來任何問題。

這裏是擦:每隔一段時間我運行我的第一個宏 - 改變值 - 我的工作表行爲完美。每次我都遇到1004運行時錯誤。

當我遇到錯誤我結束代碼執行。再次做同樣的事情,它工作,失敗,工作,失敗等

我想有一些VBA或Excel設置,我需要手動清除,以避免運行時錯誤。但我不知道它可能是什麼。我也可以重寫我的程序以避免觸發事件監聽器的單元,但我真的很想知道發生了什麼。

編輯:確定這裏是一些代碼,我用這個由客戶找到我的發票的列表,並顯示一個窗體,選擇發票顯示:

Sub Look_for_invs() 
Dim cell, invDB As Range 
Dim srch_rng As Range 
Set invDB = Range("Invoice_DB") 

invDB.AdvancedFilter xlFilterCopy, Range("inv_lookup_crit"), Range("inv_lookup_result"), True 

Dim length As Integer 
On Error GoTo exerr 

length = Int(WorksheetFunction.CountA(Range("inv_lookup_result_list").Columns(1))) 
Range("inv_lookup_result_list").Cells(1, 1).Offset(length, 0).Value = "NEW" 

GoTo exok 
exerr: 
length = 1 
Range("inv_lookup_result").Cells(1, 1).Offset(length, 0).Value = "NEW" 
exok: 


Set srch_rng = Range("inv_lookup_result_list") 

With InvoiceSelection.InvListBox 
    .ColumnCount = 4 
    .ColumnHeads = True 
    .RowSource = "inv_lookup_result_list" 
End With 

Worksheets("Invoice Entry").Select 

InvoiceSelection.Show vbModeless 

End Sub 

下面是用戶窗體的代碼,這需要發票號碼並將這些值放入我的發票模板中,在我看來,我無法在用戶表單處於活動狀態時訪問Range對象的成員。我因爲發帖的問題,試圖看看是否能夠幫助殘疾人的活動,它沒有:

Private Sub InvListBox_Click() 
Dim invnum, invitems_cnt, invitem As Integer 
Dim accnum As String 
Dim inv_arrival, inv_depart As Date 
Dim invDB, cell, invoice_lines As Range 
Dim inv_ent_sht As Worksheet 

With Application 
    .Calculation = xlCalculationManual 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 

invnum = InvListBox.Value 
accnum = Range("invoice_ent_account") 
Set invDB = Range("Invoice_DB") 
Set invoice_lines = Range("invoice_lines") 
Set inv_ent_sht = Worksheets("Invoice Entry") 

clear_inv_sheet 


If invnum <> "NEW" Then 
    'set variables 
    inv_depart = WorksheetFunction.VLookup(invnum, invDB.Offset(0, 1), 5, False) 
    inv_arrival = WorksheetFunction.VLookup(invnum, invDB.Offset(0, 1), 4, False) 
    'transfer header-level invoice details to sheet 
    Range("inv_inv_num") = invnum 
    Range("inv_depart") = inv_depart 
    Range("inv_arrival") = inv_arrival 

    'find all items relating to invoice lines and move them to invoice lines area of statement 
    For Each cell In invDB.Columns(2).Cells 
     If cell.Value = invnum Then 
      invitem = Application.WorksheetFunction.CountA(invoice_lines.Columns(1)) + 1 
      invoice_lines.Cells(invitem, 1) = cell.Offset(0, 5) 
      invoice_lines.Cells(invitem, 2) = cell.Offset(0, 2) 
      invoice_lines.Cells(invitem, 5) = cell.Offset(0, 6) 
      invoice_lines.Cells(invitem, 6) = cell.Offset(0, 7) 
      invoice_lines.Cells(invitem, 7) = cell.Offset(0, 12) 
      invoice_lines.Cells(invitem, 8) = cell.Offset(0, 13) 
     End If 
    Next cell 


    'invitems_cnt = WorksheetFunction.CountIf(Range("invoice_DB").Columns(2), invnum) 

End If 
InvoiceSelection.Hide 
With Application 
    .Calculation = xlCalculationAutomatic 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 

End Sub 
+1

您的工作表事件代碼可能在不適當的時間運行。要獲得更好的幫助,您需要**發佈您的代碼。** –

+0

您的代碼是相關的。它會告訴你整個故事爲什麼你會遇到這樣的錯誤。我的猜測是,由於您構建代碼的方式,您會遇到運行時。運行時只有在你想讓excel訪問找不到的東西時纔會發生,或者經常發生。 – L42

+0

有兩個想法:1)'exok:'後面可能需要另一個'On Error ...'語句,否則下面發生的任何錯誤都會跳回來2)如果使用'On Error Goto 0',調試器將停止發生錯誤的行。用它來識別錯誤的行,讓我們知道它是哪一個! –

回答

0

,你可能需要重新安排的數據VLOOKUP(僅適用之前,如果數據是按字母/數字訂購)。

或者,您也許可以使用find函數或匹配項,這樣每次添加單元格時都不需要重新組織數據。

你也沒有告訴該行顯示錯誤(命中調試,而不是結束碼)。 更改錯誤轉到exerr,錯誤轉到0,所以你可以找到代碼missbehaves的位置。