我试图根据单元格相对于单击的单元格的值来查找标题行的文本。我尝试这样做的方法如下:
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(&#34;对象变量或With block变量未设置&#34;)。然后它突出显示该部分代码中的最后一行。由于我在上一行中设置了该变量,因此我不确定为什么我会收到此错误,或者我是否以正确的方式进行此操作。
非常感谢任何输入!
编辑:我通过搜索更广泛的范围清除了上述问题。我想要选择的单元格是合并的,但我仍然认为该值存储在A列中。但是这段代码仍然没有完全符合我的要求:我想选择该部分的最后一行(不是表格中的最后一行数据,而是B列中的最后一个连续数据),但是现在我的代码一直跳到我的底部片材。
答案 0 :(得分:0)
问题是您的.Find
没有找到该值。在这种情况下,您可以添加一些代码来处理它。
...
Dim Header As Range
Set Header = Range("A59:A159").Find(var2, LookIn:=xlFormulas)
If Header Is Nothing Then
' There's no value found, so do something...
msgbox(var2 & " was not found in the range, will exit sub now."
Exit Sub
End If
MsgBox Header
...
...当然,你可以做很多方法/事情来处理这个问题。如果您仍想执行其他代码,请将所有内容包装在If Header is Nothing Then // 'do something // Else // 'other code // End IF
类型的内容中。
这实际上取决于你想做什么。同样,您的错误是由var2
未找到的事实引起的,所以在这种情况下只需查找其他事项。