2017-08-31 10 views
0

コードが終了してExcelファイルが閉じられた後に配列に値を保存する方法があるのだろうかと思いました。コードの終わりの後に値を保持する配列

考え方は、いくつかの値を含む配列を持つことです。コードを実行するときには、値の一部を変更する場合と変更しない場合があります。ファイルを閉じるときに、この配列が存続し、その値を保持したいと考えています。 私は、ファイルを再オープンしてコードを実行すると、他のすべての変数が再初期化されます(そして、明らかにデフォルト値を再度取得することになります)が、この特別な配列にはまだすべての値格納されています(私はもちろん、そのコードで再宣言しません)。

この問題を回避する1つの方法は、配列に含まれるすべての値をワークシートに格納し、コードを再度実行するときに新しい配列に戻すことです。 しかし、私はワークシートを使用せずにこれを行う方法があるのだろうかと思います。

+0

[Workbook.CustomDocumentPropertiesプロパティ(Excel)](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbook-customdocumentproperties-property-excel)を試してください。私はそれを使ったことはありませんが、それはあなたの目的のために働くかもしれません。 – YowE3K

答えて

3

一つは、エクセルの心と魂のようにワークシートと考える傾向があり、そのために「このような大きな努力」を作ることに消極的である(エクセルため、コードがhereを見つけました) 1つの配列だけを格納します。 Excelの観点から見れば、シートは空である間に数バイトのメモリを占有するだけの配列に過ぎません。 VeryHiddenワークシートは、あなたが求めているものであり、実際にはWordの文書変数と非常に似ていると主張します。

代わりに、キーワードやコメントなどの組み込みプロパティの1つを使用して、配列に分割できる文字列を格納することをお勧めします。これはおそらくあなたの好きなものになるだろうが、それはあなたがあなたの利点に使うことができるものでない限り、それを編集できるので劣っていると思う。

技術的には、すべての実際的な目的のために、VeryHiddenワークシートは正確にあなたが求めているものです。あなたの抵抗は、理性に基づくものではなく、少なくとも私が自分自身を確信している方法であり、私が作成するワークシートの数が知覚可能なコストでより多くの自由を与えていると言うと、よりリベラルなものと言えます。

+0

ありがとうございます。私の場合、最良の選択肢は隠された(または隠されたシートかもしれない)と思う。私は**配列**変数をファイルに保存する方法を見つけることを期待しましたが、@David Gが示したように、明らかに不可能です。 非常に隠されたシートと、ユーザーインターフェイスから完全にアクセスできないという事実を除いて隠れたシートの間には違いがありますか?記憶上のように? – Seb

+1

すべてのデータ(およびシート)を含むワークブックは、実際にはxmlファイルの集まりです。これを自分で確認することができます。単に 'file.xlsx'の名前を' file.zip'に変更して解凍してください。あなたのデータを(隠された)シートに保存することは、メモリに関しては、ドキュメントのプロパティ内に保存することと同じです。テキストで、xmlファイルに保存されます。隠されたシートは当然より多くの道具を与えるでしょう。 –

+0

いいえ唯一の違いはキーボードからのアクセシビリティです。 – Variatus

1

上記のように情報を(隠された)シートに保存するか、Document Variablesを使用してください。ドキュメントから

:あなたのコードが終了したか、ブックを閉じてもう一度開かれた場合でも

Sub AddDocumentVariable() 
ActiveDocument.Variables.Add Name:="Age", Value:=12 
End Sub 

これらの変数が利用できるようになります。

編集:

Sub test() 
Dim wb As Workbook 
Dim docProps As DocumentProperties 
Dim docProp As DocumentProperty 
     Set wb = ActiveWorkbook 
     Set docProps = wb.CustomDocumentProperties 

    With docProps 
      .Add Name:="CustomNumber", _ 
         LinkToContent:=False, _ 
         Type:=msoPropertyTypeNumber, _ 
         Value:=1000 
      .Add Name:="CustomString", _ 
         LinkToContent:=False, _ 
         Type:=msoPropertyTypeString, _ 
         Value:="This is a custom property." 
      .Add Name:="CustomDate", _ 
         LinkToContent:=False, _ 
         Type:=msoPropertyTypeDate, _ 
         Value:=Date 
    End With 
     For Each docProp In docProps 
      Debug.Print docProp.Name, docProp.Value 
    Next 

End Sub 
+0

そのリードに感謝します。しかし、このようにWord文書にのみ有効です。私はExcelのために同じものを見つけることを試みています。 – Seb

+0

excelのサンプルコードが追加されました。 –

+0

これはまさに私が探しているのですが、配列変数のためです。リンクしている記事で説明したように、型が配列の場合、その型のmsoPropertyTypeはありません。だから、私の配列の各要素を格納するための変数を作成する必要があります(私の場合36 ...しかし悪化する可能性があります)。したがって、配列的に最も良い解決策は、(非常に)隠されたシートを使用しているようです。 – Seb

関連する問題