Vba 运行时1004错误,代码每秒执行一次

Vba 运行时1004错误,代码每秒执行一次,vba,excel,Vba,Excel,我会尽量让我的查询保持简单,我不认为我的代码过于相关 我有一个sub可以更改工作表上的值,其中一些更改会更改工作表中的事件侦听器。所以这可能有点低效,但不会给我带来任何问题 问题是:每隔一次,当我运行我的第一个宏更改值时,我的工作表就会表现得很好。每次在此期间,我都会遇到1004运行时错误 当我遇到错误时,我结束代码执行。再次做同样的事情,它会起作用,失败,起作用,失败等等 我认为有一些VBA或Excel设置需要手动清除,以避免运行时错误。但我不知道会是什么。我还可以重新编写我的过程,以避免触发

我会尽量让我的查询保持简单,我不认为我的代码过于相关

我有一个sub可以更改工作表上的值,其中一些更改会更改工作表中的事件侦听器。所以这可能有点低效,但不会给我带来任何问题

问题是:每隔一次,当我运行我的第一个宏更改值时,我的工作表就会表现得很好。每次在此期间,我都会遇到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
这是userform的代码,它获取发票号并将值放入我的发票模板中,在我看来,在userform处于活动状态时,我似乎无法访问范围对象的成员。我在发布问题后禁用了事件,试图看看这是否有帮助,但没有:

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
Private Sub InvListBox\u Click()
Dim invnum,invitems\u cnt,invitem为整数
Dim accnum作为字符串
Dim inv_到达,inv_离开日期
Dim invDB、单元格、发票行作为范围
Dim inv sht作为工作表
应用
.Calculation=xlCalculationManual
.EnableEvents=False
.ScreenUpdate=False
以
invnum=InvListBox.Value
accnum=范围(“发票\科目”)
设置invDB=范围(“发票\数据库”)
设置发票行=范围(“发票行”)
设置发票输入=工作表(“发票输入”)
清除库存单
如果invnum为“新”,则
'设置变量
inv_depart=WorksheetFunction.VLookup(invnum,invDB.Offset(0,1),5,False)
inv_arrival=WorksheetFunction.VLookup(invnum,invDB.Offset(0,1),4,False)
'将标题级发票明细转移到工作表
范围(“库存库存数量”)=库存数量
范围(“库存出发”)=库存出发
范围(“库存到货”)=库存到货
'查找与发票行相关的所有项目,并将其移动到对账单的发票行区域
对于invDB.列(2).单元格中的每个单元格
如果cell.Value=invnum,则
invitem=Application.WorksheetFunction.CountA(发票行.列(1))+1
发票行单元格(invitem,1)=单元格偏移量(0,5)
发票行单元格(invitem,2)=单元格偏移量(0,2)
发票行单元格(invitem,5)=单元格偏移量(0,6)
发票行单元格(invitem,6)=单元格偏移量(0,7)
发票行单元格(invitem,7)=单元格偏移量(0,12)
发票行单元格(invitem,8)=单元格偏移量(0,13)
如果结束
下一个细胞
'invitems_cnt=WorksheetFunction.CountIf(范围(“发票数据库”)。第(2)列,invnum)
如果结束
InvoiceSelection.Hide
应用
.Calculation=xlcalculation自动
.EnableEvents=True
.ScreenUpdate=True
以
端接头

您可能需要在vlookup之前重新排列数据(仅当数据按字母/数字顺序排列时有效)

或者,您可以使用find函数或match函数,它不需要在每次添加单元格时重新组织数据

您也没有告诉我哪行显示了错误(点击debug而不是end code)。
将on error goto EXER更改为on error goto 0,以便您可以找到代码的错误行为。

您的工作表事件代码可能在不适当的时间运行。为了获得更好的帮助,您需要发布您的代码。您的代码是相关的。它会告诉你为什么会遇到这样的错误。我的猜测是,您遇到运行时是因为您构建代码的方式。运行时仅在您希望excel访问它找不到的内容或最常见的情况下发生。两种想法:1)您可能需要在
exok:
之后使用另一个
错误…
语句,否则下面发生的任何错误都将跳回2)如果使用
错误转到0
,调试器将在发生错误的行中停止。用这个来识别错误的线路,让我们知道它是哪一条!