vba - Excel VBA : Run-time error '91' on second assignment to Object variable

标签 vba excel runtime-error

我正在为学校作业学习 Excel VBA。我根据某些条件将对象“wtCell”指定为某个工作表中的某个单元格。

错误:“未设置对象变量或 With block 变量”

我在“wtCell”的第二次分配中遇到错误

Sub AddWardData()

   Dim Cell As Object
   Dim Ward As Object

    Dim lngLastRow As Long ' We need to know how many rows of data are in Column J
    lngLastRow = 0
    lngLastRow = Range("K" & Rows.Count).End(xlUp).Row ' Complex formula - just ignore the details for now
    Dim w As Integer ' ward number
    w = 0
    Dim wtCell As Object

    For Each Cell In Worksheets("Data").Range("K2:K" & lngLastRow).Cells ' Iterate thru the cells collection in Row K = a copy
        w = Val(Mid(Cell.Value, 6, 2))
        If (w = 0) Then
            Cell.Offset(0, 3).Value = ""
            Cell.Offset(0, 4).Value = ""
            Cell.Offset(0, 5).Value = ""
            GoTo no_ward
        End If
        For Each Ward In Worksheets("WardData").Range("B4:B46").Cells
            If (Ward.Value = w) Then
                Cell.Offset(0, 3).Value = Ward.Offset(0, 4) ' 2015 ward population
                Cell.Offset(0, 4).Value = Ward.Offset(0, 6) ' ward area
                Cell.Offset(0, 5).Value = Ward.Offset(0, 10) ' 2015 ward pop density
                GoTo ward_data_retrieved
            End If
ward_data_retrieved:
        Next
no_ward:
        If (Application.CountIf(Worksheets("WardData").Range("B5:B16").Cells, w)) Then
            Cell.Offset(0, 6).Value = "Urban"
            Cell.Offset(0, 7).Value = "Urban"
            wtCell = Worksheets("WardData").Range("F18") ' total population for ward type
            Cell.Offset(0, 8).Value = wtCell.Value
            Cell.Offset(0, 9).Value = wtCell.Offset(0, 2).Value ' total area for ward type
            Cell.Offset(0, 10).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            Cell.Offset(0, 11).Value = wtCell.Value
            Cell.Offset(0, 12).Value = wtCell.Offset(0, 2).Value ' total area for ward type
            Cell.Offset(0, 13).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
        ElseIf (Application.CountIf(Worksheets("WardData").Range("B21:B36").Cells, w)) Then
            Cell.Offset(0, 6).Value = "Suburban"
            wtCell = Worksheets("WardData").Range("F39") ' total population for ward type
            Cell.Offset(0, 8).Value = wtCell.Value
            Cell.Offset(0, 9).Value = wtCell.Offset(0, 2).Value ' total area for ward type
            Cell.Offset(0, 10).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            If (Application.CountIf(Worksheets("WardData").Range("B22:B23").Cells, w)) Then
                Cell.Offset(0, 7).Value = "OESA"
                wtCell = Worksheets("WardData").Range("F24") ' total population for ward type
                Cell.Offset(0, 11).Value = wtCell.Value
                Cell.Offset(0, 12).Value = wtCell.Offset(0, 2).Value ' total area for ward type
                Cell.Offset(0, 13).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            ElseIf (Application.CountIf(Worksheets("WardData").Range("B28:B29").Cells, w)) Then
                Cell.Offset(0, 7).Value = "RRSA"
                wtCell = Worksheets("WardData").Range("F30") ' total population for ward type
                Cell.Offset(0, 11).Value = wtCell.Value
                Cell.Offset(0, 12).Value = wtCell.Offset(0, 2).Value ' total area for ward type
                Cell.Offset(0, 13).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            ElseIf (Application.CountIf(Worksheets("WardData").Range("B34:B36").Cells, w)) Then
                Cell.Offset(0, 7).Value = "KSSA"
                wtCell = Worksheets("WardData").Range("F37") ' total population for ward type
                Cell.Offset(0, 11).Value = wtCell.Value
                Cell.Offset(0, 12).Value = wtCell.Offset(0, 2).Value ' total area for ward type
                Cell.Offset(0, 13).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            End If
        ElseIf (Application.CountIf(Worksheets("WardData").Range("B41:B46").Cells, w)) Then
            wtCell = Worksheets("WardData").Range("F46") ' total population for ward type
            Cell.Offset(0, 8).Value = wtCell.Value
            Cell.Offset(0, 9).Value = wtCell.Offset(0, 2).Value ' total area for ward type
            Cell.Offset(0, 10).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            Cell.Offset(0, 11).Value = wtCell.Value
            Cell.Offset(0, 12).Value = wtCell.Offset(0, 2).Value ' total area for ward type
            Cell.Offset(0, 13).Value = wtCell.Offset(0, 6).Value ' avg density for ward type
            Cell.Offset(0, 6).Value = "Rural"
            Cell.Offset(0, 7).Value = "Rural"
        End If
    Next

End Sub

我不知道如何在代码中获得粗体行,但就是这一行:

wtCell = Worksheets("WardData").Range("F39") ' 病房类型的总人口

被调试器突出显示(在第一个 ElseIf 下)。我真的很感激任何帮助。

最佳答案

尝试使用

set wtCell = Worksheets("WardData").Range("F39")

并确保将所有范围设置为某个值。不仅仅是这一行。

关于vba - Excel VBA : Run-time error '91' on second assignment to Object variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40749393/

相关文章:

Excel清理代码VBA

vba - Excel OLE 对象嵌入路径位置

opencv - 分割失败(核心转储)与OpenCV一起使用

python-3.x - 带有步进电机代码的运行时警告

ms-access - 提供起始位置时 InStrRev 的行为不稳定

vba - Excel用户定义的函数返回所有工作表中相同范围的平均值,但此工作表除外

sql-server - VBA 可以通过 SSL 证书连接到 SQL 服务器吗?

android - TID 21198(Crashlytics Exc)中的致命信号11(SIGSEGV),代码2,故障加法器0x7fa4c3813c

excel - 如何为单元格分配变量值以避免 VBA 运行时错误 5?

html - VBA获取在线货币