2009-07-23 6 views
2

I持って私のスプレッドシートVBAマクロでユーザーフォームを処理するため、次のコード:VBAグローバル変数

Option Explicit 
Public saved_vocab As String 
Public saved_num As String 
Public saved_def As String 
Public saved_ex As String 

Private Sub Save_Click() 
    Dim low As Integer 
    Dim high As Integer 
    Dim selected As Integer 

    low = 1 
    high = Cells(1, 1).End(xlDown).Row 
    Range(Cells(low, 1), Cells(high, 1)).Find(what:=vocab.Text, After:=ActiveCell, LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False).Activate 
    selected = ActiveCell.Row 

    saved_vocb = Cells(selected, 1).Text 
    saved_num = Cells(selected, 2).Text 
    saved_def = Cells(selected, 3).Text 
    saved_ex = Cells(selected, 4).Text 
    Cells(selected, 1) = vocab.Text 
    Cells(selected, 2) = num.Text 
    Cells(selected, 3) = definition.Text 
    Cells(selected, 4) = example.Text 
End Sub 

Private Sub undo_Click() 
    Cells(selected, 1) = saved_vocab 
    Cells(selected, 2) = saved_num 
    Cells(selected, 3) = saved_def 
    Cells(selected, 4) = saved_ex 
End Sub 

は、私は何をしたい保存に適切に情報を保存している_ ??? "Undo"ボタンをクリックして2番目の機能を実行すると、正しくアクセスできるようになりました。しかし、2番目の関数を実行すると、以前に保存された情報_ ???変数はおそらく変数スコープを不適切に処理している自分自身のb/cはなくなっています。私がしたいことを達成する最も簡単な方法は何でしょうか?アドバイスを事前に感謝します。

答えて

3

グローバル変数をシートモジュールではなく「通常の」モジュールに入れたいと思います。

4

変数selectedSave_Click()サブルーチンの中で宣言されており、undo_Click()サブルーチンで使用されています。

などsaved_vocabなど、あなたの他のグローバル変数と一緒に、サブルーチンの外に宣言する必要がありselected変数、saved_numなど

Option Explicit 
Public saved_vocab As String 
Public saved_num As String 
Public saved_def As String 
Public saved_ex As String 
Public selected As Integer 'declaration added 

その後Save_Click()

selectedのための既存のdeclarionを削除