2017-05-23 7 views
1

クリックされたセルを基準にしたセルの値に基づいてヘッダー行のテキストを検索しようとしています。私はこれを行うことを試みてきた方法は、次のされていますデータセクションのヘッダーに基づいてセルを検索し、そのセクションの最後の行を選択します。

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は(「設定されていない変数またはWithブロック変数がオブジェクト」)ファイル名を指定して実行時エラー91を投げています。その後、そのコードセクションの最後の行が強調表示されます。前の行でその変数を設定しているので、なぜこのエラーを受け取っているのか、これについて正しい方法で行っているのか分かりません。

すべての入力をいただければ幸いです!

EDIT:より広い範囲で検索して上記の問題を解決しました。セルは、私がマージされた選択したかったが、私はまだ値が列A内に格納されたと仮定しかし、このコードはまだかなりに私はそれが欲しいものをやっていません:私は最後の行を選択したい

セクション(シート内のデータの最後の行ではなく、最後のB列のデータ)が表示されますが、今ではコードがシートの一番下まで飛んでいます。

+0

これはすべてコードですか?関連するコードの残りの部分(つまり、宣言など)を投稿してください。これはworksheet_changeイベントですか?なぜあなたは ''セルを選択しようとしていますか? ( '.Select' /' .Activate'の使用を避けるのが最善です。)(https://stackoverflow.com/questions/10714251/)あなたの範囲には 'var2'はないでしょうか? – BruceWayne

+0

他にも多数のIf文がありますが、この問題に関係のないIf文を除いた部分全体で上記のコードブロックを更新しました。この場合のvar2は "Mobile"を返し、ヘッダ行は次の式を持ちます(= CONCAT(H15、 "Form"))。ここで、H15は "Mobile"を含むセルです。したがって、私の.Find関数は式内で検索しています。 – Mknerr

+0

どの行からエラーがスローされますか?あなたはいくつかの行をコメントアウトしました。 – BruceWayne

答えて

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が見つからないという事実によって引き起こされているので、その場合は他のことをしてください。

関連する問題