2017-08-31 40 views
0

我想知道在代碼結束並關閉excel文件後是否有一種方法可以將某些值保存在數組中。代碼結束後的數組保留值

這個想法將是一個包含一些值的數組。當運行代碼時,我可能會或可能不會修改它的一些值,當我關閉文件時,我希望該數組存在並保留其值。 我的意思是,當我重新打開文件並運行代碼時,所有其他變量將被重新初始化(顯然會再次獲得默認值),但是這個特殊數組仍然會有其所有的值存儲(所以我當然不會在該代碼中重新聲明它)。

避免這種麻煩的一種方法是將數組中包含的所有值存儲在工作表中,並且只要代碼再次運行,就將它們放回到新數組中。 但我想知道是否有辦法做到這一點,而不使用工作表。

+0

嘗試[Workbook.CustomDocumentProperties屬性(Excel)](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbook-customdocumentproperties-property-excel)。我從來沒有使用過它,但它可能適用於您的目的。 – YowE3K

回答

3

人們往往認爲工作表爲Excel的心臟和靈魂,是,因此,不願做出「這麼大的努力」只存儲一個數組。從Excel的角度來看,一張表只不過是一個數組,只佔用幾個字節的內存空間。我會爭辯說,一個非常隱藏的工作表正是你所要求的,事實上與Word的文檔變量非常相似。

作爲替代方案,我可以建議使用其中一個內置屬性(如關鍵字或註釋)來存儲可拆分爲數組的字符串。這可能更符合你的喜好,但我認爲它比較差,因爲用戶可以編輯它,除非這是你可以使用的優點。

從技術上講,對於所有實際目的而言,非常隱蔽的工作表正是您所要求的。你的抵制是基於心理學的,而不是理性 - 至少,這就是我堅信自己的原因,而且我可以說,隨着我創建的工作表數量的增加,我更加自由了,這給我更多的自由,而且沒有可察覺的成本。

+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 

這些變量將可即使你的代碼已經完成或工作簿再次關閉和打開。

編輯:(Excel文件,代碼中發現here

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 ...可能會更糟)。因此,array-wise最好的解決方案似乎是使用(非常)隱藏的表 – Seb