ワークシートにデータを追加するユーザーフォームを構築しています。私は私のuserformのサブルーチンをたくさん持っていますが、ワークシートに設定した変数にアクセスする際に問題があります。現在、ローカル変数(サブ)にあり、ここで説明するようにモジュールに配置しようとしました:Can a worksheet object be declared globally in Excel VBA。私はさらに検索をしましたが、私が望む結果を得られませんでした。userformのグローバルワークシート変数excel
私はVBAには新しく、一般的なプログラミングには新しくありません。私はかなりExcelを使用し、VBAを使用してマクロなどを作成することで、もっと多くのことをしたいと思っています。
sub savebutton_click()
Dim trees As Worksheet
Set trees = ThisWorkbook.Sheets("Sheet1")
trees.Cells(1, 1) = Me.TextTreeName
trees.Cells(1, 2) = Me.TextTreeType
End sub
明らか
を、私は別のサブルーチンからローカル変数にアクセスすることはできませんので、私は「木のグローバルを行う必要があります。ここで私が現在使用しているコードです。私はモジュールを作成し、DimをPublicに置き換え、2行目のコードをWorkbook_Open()に配置し、次に 'trees'変数にアクセスしようとしました。私は「無効な外部プロシージャ」を取得し、Workbook_Open()のコードをハイライト表示して「デバッグ」を押します。
私は基本的には、どのサブからtrees.Cells(5,6)にアクセスできるようにしたいのですか。それ以外に何ができるか分かりません。何か案は?ありがとうございました!
お返事ありがとうございます。奇妙なのは、あなたが最初から言及したすべてのことを(テストファイルを作成して)実行し、すべてを保存し、ファイル全体を閉じる前にユーザボックスを実行したということです。私は誤りがあります。ワークブックを閉じてもう一度開くと、問題なくコードを実行しました。私にとって、それはちょっと変わったようだ。 とにかく、正しく理解すれば、すべてのグローバル変数はWorkbook_Open()サブに入っていますか?だから、変数mapleTree = trees.Cells(1、9)を設定すると、他のサブシステムからmapleTreeにアクセスできますか?あなたの助けをもう一度ありがとう! – EJM
パブリック変数は、任意のワークシート・コード・ペインと同様に、どのモジュールでも宣言することができます。宣言文は、最初のSubまたはFunctionオカレンスの前にその外側に配置する必要があります。いったん宣言されると、設定と検索の目的のために、どのモジュールのSub/Funcからでもアクセスできます。私はあなたの変数が同じモジュールにあるすべてのSubs/Func間でのみ共有されなければならない場合は、モジュールレベル変数として宣言する方が良いでしょう(つまり、Dim trees from Worksheet')。モジュールそのものの最上部。 – user3598756