初歩的な問題で申し訳ありません。
VBAの質問です。
Public userName As String
Sub Workbook_Open()
' ・・・【中略】・・・
loginForm.show
msgBox userName'テストのため
'以下処理が続く
end Sub
loginFormを表示させそのフォーム内で入力させた値を
Public Sub OKButton1_Click()
'・・・【中略】・・・
If Trim$(Text_ID.Text) <> "" Then
userID = Trim$(Text_ID.Text)
Me.Hide
Else
exit Sub
Me.Hide
End Sub
どうしたら引き継げるのですか?
No.2ベストアンサー
- 回答日時:
挿入→標準モジュールを開きそこで変数宣言してください。
この回答への補足
ThisWorkBookでPublicを宣言しても、標準フォーム内のプロシージャには無効・・というか、その宣言は生きていてその変数を扱えるのですが、プロシージャ内で値を変えてもThisWorkBook内には帰ってこない。
そこで、
[Public/Private] Sub Workbook_Open()
Call mainFlow
End Sub
として、標準プロシージャで
Private mainFlow()
'・・・ここにThisWorkBookに書かれていたものを移す
End Sub
して、その前で宣言をしてみました。
・・・これでうまくいきました。
そこで、kmetuのコメントに気がついて、いっそのこと変数宣言だけの標準モジュール(DeclareVariable)を作成しても良いことを確認しました。
結果的には、
ThisWookBookで、
Private Sub Workbook_Open()
Call mainFlow
End Sub
として、標準プロシージャで、
Option Explicit
Public [変数] As type
Public mainFlow()
'処理
'プロシージャまたはユーザーフォーム
'変数の利用
End Sub
という形に落ち着きましたが、これでよいのかな??
なんともへんな形だけど
私の質問
「Public userName As String:Sub Workbook_Open()」
で宣言しても、ユーザーフォーム//標準モジュール・・
「loginFormを表示させそのフォーム内で入力させた値を」
「どうしたら引き継げるのですか?」
に対して、まさにピンポイントの回答でした。
WorkBook_Open()が最初に実行される動作なので、そこでPublic [Variable] As [Type]で宣言すると、ずっとPublicだと思ってました。
ありがとうございました。
No.6
- 回答日時:
もっと丁寧にステップを踏んで質問文を書くこと。
それが質問者の勉強になると思う。読者は質問でわかるとしても、質問者は質問には、どこにどのようなコードを書いて、何処でどうなったか書くもの。
ーーー
ThisWorkbookのOpenイベント
Private Sub Workbook_Open()
UserForm1.Show
'MsgBox UserName 'テストのため
MsgBox "フォームへ行ったあと" & userID
'以下処理が続く
Range("A1") = userID
End Sub
ーー
UserForm1のコントロール
テキストボックス1つ
TextBox1
コマンドボタン1つ
CommandButton1
を設ける。
そのClikイベント
Private Sub CommandButton1_Click()
If Trim$(TextBox1.Text) <> "" Then
userID = Trim$(TextBox1.Text)
MsgBox "フォーム入力直後" & userID
Me.Hide
Else
Exit Sub
Me.Hide
End If
End Sub
ーーー
標準モジュール1のコード
Public userID As String
だけ。PUBLIC変数の宣言。
ーー
以下実行の操作の内容。
実行ーSUB/ユーザーフォームの実行
で
UserFom1が表示される
テキストボックス1にUserIdの文字列をを入れて
コマンドボタン1をクリック
(あくまで例えで)Sheet1のA1セルにUserIDの文字列をセット
--
パスワードもテキストボックスを1つ増やせば同様で出きる。
No.5
- 回答日時:
各シートやThisWorkbookでPublic宣言した変数は
ThisWorkbook.変数名
Sheet1.変数名
とかでアクセスできますが
標準モジュールでPublic宣言したほうが単純じゃないでしょうか。
No.4
- 回答日時:
標準モジュールにグローバル変数というのもいいですが
Workbookにプロパティを新設するといった方法も可能ですよ
--- ThisWorkbook のコード
' プロパティ内容の保存用変数
private sName as String
public Property Get myName() as String
myName = sName
End Property
public Property Let myName(ByVal newName as String )
sName = newName
End Property
といった具合にしておいて
UserForm上から代入する際には ... Property Let を使用
ThisWorkbook.myName = Trim$(Text_ID.Text)
代入した値を参照する場合は ... Property Get を使用
dim ss as String
ss = ThisWorkbook.myName
といった具合にします
No.1
- 回答日時:
どこまで引き継ぐのか分かりませんが
適切なグローバル変数(プロシージャの外で変数宣言してください)
に代入したらいかがですか
グローバル変数を使う上での注意点もあります
http://www.bekkoame.ne.jp/~poetlabo/COMP/Excel/V …
この回答への補足
このworkbookが開いている間・・
ということで、Thisworkbookにコードを書いてます。
Public userName As String'★ここでpublic
Sub Workbook_Open()
そして、その中から
loginForm.show
でユーザーフォーム開いてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフのX,Y座標を取得したい
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
Form間の値の渡し方
-
モジュールとは何ですか
-
'Range'メソッドは失敗しました
-
Excel VBA 定義されたプロージ...
-
本当にPublicな変数(配列で)
-
ExcelVBA:パブリック オブジェ...
-
EXECEL VBA コマンドボタンか...
-
Sub Workbook_Open()でユーザー...
-
VBAで別モジュールへの変数の受...
-
Excel VBAで、ユーザーフォーム...
-
Perlでモジュールをインストー...
-
Excelで時刻になったら知らせて...
-
VBAを使用してWordからExcelの...
-
インストールできません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
VBA This Workbookモジュール...
-
Excel VBA 『Call』で呼び出す...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォーム...
-
モジュールとクラスの違いって...
-
Excelで時刻になったら知らせて...
-
Access VBA標準モジュールにつ...
-
Excel VBA 定義されたプロージ...
-
標準モジュールを削除したい。(...
-
モジュールとは何ですか
-
ベースモジュールって?
-
モジュールの最大数はいくつな...
おすすめ情報