Excel VBA:第二次分配给对象variables时运行时错误“91”

我只是学习Excel VBA的学校作业。 我已经根据某些条件为某个工作表中的某个单元格分配了一个“wtCell”对象。

错误:“对象variables或块variables未设置”

我在第二次分配“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") ' total population for ward type

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

尝试

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

并确保你设置了所有的范围。 不仅这一行。