2011-09-28 14 views
5

動的配列を使用するExcelでマクロを書きました。ユーザーはその配列に要素を追加します。配列の要素をExcelでVBAに永続的に格納することはできますか?

要素を永続的に保存することは可能ですか?ブックを閉じた後でも要素を利用できるようになりますか?

私は、ワークシートに要素を格納し、ブックが開いているときにそれらをアレイに挿入するのではなく、要素を配列に永久保存することを望んでいます。

+0

に保管してください? – Reafidy

+0

も参照してください:http://stackoverflow.com/questions/7350388/saving-vba-dictionary-object-in-excel/7350849#7350849いくつかの注意があります。 – Fionnuala

+2

正常に動作する回答を受け入れることを忘れないでください。回答の左上に矢印アイコンがあります。回答を受け入れるために選択することができます。 – aevanko

答えて

5

ベスト・ベットの1つは、配列値をワークシートに格納し、VBAを使用してワークシートを非表示にすることです。

Me.Worksheets("ArrayValuesWorksheet").Visible = False 

あなたがなどローカルのCSVファイル、レジストリ、のような他のものを使用する場合、コードは単に別のマシンにワークブックを移動することにより、異なる動作をしますと、あなたは、配列の複数のコピーを持っている能力を失うことになります。

編集(以下@ Reafidyのコメントで優れた提案)

+14

'Sheets(" ArrayValuesWorksheet ")。Visible = xlVeryHidden'を使用すると、非表示リストに表示されるシートを防ぐことができます。 – Reafidy

+1

ツール/ VBAプロジェクトのプロパティ/保護タブに移動し、パスワードを入力することで、コードと「非常に隠れた」シートをパスワードで保護することもできます。ユーザーは「非常に隠れた」シートを再表示することはできません。 P.S.マイクロソフトの「非常に隠された」という言葉でLOL。つまり、私はそこにいました...その名前のEnumを見るのは面白いです。 – ray

+0

提案のおかげでありがとう、私は何らかのエクステンション、アドイン(私はまだ分かっていない)としてマクロを配布したいので、隠しワークシートにデータを保存したくないので、どのワークブックでも動作しますいつでもエクセルが開かれます。隠されたワークシートが添付されていれば、この方法でマクロを共有することはできないと思います。ところで、マクロを配布する最良の方法は何ですか? – user652061

0

あなたは私たちのように非表示にするシートのVisibleプロパティを使用することができた後、あなたは

Sub WriteArray() 
Dim MyArray As Variant 

MyArray = Array("x", "y", "z") 

Range("A1:C1").Value = MyArray 

End Sub 

Sub ReadArray() 

Dim MyArray As Variant 

MyArray = Range("A1:C1").Value 

End Sub 

を使用することができますシートに/書き込みアレイを読むには回答した。

2

名前コレクションの名前に配列を格納することもできます。この名前は非表示にすることもできます。

Names.Add Name:="StoredArray", RefersTo:=myArray, Visible:=False 
+1

これは配列ではなく文字列として格納します。 – Reafidy

+0

RonieとReafidyに感謝します。私はそれが配列に読み込まれた文字列を返すことができると思うので、データが文字列として格納されていれば問題はありません。面白いのは、このマクロを何らかのアドイン(拡張)として共有して、データを名前コレクションに保存できるかどうかということです。 – user652061

+0

これは答えです。初期化時に名前付き定数から配列を読み戻すことは難しくありません。 –

1

直接あなたの質問に答えるために:いいえ、メモリにアプリケーションを越えて寿命を持つ配列を格納する方法はありません - あなたはどこかにそれを保存する必要があります。

いくつかのオプションがありますが、シートに保存するのが最も効果的です。 「非常に隠れた」シートはVBAコードでしか見ることができないので、アレイに常に存在し、メモリ内でアクティブであるのと同じことです。

0

「どうやら...」、>>>はいできます!

いくつかの例:(シート上の)リストボックス/ ComboListBox =アレイ... 2次元バリアント配列について

:範囲()=配列。

またはシートの上に保存すると間違っている何commandbarMenu(それらが多次元行うことができます)

またはwhateverthatワークブックを再読み込みした後、続けて...

関連する問題