我正在编写代码来创建模板。此代码在同一wb中的不同选项卡上填充来自用户输入的名为“fullDistribution”的选项卡。我有一个代码的工作部分,我在一个单独的模块中(用于测试)远离我的主模块。代码运行正常并在单独时完全执行。当我将这段代码粘贴到我的主模块并运行它时,我开始在新粘贴的代码的开头接收“运行时错误91:对象变量或未设置块变量”。我没有使用任何块,并且我的所有变量都已设置。当我将代码转移到主模块时,我的代码没有变化,我继承了我创建的新变量。
这是我在一个单独的模块中编写的代码选择:
Worksheets("bls2016").Activate
tcount = WorksheetFunction.CountA(Worksheets("detailedEntity").Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row))
acount = WorksheetFunction.CountA(Worksheets("detailedEntity").Range("K2:K7"))
Application.ScreenUpdating = False
Dim h As Integer
Dim f As Integer
Dim blstate As Range
Dim bl As Range
Dim state As Range
Dim deat As Range
Dim agje As Range
Dim e As Integer
Dim r As Integer
Dim ii As Integer
Set blstate = Worksheets("bls2016").Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row)
Set state = Worksheets("detailedEntity").Range("Q1")
Set deat = Worksheets("detailedEntity").Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row)
Set agje = Worksheets("detailedEntity").Range("L2:M" & Cells(Rows.Count, "M").End(xlUp).Row)
h = Activecolumn
f = Activerow
r = 2
x = 120
For e = 1 To (acount * acount)
blstate.Find(state).Select
For ii = 1 To x
'ccnt = acst.Offset(0, 1)
ccgv = ActiveCell.Offset(0, 2)
acem = ActiveCell.Offset(0, 5)
Do While True
vl1 = Application.IfNa(Application.VLookup(Worksheets("fullDistribution").Cells(r, 2), deat, 1, False), 0)
If vl1 = 0 Then
Worksheets("fullDistribution").Cells(r, 4) = 0
Else:
vl2 = Application.IfNa(Application.VLookup(Worksheets("fullDistribution").Cells(r, 1), agje, 2, False), 0)
If ActiveCell.Offset(0, 1).Value = "Unknown Or Undefined" Then
Exit Do
Else:
If vl2 = ccgv Then
Worksheets("fullDistribution").Cells(r, 4) = acem
ElseIf vl2 <> ccgv Then
Worksheets("fullDistribution").Cells(r, 4) = ActiveCell.Offset(x + 1, 5)
Else:
End If
End If
End If
Exit Do
Loop
ActiveCell.Offset(f + 1, h).Select
r = r + 1
Next ii
Next e
错误在“blstate.find(state).select”行触发,告诉excel查看包含状态名称的动态范围,并选择要用作{{1}的状态的第一个实例}。同样,当它在主模块之外运行时,它也可以工作。
我认为这与参考区域有关。当它单独运行并完成时,我必须激活一个特定的工作表才能正常运行。如果我的Excel工作簿对不同的选项卡打开,它将无法运行。如果在特定工作表/选项卡上运行,我的主模块也只能正确执行。
如果需要,我可以编辑我的帖子并提供我的整个主代码。
答案 0 :(得分:2)
可能存在未完全引用工作表的问题,例如将blstate
行修改为
with Worksheets("bls2016")
Set blstate = .Range("D2:D" & .Cells(.Rows.Count, "D").End(xlUp).Row)
end with
然后它可能会找到值而不是错误。您应该查找如何使用Find方法,因为您的方式注定会让您头疼。
答案 1 :(得分:0)
bool checkwin(string player) { for (int i = 0; i<10; i++) { for (int j = 0; j<10; j++) { if (grid[i][j] == player && grid[i + 1][j] == player && grid[i + 2][j] == player && grid[i + 3][j] == player) { return 1; } if (grid[i][j] == player && grid[i][j + 1] == player && grid[i][j + 2] == player && grid[i][j + 3] == player) { return 1; } if (grid[i][j] == player && grid[i + 1][j + 1] == player && grid[i + 2][j + 2] == player && grid[i + 3][j + 3] == player) { return 1; } if (grid[i][j] == player && grid[i - 1][j + 1] == player && grid[i - 2][j + 2] == player && grid[i - 3][j + 3] == player) { return 1; } } } }
您的代码假定blstate.Find(state).Select
找到了它正在寻找的内容。当.Find
找不到它要查找的内容时,该函数返回Find
,它本质上是一个 null对象引用 - 并且您无法在{{{{}上进行成员调用1}}没有得到运行时错误91。
拆分:
Nothing
至于为什么它没找到你要找的东西,Tim Williams already answered that:
查找调用上次调用中使用的所有设置(即使您使用GUI执行查找),因此请确保在通过VBA调用时指定所需的设置。如果你不这样做,它可能无法正常工作...... - Tim Williams 42 mins ago
答案 2 :(得分:0)
我的问题与错误的引用有很大关系,但是,我能够通过将我正在测试的特定代码段保存在一个单独的子代码中,并从我的主代码中调用它来解决这个问题,“#full; full分布&#39;
Call test
&#39;测试&#39;是带有测试代码的sub的名称。这是对解决方案的临时修复,如果有人在引用方面苦苦挣扎,请试试这个。