2016-10-16 6 views
0

Excelスコープのさまざまな種類の変数スコープに関するページを最後の1時間読んでいますが、スコープの問題に対処する明確なドキュメント参照が見つかりませんでした。それはそのような古典であると確信しています。ああ、ここに行く。userform/sheetオブジェクトで公開変数を使用できるようにする

私は1枚のシートと1つのユーザーフォームを含むブックを持っています。私はシートの第1列に座っている学生のリストを持っています。私はしたいと思います:students_listという名前のいくつかのグローバルコレクション変数に

  • 負荷このリストをアップ(私はこのはThisWorkbookオブジェクト内のワークブック・オープン()プロシージャを使用してください)
  • students_listの内容を使用します
  • 私のユーザーフォームにリストボックスを初期化し、私のユーザーフォーム上のボタンは、私は必要なすべてがから見ている変数である

上でクリックされたときにstudents_listから要素を削除します私のユーザーフォームの手順の中で、そしてThisWorkbookオブジェクトの中から。

私はシートのコード内で、シートフォームのコードで、グローバルフォーム専用のモジュールでThisWorkbookのuserformで宣言しようとしました...私はちょうど正しい方法を見つけることができませんstudents_list変数はどこからでも見ることができます。

私には何が欠けていますか? -/

+0

をあなたが保存するために、スプレッドシートの 'Range'を使用することができますVBAコードのあらゆる要素(基本的にはシートやモジュール)からアクセスできます。このスクラッチ領域が表示されないようにするには、列BBでそれを開始し、そして/またはフォント色を白に設定して、ユーザーがそれに気付かないようにします。 – PeterT

+1

モジュールで 'students_list'を' Public'と宣言した場合、変数**はプロジェクト内のすべてのプロシージャで使用可能になっています。 http://stackoverflow.com/a/3815797/6535336を参照してください。(唯一の例外は、同じ名前の別の変数を別の場所に宣言した場合です.2番目の変数は2番目の宣言のスコープ内で参照されます) – YowE3K

+0

スクラッチ領域を表示するpbはありません。私の 'students_list'コレクションに値をロードする方法...しかし、それは私が恐れている問題ではありません。 YowE3K @ – Guillaume

答えて

0

あなたのPublic変数の宣言をモジュール内に置きます(メニューから[挿入]/[モジュール]を使用してメニューを作成してください)。 1)。スコープはプロジェクト全体に拡張されます。モジュール中のSO

(例えばModule1が)持っている:

Public foo As Integer 

、ワークシート(たとえばシート1)のコードでは、持っている:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    foo = 4 
    MsgBox "foo set to 4" 
End Sub 
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
    MsgBox "foo = " & foo 
End Sub 

をあなたが宣言を配置した場合ThisWorkbookのコードはThisworkbook.fooと参照する必要があります。なぜなら、コードのどの部分からもアクセス可能ですが、それはそのThisWorkbookオブジェクトに固有の変数ですからです。 ThisWorkbookのコードでそう

は、持っている:

Public foo As Integer 

、ワークシート(たとえばシート1)のコードでは、持っている:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    ThisWorkbook.foo = 4 
    MsgBox "foo set to 4" 
End Sub 
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
    MsgBox "foo = " & ThisWorkbook.foo 
End Sub 
+0

きれいで、とてもありがとうございます。 – Guillaume

関連する問題