私がまとめたコードを変更しようとしていて、それを変換するのが少し難しいです。以前のコードでは、フォルダ内のファイルを調べ、そのファイルから名前を取り出し、それを使って正しいファイルであるかどうかを判断しました。私は現在、名前がファイル名ではなくセルにあるマスターリスト(1つのファイル)を実行しようとしています。マスターリストの検索一致の場合
最初のuserformはfirst
とlast
の名前を要求し、ボタンはsearch
と表示されます。
Private Sub search_Click() ' In userform1
' Declare and set variables
Dim fname As String, lname As String
Dim Path As String, fCell As Range, fAdd As String
Path = "C:\Master List.xlsx"
fname = userform1.firstname_Search.Text
lname = userform1.lastname_Search.Text
' Store the name searched for
With Worksheets("Sheet1")
.Range("A1") = fname
.Range("A2") = lname
End With
Workbooks.Open (Path)
' Ensure the name searched for exists in the master list
With Workbooks("Master List").Worksheets("Master List").Range("A:A")
Set fCell = .Find(fname)
If Not fCell Is Nothing And fCell = fname Then
' Column A is first name, B is middle initial, C is last name, D is suffix, F is date of birth
If fCell.Offset(0, 2) = lname Then
userform2.firstname_Text.Text = fCell
userform2.middlename_Text.Text = fCell.Offset(0, 1)
userform2.lastname_Text.Text = Trim(fCell.Offset(0, 2) & " " & fCell.Offset(0, 3))
userform2.dob_Text.Text = fCell.Offset(0, 5)
Unload Me
userform2.Show vbModeless
userform3.Label1.Caption = "Now that we have the information from " & fCell & "'s file, what would you like to do?"
Else
MsgBox ("I could not find a client by that name.")
Workbooks("Master List").Close False
End If
Else
MsgBox ("I could not find a client by that name.")
Workbooks("Master List").Close False
End If
End With
End Sub
このセクションでは、正常に動作して表示され、入力された姓と名が一致する最初のエントリをプルアップします。この問題は、適切な人物がプルアップされているかどうかを判断するための関連情報を表示するため、2番目のユーザーフォームuserform2
がプルアップされたときに発生しています。 first
,middle
,last
の名前とdate of birth
とYes
とNo
ボタンを表示します。 No
をクリックするうちに、No
をクリックすると、No
をクリックすると、2番目のNo
は、次のように循環する必要があります(たとえば、3つのウィリアムジャクソンが表示されている場合は、をクリックする必要があります)。その名前の他のエントリが存在しないため、MsgBoxを提示する必要があります)。
問題は、最初の最後のサイクルを見つける方法が見つからないということです。No
; No
が2回目にクリックされた場合、見つかった2番目のエントリを通過しません。私はこれが最初にSet fCell = .Find(fname)
とSet fCell = .FindNext(fCell)
のためであることを知っていますが、が何度もクリックされたセルを作ることの不足は、これを行う良い方法がありますか?
Private Sub no_Click() ' In userform2
' Declare and set variables
Dim fname As String, lname As String
Dim Path As String, fCell As Range, fAdd As String
Path = "C:\Master List.xlsx"
With Workbooks("FirstWorkbook").Worksheets("Sheet1")
fname = .Range("A1")
lname = .Range("A2")
End With
' Ensure a client exists
With Workbooks("Master List").Worksheets("Master List").Range("A:A")
Set fCell = .Find(fname)
Set fCell = .FindNext(fCell)
If Not fCell Is Nothing And fCell = fname Then
If fCell.Offset(0, 2) = lname Then
firstname_Text.Text = fCell
middlename_Text.Text = fCell.Offset(0, 1)
lastname_Text.Text = Trim(fCell.Offset(0, 2) & " " & fCell.Offset(0, 3))
dob_Text.Text = fCell.Offset(0, 5)
userform3.Label1.Caption = "Now that we have the information from " & fCell & "'s file, what would you like to do?"
With Workbooks("FirstWorkbook").Worksheets("Sheet1")
.Range("A1") = fCell
.Range("A2") = fCell.Offset(0, 2)
End With
Else
MsgBox ("I could not find a client by that name.")
Workbooks("Master List").Close False
End If
Else
MsgBox ("I could not find a client by that name.")
Workbooks("Master List").Close False
End If
End With
End Sub
1つのユーザーフォームを使用するよりよい方法、またはマスターリストを検索するためのより良い方法があります。この問題を解決するのに役立つ解決策、または正しい方向のポイントがあるので、私はそれを行うための別の方法を見ることができます。
掘りと少しのコードで周りいじるのビットの後、私は私が欲しかった、まさに発見しました。コレクションとその戻り値(主に表示と変更の点で)については、まだ多くのことを学ばなければならないが、今すぐやってみたいものについては、これだけです。ありがとうございました! – MCSythera