根据数据部分的标题查找单元格,然后选择该部分的最后一行

时间:2017-05-23 16:48:08

标签: excel vba excel-vba

我试图根据单元格相对于单击的单元格的值来查找标题行的文本。我尝试这样做的方法如下:

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列中的最后一个连续数据),但是现在我的代码一直跳到我的底部片材。

1 个答案:

答案 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未找到的事实引起的,所以在这种情况下只需查找其他事项。