Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24066 / 76738 ←次へ | 前へ→

【58026】Re:ユーザーフォームでも反映される宣言について
発言  ichinose  - 08/9/28(日) 7:28 -

引用なし
パスワード
   ▼YOU さん:
おはようございます。

>標準モジュールで、"PUBLIC"で宣言し、設定した値をそのモジュールで呼び出したユーザーフォームで読み取り条件判断しようとさせていますが、どうも標準モジュールで設定した変数の値を読み込んでいないようです。
↑この具体例を提示してください。

ユーザーフォームの構成(中のコントロールの配置の詳細)とかコード内容の提示

だれでもYOU さんが投稿された記述どおりに設定すれば、
この不具合が再現できる記述をお願いします。


さて・・・。

標準モジュールにて、宣言されたPublic変数、

例 
標準モジュールに

Public aa as long

と宣言された変数は、ユーザーフォームのモジュールの
どのプロシジャーでも

Private Sub UserForm_Activate()
 msgbox aa
End Sub

と一般的な記述で変数の値の取得や設定が出来ます。


*具体例

アクティブシートのセルA1に入力された数値を用いて、
1からセルA1までの総和(ΣA1)を計算して、結果をユーザーフォームに表示する

という仕様のプログラムを考えます。

セルA1が、 10なら 結果は、 55
セルA1が、 20なら 結果は、 210

等など・・。


1 準備

ラベル(Label1)を一つだけ配置したユーザーフォーム(Userform1)を
作成してください。

このUserform1のモジュールに

'================================================================
Private Sub UserForm_Activate()
  With Label1
    .Width = Me.Width
    .Font.Size = 16
    .Caption = mes
    .AutoSize = True
    End With
End Sub


標準モジュールに

'===============================================================
Option Explicit
Public mes As String
'===============================================================
Sub main()
  Dim ans As Long
  Dim g0 As Long
  Dim n As Long
  
  With ActiveSheet
    If IsNumeric(.Range("a1").Value) Then
     n = .Range("a1").Value
     ans = 0
     For g0 = 1 To n
       ans = ans + g0
       Next
     mes = "Σ" & n & " = " & ans
    Else
     mes = "セルA1は、数字ではありません"
     End If
    UserForm1.Show
    End With
End Sub

2操作

アクティブシートのセルA1に適当な数字を入力して
mainを実行してみてください。

指定された数値から、総和を計算し、ユーザーフォームに結果が表示されます。


3結果

このようにPublic宣言した変数は、簡単に他のモジュールで
引用できます。

いえ、扱いが簡単だから、乱用したり、手続きが曖昧な使い方をすると、
もう何がなんだかわからないコードになってしまうのです。

Public変数って、使い方は難しいですよ!!

本当は、続きがありますが、先に本題の

>標準モジュールで、"PUBLIC"で宣言し、設定した値をそのモジュールで呼び出したユーザーフォームで読み取り条件判断しようとさせていますが、どうも標準モジュールで設定した変数の値を読み込んでいないようです。

が解決してからにしましょう。
2 hits

【58025】ユーザーフォームでも反映される宣言について YOU 08/9/28(日) 2:58 質問
【58026】Re:ユーザーフォームでも反映される宣言に... ichinose 08/9/28(日) 7:28 発言
【58027】Re:ユーザーフォームでも反映される宣言に... YOU 08/9/28(日) 10:04 質問
【58028】Re:ユーザーフォームでも反映される宣言に... ichinose 08/9/28(日) 10:33 発言
【58031】Re:ユーザーフォームでも反映される宣言に... YOU 08/9/28(日) 11:12 お礼

24066 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free