Vba 运行时1004错误,代码每秒执行一次
我会尽量让我的查询保持简单,我不认为我的代码过于相关 我有一个sub可以更改工作表上的值,其中一些更改会更改工作表中的事件侦听器。所以这可能有点低效,但不会给我带来任何问题 问题是:每隔一次,当我运行我的第一个宏更改值时,我的工作表就会表现得很好。每次在此期间,我都会遇到1004运行时错误 当我遇到错误时,我结束代码执行。再次做同样的事情,它会起作用,失败,起作用,失败等等 我认为有一些VBA或Excel设置需要手动清除,以避免运行时错误。但我不知道会是什么。我还可以重新编写我的过程,以避免触发事件侦听器的单元格,但我真的很想了解发生了什么 编辑:好的,这是一些代码,我使用它按客户查找我的发票列表,并显示一个用户表单来选择要显示的发票:Vba 运行时1004错误,代码每秒执行一次,vba,excel,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
,调试器将在发生错误的行中停止。用这个来识别错误的线路,让我们知道它是哪一条!