【发布时间】:2018-06-30 02:22:33
【问题描述】:
我对 VBA 完全陌生,所以请多多包涵。
我正在尝试编写一个子程序,该程序将遍历某一列中的每一行并与另一张工作表的标准进行比较。例如,如果它包含“x”,则将返回该值。但是,当我尝试运行代码时,代码会永远运行并导致计算机挂起。
这是我到目前为止编写的代码。它一直提示错误:未设置对象变量和块变量。 PS:我在使用'Application.WorksheetFunction.Index'时出现错误,在阅读其他线程时,建议删除'WorksheetFunction'。我不确定这是否会导致问题,我还想澄清删除“WorksheetFunction”字样的原因
非常感谢您!
Sub sub_inputData()
Dim ws As Worksheet: Set ws = ActiveSheet
Dim lastrow as range
lastrow = ws.Cells (ws.Rows.Count, 17).End (xlUp).row
Dim rng As Range
Set rng = ws.Range("Q4:Q" & lastrow)
Dim rngCell As Range
On Error Resume Next
For Each rngCell In rng
If rngCell.Offset(0, -13) = "x" Then
rngCell = Application.Index(Sheets("Data").Range _
("D805:D813"), Application.Match(rngCell.Offset(0, -15), Sheets("Data").Range _
("D805:D813"), 1))
ElseIf rngCell.Offset(0, -13) = "y" Then
rngCell = Application.Index(Sheets("Data").Range _
("D27:D34"), Application.Match(rngCell.Offset(0, -15), Sheets("Data").Range _
("D27:D34"), 1))
ElseIf rngCell.Offset(0, -13) = "z" Then
rngCell = Application.Index(Sheets("Data").Range _
("D718:D726"), Application.Match(rngCell.Offset(0, -15), Sheets("Data").Range _
("D718:D726"), 1))
Else: rngCell = vbNullString
End If
Next rngCell
Call sub_code2
Call sub_code3
Set rngCell = Nothing
Set rng = Nothing
End Sub
【问题讨论】:
-
如果在弹出错误信息的时候点击“Debug”,你的代码的哪一行是高亮的?
-
这一行:lastrow = ws.Cells (ws.Rows.Count, 17).End (xlUp).row
-
Q列有多少行数据?
-
我现在有 1748 行,但列表会不断增加
-
您不需要使用 VBA 来执行此操作...您应该能够使用 CHOOSE 功能。我很快就会发布一个例子。