2017-05-31 25 views
0

これは大きな問題ではありませんが、私の肌の下にあります。私はサブフォームの間で変数を共有しようとしています。パブリック変数を宣言するのは簡単な方法ですが、明らかに、ユーザーフォーム内からパブリック変数を宣言することはできません。だから、まったく無関係なモジュールで変数を宣言しなければならないようです。これは、ユーザーフォーム内のサブシステム間で変数を渡す唯一の方法ですか?ExcelからVBA変数を共有すると、Userfrom Subs内で

コンテキストでは、設定のユーザーフォームに「OK」、「適用」、「キャンセル」ボタンを作成しようとしています。ここで、「OK」および「適用」ボタンは設定で永久に変更します。

リストボックス(PathList)から項目を削除するボタンです。リストボックスはワークシートにデータを格納していますが、「適用」を押すまでは実際にシートからアイテムを削除したくありません。 "Apply"ボタンが実際にシートからセルを削除できるように、SelectedArray()変数をApplyButton_Clickサブルーチンと共有したいと思います。コメントされたコードは、私が "適用"ボタンにしたいものです。

Private Sub RemovePathButton_Click() 
Dim SelectedArray() 
Dim ctr As Integer 
ctr = 1 

For intCount = PathList.ListCount - 1 To 0 Step -1 
    If PathList.Selected(intCount) = True Then 
     ReDim Preserve SelectedArray(ctr) 
     SelectedArray(ctr) = intCount 
     ctr = ctr + 1 
    End If 
Next intCount 


For i = 1 To UBound(SelectedArray) 
' Dim num As Integer 
' num = SelectedArray(i) + 4 
' Worksheets("Settings").Range("A" + CStr(num)).Delete (xlShiftUp) 
    PathList.RemoveItem (SelectedArray(i)) 
Next 

End Sub 

答えて

0

UserForm Moduleの上部に変数を宣言すると、変数はUserForm Moduleの任意のコントロールまたはプロシージャからアクセスできます。

ユーザーフォームを挿入し、2つのコマンドボタンを配置し、次のコードをユーザーフォームモジュールに配置します。 ユーザーフォームを起動し、両方のコマンドボタンをクリックして、この方法で変数にアクセスする方法を確認します。

Option Explicit 

Dim Str As String 

Private Sub CommandButton1_Click() 
MsgBox Str 
End Sub 

Private Sub CommandButton2_Click() 
Call Test 
End Sub 

Private Sub UserForm_Initialize() 
Str = "This variable can be accessed by any code on UserForm Module." 
End Sub 

Sub Test() 
MsgBox Str 
End Sub 
+0

ありがとうございます!私はそれがそれのように単純でなければならないことを知っていた。これは通常のモジュールでも使えますか?すべてのサブ共有がモジュール内の変数を共有する前に変数を宣言するだけですか? –

+0

@AlecHolmesようこそ。はい、そうです。これは、モジュールの最上位に宣言するとモジュールレベル変数と呼ばれます。 – sktneer

関連する問題