したがって、私はまだVBAで非常に初心者であることを前に説明します。私はこのコードを私ができることと誇りに思った最高のものにタイプしました。私はいくつかの追加機能を追加することにしました。私が望んだ最後の機能は、エラーがあったときに特定の情報をキャプチャして、メッセージボックスに表示することでした。Excel VBAエラー処理がそのジョブを実行していない
コードは何:
私は2つのワークブックを持っています。 Wkbook1は多数のデータ要素で満たされ、Wkbook2はマスターリストである。コードはwkbook1の最初の行を検索し、Wkbook2でそのフレーズを検索してから、その左に頭文字を付けます。時々、繰り返しの要素があり、私の "DO LOOP"がそれを処理します。私の問題は、すべての要素がマスタリストに存在するわけではなく、どの要素がマスタリストにないのかを知る必要があるということです。
マスタリストの要素を見つけることができなかったためにエラーメッセージが表示された場合、エラーハンドラに移動してメッセージの変数にelmentを格納して、後でメッセージに使用できるようにしましたボックス。
他のデータ要素ワークブックでテストしましたが、0または1の要素が見つからない場合は動作しますが、マスターリストに1つ以上のelemetsが見つからない場合は、実行時エラー91 2番目の要素が見つかりません。私のコードには多くの批判があると確信していますので、簡単に私に教えてください。これは初めての配列使用です。
コード:
Option Explicit
Sub M2_Name_Finder()
Dim x As String
Dim y As Integer
Dim z As Integer
Dim c As Integer
Dim m As Integer
Dim name As String
Dim rngCopy As Range
Dim numRows As Long
Dim rAddress As String
Dim found(50) As String
Dim previous As String
Dim missingFields As String
Dim message As String
name = "JJP"
Windows("Wbook1").Activate
Range("D3").Select
Set rngCopy = ActiveCell.CurrentRegion
numRows = rngCopy.Rows.Count
For z = 1 To numRows
Windows("Wkbook1").Activate
Range("D3").Select
ActiveCell.Offset(y, 0).Select
x = ActiveCell.Value
If x = vbNullString Or x = " " Then
GoTo Done
End If
If x = previous Then
GoTo Here
End If
previous = ActiveCell.Value
Windows("Wkbook2").Activate
Columns("D:D").Select
On Error GoTo Missing:
Selection.Find(what:=x, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate
found(c) = ActiveCell.Address
rAddress = ActiveCell.Address
If ActiveCell.Value <> Empty Or ActiveCell.Value <> 0 Then
Do
ActiveCell.Select
ActiveCell.Offset(0, -3).Value = name
c = c + 1
Cells.FindNext(After:=ActiveCell).Activate
found(c) = ActiveCell.Address
Loop While found(c) <> rAddress
End If
Here:
c = 0
y = y + 1
Next z
Missing:
message = message & x
m = m + 1
GoTo Here:
Done: MsgBox "Not found: " & message & vbLf, vbInformation
End Sub
これは素晴らしい話ですが、あなたの質問は何ですか? – JohnFx
Ha。そうです、私はもう少し明確になったはずです。私の質問は、エラーをどのように処理するのですか? 1つ以上のデータ要素がない場合は機能しません。マスターリストにないデータ要素をキャプチャする必要があり、プログラムが完了した後にメッセージボックスに表示する必要があります。これは、データ要素が1つしか見つからない場合にこれを行います。なぜ1つ以上のエラーが発生するのかわからない...ヘルプ? – Leon
チップピアソンは、VBAでのエラー処理に関する素晴らしい記事をhttp://www.cpearson.com/Excel/ErrorHandling.htm – Jesse