同様のトピックで見つけた解決策を読んで適用しましたが、私の場合は何もうまくいかないようです。
それで、Module1の1つのサブからユーザーフォームに変数を渡したいと思います。 「provinceSugg」という文字列です。
これは私のコードの関連部分です:
Public provinceSugg As String
Sub probaCity()
[...]
If province = "" And city <> "" Then
provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value
UserForm2.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?"
UserForm2.Label1.TextAlign = fmTextAlignCenter
UserForm2.Show
Else
End If
End Sub
そして私のユーザーフォームコードでは:
Private Sub userformBtn1_Click()
MsgBox provinceSugg
sMain.Range("J6").Value = provinceSugg
End Sub
プログラムを実行すると:
1 /サブから呼び出されたMsgBoxにProvinceSuggのコンテンツが表示されます(ProvinceSuggがあるため、空の変数ではありません)。
2 /ユーザーフォームから呼び出されたMsgBoxが空で(値を渡すことができなかったため)、「sMain.Range( "J6")。Value = ProvinceSugg」を実行するとプログラムがクラッシュします「Error 424 Object Required」のようなものです(そのため、変数はユーザーフォームに渡されませんでした)。
私はフォーラムとここで見つけたすべてのものを試しました(ProvinceSuggがパブリック変数であるが、まだクラッシュしていることを示すさまざまな方法...)。
よろしくお願いします!
モジュールで設定できるパブリック変数をユーザーフォーム内に作成できます。
これらの変数は、ロードされるとユーザーフォーム内でのみアクセスできます。
ユーザーフォーム内で、両方のオブジェクトのパブリック変数を宣言します。
Public sMain As Worksheet
Public provinceSugg as string
Private Sub userformBtn1_Click()
MsgBox provinceSugg
sMain.Range("J6").Value = provinceSugg
End Sub
モジュール内では、これらの変数の両方を評価できます。
Sub probaCity()
[...]
If province = "" And city <> "" Then
provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value
With UserForm2
.provinceSugg = provinceSugg
Set .sMain = sMain
.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?"
.Label1.TextAlign = fmTextAlignCenter
.Show
End With
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim selectColumn
selectColumn= Split(Target.Address(1, 0), "$")(0)
Call UserFormStart(selectColumn)
End Sub
メインモジュール内
Public columnSelection As String
...
Public Sub UserFormStart(ByVal columnRef As String)
'MsgBox "Debug columnRef=" & columnRef
columnSelection = columnRef
UserForm1.Show
End Sub
ユーザーフォーム内
Private Sub UserForm_Initialize()
'MsgBox "Debug UserForm_Initialize =" & columnSelection
...
End Sub
Worksheet_SelectionChangeは、columnSelectionがパブリックとして宣言され、ユーザーフォームから可視であるモジュールのサブルーチンを呼び出します。列参照に3つの異なる変数を使用して、ユーザーフォームがモジュールにアクセスできる場所があることを示しました。上記のすべてが機能し、検索して解決するまでに時間がかかりました。幸せな狩猟の人々