【发布时间】:2017-05-24 02:22:42
【问题描述】:
我正在尝试根据单元格相对于单击的单元格的值来查找标题行的文本。我尝试执行此操作的方式如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim var1 As Variant
Dim var2 As Variant
Dim var3 As Variant
Dim FormName As String
FormName = "New Form"
Static NewFormCell As Range
Application.ScreenUpdating = False
If Not Intersect(Target, Range("G16:X80")) Is Nothing Then
If Target.Cells.Count = 1 Then
var1 = Cells(Target.Row, 2).Value
var2 = Cells(15, Target.Column).Value
If Not (IsEmpty(var1)) And Not (IsEmpty(var2)) And var2 <> "+" And Target.Interior.ColorIndex <> 2 And Target.Borders(xlEdgeLeft).LineStyle <> xlNone Then
If IsEmpty(Target) Then
Target.Value = "X"
Target.HorizontalAlignment = xlCenter
Target.VerticalAlignment = xlCenter
Target.Font.Bold = True
Dim Header As Range
Set Header = Range("A54:E160").Find(var2, LookIn:=xlValues)
Header.Offset(1, 1).End(xlDown).EntireRow.Select
Dim CopyCell As Range
'Header.End(xlDown).EntireRow.Insert
'Set CopyCell = Header.End(xlDown). [offset?]
'CopyCell.Value = var1
Else
Target.ClearContents
End If
Else
Exit Sub
End If
End If
End If
Application.ScreenUpdating = True
End Sub
问题是 VBA 抛出运行时错误 91(“对象变量或未设置块变量”)。然后它突出显示该部分代码中的最后一行。由于我在上一行中设置了该变量,因此我不确定为什么会收到此错误,或者我是否以正确的方式进行此操作。
任何意见将不胜感激!
编辑:我通过更广泛的搜索清除了上述问题。我要选择的单元格已合并,但我仍然假设该值存储在 A 列中。但是这段代码仍然没有完全按照我的意愿进行:
我想选择该部分的最后一行(不是工作表中的最后一行数据,而是 B 列中的最后一个连续数据),但现在我的代码一直跳到底部表。
【问题讨论】:
-
这就是全部代码吗?您能否发布其余的相关代码(即任何声明等)。这是 worksheet_change 事件吗?你为什么要
.Select一个单元格? (最好avoid using.Select/.Activate)你的范围内可能没有var2? -
sub 中还有许多其他 If 语句,但我已将上面的代码块更新为整个 sub 减去与此问题无关的 If 语句。在这种情况下,var2 返回“Mobile”,我的标题行具有以下公式 (=CONCAT(H15," Form")),其中 H15 是包含“Mobile”的单元格。因此,当我的 .Find 函数在公式中搜索时。
-
哪一行会报错?您注释掉了一些行。
-
在我设置了调用该变量的 Header 变量之后的任何一行。我尝试了一个简单的 MsgBox Header,也抛出了错误。
-
您确定
var2在您指定的范围内吗?在Set Headerline 之后,添加Msgbox(h is Nothing)并查看是否显示TRUE或FALSE。