2016-04-23 13 views
2

ワークシートにデータを追加するユーザーフォームを構築しています。私は私の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)にアクセスできるようにしたいのですか。それ以外に何ができるか分かりません。何か案は?ありがとうございました!

答えて

1

VBA IDEを開いてVBAProjectのThisWorkbook項目を選択すると、配置する必要があります。その項目をダブルクリックして開きます。左上のドロップダウンリストで「ワークブック」を選択し、右上のドロップダウンで「開く」を選択します。 Workbook_Open SubはThisWorkbookオブジェクトに作成されます。

Private Sub Workbook_Open() 
    Set trees = ThisWorkbook.Sheets("Sheet1") 
End Sub 

VBAProjectとAdd Moduleを右クリックします。そのモジュールでは、グローバル変数を設定します。

Public trees As Worksheet 

次に、フォームを作成してボタンをダブルクリックします。私の場合は

:これは、ボタンイベントを生成します

Private Sub CommandButton1_Click() 
    trees.Cells(1, 1) = Me.TextTreeName 
    trees.Cells(1, 2) = Me.TextTreeType 
End Sub 

は、Excelワークブックを(最初のコードと、ブックを保存)閉鎖とのWorkbook_Open(ワークブックを再度開く場合)でのキックとなりますワークシートを設定します。フォームに電話し、ボタンをクリックします。これは、指定されたシート上の2つのセルを埋めるでしょう....

+0

お返事ありがとうございます。奇妙なのは、あなたが最初から言及したすべてのことを(テストファイルを作成して)実行し、すべてを保存し、ファイル全体を閉じる前にユーザボックスを実行したということです。私は誤りがあります。ワークブックを閉じてもう一度開くと、問題なくコードを実行しました。私にとって、それはちょっと変わったようだ。 とにかく、正しく理解すれば、すべてのグローバル変数はWorkbook_Open()サブに入っていますか?だから、変数mapleTree = trees.Cells(1、9)を設定すると、他のサブシステムからmapleTreeにアクセスできますか?あなたの助けをもう一度ありがとう! – EJM

+0

パブリック変数は、任意のワークシート・コード・ペインと同様に、どのモジュールでも宣言することができます。宣言文は、最初のSubまたはFunctionオカレンスの前にその外側に配置する必要があります。いったん宣言されると、設定と検索の目的のために、どのモジュールのSub/Funcからでもアクセスできます。私はあなたの変数が同じモジュールにあるすべてのSubs/Func間でのみ共有されなければならない場合は、モジュールレベル変数として宣言する方が良いでしょう(つまり、Dim trees from Worksheet')。モジュールそのものの最上部。 – user3598756

関連する問題