12

同様のトピックで見つけた解決策を読んで適用しましたが、私の場合は何もうまくいかないようです。

したがって、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がパブリック変数であることを示すさまざまな方法ですが、まだクラッシュしています...)。

よろしくお願いいたします。

4

2 に答える 2

12

モジュールで設定できるユーザーフォーム内にパブリック変数を作成できます。

これらの変数は、読み込まれたユーザーフォーム内でのみアクセスできます。

ユーザーフォーム内で、両方のオブジェクトのパブリック変数を宣言します。

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
于 2013-12-03T14:37:05.603 に答える