ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

釣り&パソコンコミュの【質】変数ついて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
すみません。大変基本的なことを質問いたします。
いくつかのサブプロシージャ間で変数の値を共有することは
出来るのでしょうか。

例えば
Sub test1()
Dim abc As String
abc=ActiveWorkbook.name
       ・
      ・
End Sub
ーーーーーーーーーーーーー
Sub test2()

Workbooks(abc).save
     ・
     ・
End Sub
ーーーーーーーーーーーーー
のような形です。(うまく伝わったでしょうか)

やりたいことは、GetOpenFilenameで取得した
ファイルネームを他のプロシージャでも利用
したいのですが、方法がわかりません。

何かよい方法を教えてください

コメント(14)

<変数を他のプロシージャでも利用したい。>

モジュールレベルで変数を使う場合は,
「宣言セクション」を使う方法があります。

1.「プロシージャボックス」で{Declarations}を選択するとカーソルが宣言セクションに移動します。

又は,
2.モジュールの先頭の部分にカーソルを持って行き,変数を宣言します。


Dim abc As String    ←宣言セクション
−−−−−−−−−−−
Sub test1()       ←プロシージャ
 ・
 ・
 ・
End Sub
−−−−−−−−−−−
Sub test2()       ←プロシージャ
 ・
 ・
 ・
End Sub
−−−−−−−−−−−

以上

これで,よろしかったのかな?
その2
Staticステートメントを使う方法

プロシージャ内に
------------------------------
Sub test1()
Static abc As String
abc=ActiveWorkbook.name

End Sub
------------------------------
モジュールが終了するまで保持されます。

私の分かる範囲はこの程度までです。
蛇足ですが、
個々のプロシージャ内部で宣言された変数は、『そのプロシージャ内でのみ有効です。(これを、外部から参照することはできません。)
 特に、Dim ステートメントで宣言された変数は、
呼び出し時に初期化され、終了でメモリ開放される局所変数として動作します。(おとんさん その2)

モジュール・レベルの変数を Public として宣言すると、そのモジュールばかりでなく、そのブックの全モジュールから参照できます。

〜標準モジュール〜(例です)
 Option Explicit
 Public tma As Long
 Public flag As Boolean

私は、フォームを利用したものが多いので
各フォームで同じような
処理を必要とするとき標準モジュールで
記述して使っています。

これは、自分で探し出して、利用しているので
おかしいよ!と思われた方は、
教えていただけると、うれしいです。

今のところ、問題なく動いているんですが・・・
追記:
その2
>Staticステートメントを使う方法
   〜
>モジュールが終了するまで保持されます。

これも、変数の有効期間は保持されますが
プロシージャーの外側からは、
その変数を参照できません。
>モジュール・レベルの変数を Public として宣言する。

あっ!その方法も・・・!(宣言セクションに記入)
その方が,モジュールを越えて使用できますね(^_^)v

この方が良いかも!!


ありがとうございます。
おとんさん、摩耶さんありがとうございます。

教えていただいた方法、いろいろ試してみます。
結果については、本日、夜にご報告いたします。

ありがとうございました。
Option Explicit
public abc As string

で、プロシージャ間で変数の参照が出来るようになりました

ありがとうございました。 
共有とは概念が違いますが、引数で渡してしまうというのもありかなと思っています。Byrefで渡すと渡した先で変更されることもありになりますので。
よこまやさん
引数で渡す方法ってどんな風にするんですか

勉強不足、まったく分かりません。
概要、教えてください。お願いします!
longagoさん、おはようございます。

以下の例は直接代入だけですが、要は呼び出された側で
変更できるということは変数がSUBの間で共有されていることに、近しいかと。


Sub test()
Dim a As Integer

a = 1

test_byref a
MsgBox a

End Sub
Sub test_byref(ByRef num As Integer)

num = 10

End Sub
実はこれ書くまで知らなかったのですがデフォルトがbyrefですね。に対して値は渡すが変更はさせない渡し方をbyvalと修飾します。
共有に比べて、引数をつけるメリットはこの変数が呼び出し先で使われるという事が明示的になり読む時にある種、形容してくれる気がしてます。
例えてゆうなら、ただよこまやっていうより煙草吸うよこまやみたいな感じかな?
あと変数の有効範囲(スコープっていいますね)を広げすぎたくない場合等にも使えるかと。
喫煙家のよこまやさん!ありがとうございました。

とても勉強になりました。例えがとても解りやすかったです。

喫煙家のlongagoより
(P.Sなかなか住みにくい世の中になりましたね)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

釣り&パソコン 更新情報

釣り&パソコンのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング