Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.find()触发运行时错误91,即使所有变量都设置为VBA,也可能是由于错误引用_Vba_Excel - Fatal编程技术网

.find()触发运行时错误91,即使所有变量都设置为VBA,也可能是由于错误引用

.find()触发运行时错误91,即使所有变量都设置为VBA,也可能是由于错误引用,vba,excel,Vba,Excel,我正在编写代码来创建模板。此代码根据同一wb中不同选项卡上的用户输入填充名为“fullDistribution”的选项卡。我在一个独立的模块(用于测试)中编写了一段工作代码,该模块远离我的主模块。代码正确运行,并且在分离时完全执行。当我将这段代码粘贴到主模块并运行它时,我开始在新粘贴的代码的开头接收“运行时错误91:对象变量或未设置块变量”。我没有对块使用任何变量,我的所有变量都已设置。当我将代码传输到主模块时,我没有对代码进行任何更改,我保留了我创建的新变量 这是我在单独模块中编写的代码选择:

我正在编写代码来创建模板。此代码根据同一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
工作表(“bls2016”)。激活
tcount=WorksheetFunction.CountA(工作表(“detailedEntity”).Range(“D2:D”和单元格(Rows.Count,“D”).End(xlUp).Row))
acount=WorksheetFunction.CountA(工作表(“detailedEntity”).Range(“K2:K7”))
Application.ScreenUpdating=False
作为整数的Dim h
作为整数的Dim f
变暗状态为范围
暗bl As范围
变暗状态作为范围
暗淡的黑暗如射程
Dim agje As系列
作为整数的Dim e
作为整数的Dim r
作为整数的Dim ii
设置blstate=工作表(“bls2016”).范围(“D2:D”和单元格(Rows.Count,“D”).结束(xlUp).Row)
设置状态=工作表(“详细数据”)。范围(“Q1”)
Set deat=工作表(“detailedEntity”).范围(“D2:D”和单元格(Rows.Count,“D”).结束(xlUp).Row)
设置agje=工作表(“详细数据”).范围(“L2:M”和单元格(Rows.Count,“M”).结束(xlUp).Row)
h=活动列
f=Activerow
r=2
x=120
对于e=1至(A账户*A账户)
blstate.Find(state).选择
对于ii=1到x
'ccnt=acst.Offset(0,1)
ccgv=ActiveCell.Offset(0,2)
acem=ActiveCell.Offset(0,5)
做正确的事
vl1=Application.IfNa(Application.VLookup(工作表(“完整分发”)。单元格(r,2),deat,1,False),0)
如果vl1=0,则
工作表(“完整分发”)。单元格(r,4)=0
其他:
vl2=Application.IfNa(Application.VLookup(工作表(“完整分发”)。单元格(r,1),agje,2,False),0)
如果ActiveCell.Offset(0,1).Value=“未知或未定义”,则
退出Do
其他:
如果vl2=ccgv,则
工作表(“完整分发”)。单元格(r,4)=acem
ElseIf vl2 ccgv然后
工作表(“fullDistribution”).Cells(r,4)=ActiveCell.Offset(x+1,5)
其他:
如果结束
如果结束
如果结束
退出Do
环
ActiveCell.Offset(f+1,h)。选择
r=r+1
下一个ii
下一个e
该错误在“blstate.find(state).select”行触发,该行告诉excel查找包含状态名称的动态范围,并选择要用作
Activecell
的状态的第一个实例。同样,当它在主模块之外运行时,它也可以工作

我相信这与参考区域有关。当这个单独运行并完成时,我必须激活一个特定的工作表才能正常运行。如果我的excel工作簿打开到其他选项卡,它将不会运行。我的主模块也只有在特定工作表/选项卡上运行时才能正确执行


如果需要,我可以编辑我的帖子并提供我的全部主代码。

这可能是因为没有完全参考表单的问题,例如将您的
blstate
行修改为

with Worksheets("bls2016")
 Set blstate = .Range("D2:D" & .Cells(.Rows.Count, "D").End(xlUp).Row)
end with

然后它可能会找到值而不是错误。你应该查看如何使用Find方法,因为你的方法注定会让你头疼。

这可能是因为没有完全参考图纸的问题,例如将你的
blstate
行修改为

with Worksheets("bls2016")
 Set blstate = .Range("D2:D" & .Cells(.Rows.Count, "D").End(xlUp).Row)
end with
然后它可能会找到值而不是错误。你应该看看如何使用Find方法,因为你的方法注定会让你头疼

您的代码假定
.Find
找到它要查找的内容。当
Find
没有找到它要查找的内容时,函数将返回
Nothing
,这本质上是一个空对象引用-并且如果没有运行时错误91,您无法对
Nothing
进行成员调用

把它分开:

Dim result As Range
Set result = blstate.Find(state)
If Not result Is Nothing Then
    result.Select 'questionable anyway, but that's another issue
Else
    MsgBox "Value '" & state & "' was not found in " & blstate.Address(External:=True) & "."
    Exit Sub
End If
至于为什么找不到你要找的东西


Find会调用上次调用中使用的所有设置(即使您使用GUI执行查找),因此请确保在通过VBA调用它时指定所需的设置。如果你不这样做,它可能不会像你期望的那样工作

您的代码假定
.Find
找到它要查找的内容。当
Find
没有找到它要查找的内容时,函数将返回
Nothing
,这本质上是一个空对象引用-并且如果没有运行时错误91,您无法对
Nothing
进行成员调用

把它分开:

Dim result As Range
Set result = blstate.Find(state)
If Not result Is Nothing Then
    result.Select 'questionable anyway, but that's another issue
Else
    MsgBox "Value '" & state & "' was not found in " & blstate.Address(External:=True) & "."
    Exit Sub
End If
至于为什么找不到你要找的东西


Find会调用上次调用中使用的所有设置(即使您使用GUI执行查找),因此请确保在通过VBA调用它时指定所需的设置。如果你不这样做,它可能不会像你期望的那样工作


我的问题很大程度上与不正确的引用有关,但是,我能够通过将我正在测试的特定代码段保留在一个单独的子代码中,并从我的主代码中调用它“完整分发”来解决这个问题

Call test

“test”是带有测试代码的子组件的名称。这是对解决方案的临时修复,如果有人在引用方面遇到困难,请尝试此方法。

我的问题与不正确的引用密切相关,但是,我能够通过将我正在测试的特定代码段保留在单独的子项中并调用