【发布时间】:2018-05-23 13:48:00
【问题描述】:
由于运行时错误“1004”:应用程序定义或对象定义错误,我正在努力使以下代码正常运行。
通常当我遇到此错误是由于工作表保护引起的,我已确保工作表不受保护,因此子开始处的行。
我将在这里花费场景和最终目标:
Sheet1 = 实时合同
此工作表包含一个 6 列和动态行数的表格。 第 1 列包含合同参考编号。第 2 - 6 列与此无关。
表 4 = 合同金额
此表包含所有合同、相应部门和合同价值。
目标
创建一个可以通过用户窗体按钮调用的模块。
模块需要查看 sheet1 的 A 列,并且对于每个单元格 - 如果有值 - 在 G 列中创建一个 vlookup 并使用以下参数。
Lookup Value = Cell.offset(0, -6)
Table array = Sheet4.range("A3:C676")
Col_Index_Num = 1
FALSE - Exact match
模块需要对范围内的所有单元格重复此过程。
现在是我制作的:
Worksheets("Live Contracts").Unprotect
Dim rng As range
Dim lastrow As Long
Dim cell As range
Dim contractrange As range
'Find dynamic range
lastrow = Worksheets("Live Contracts").range("A" & Rows.Count).End(xlUp).Row
Set contractrange = Worksheets("Contract Sums").range("A3:C676")
Set rng = Worksheets("Live Contracts").range("A2:A" & lastrow)
For Each cell In rng
'If cell does not equal blank then for each cell in column A, offset to column G.
If cell.Value <> "" Then
'In column G, vlookup column A cell value in contractrange's column C, only return exact match
cell.Offset(0, 6).Value = Application.VLookup(cell.Offset(0, -6), contractrange, 1, False)
'In column H, vlookup column A cell value in contractrange's column A, only return exact match
cell.Offset(0, 7).Value = Application.VLookup(cell.Offset(0, -7), contractrange, 3, False)
End If
'Repeat for all cells in range
Next cell
End Sub
以 cell.offset 开头的第一行在调试时被高亮显示
P.S 我对 VBA 比较陌生,为糟糕的代码道歉!
【问题讨论】:
-
在定义之前使用
lastrow,您不会也收到错误吗?我相信错误 1004 是因为你没有定义contractsum。 -
感谢您发现这一点,我已将 lastrow 移至 set rng 之前。我将编辑原帖
-
谢谢 Jarom,看来我今天犯了很多错误!我已经定义了contractrange,但是在公式中使用了contractsum这个词。我已将公式更改为正确定义的范围,但不幸的是仍然收到相同的错误。
-
哦,实际上主要问题可能是您在 A 列中,并且您试图通过使用
cell.offset(0,-6)向左移动您只能偏移到 A 列的右侧。 -
我想我发现了你为什么要在 vlookup 中使用偏移量。看看我的回答,让我知道这是否有意义。