簡體   English   中英

如何使用VBA導出工作表按鈕和詳細信息

[英]How to Export Sheet Buttons and Details with VBA

我一直在忙於在我使用的Excel應用程序中導入/導出VBA模塊和類。 似乎與版本控制一起使用非常有用。 我喜歡。 我可以輕松地在模塊中實現代碼更改,導出更改,提交並推送更改,以及在其他Excel應用程序實例中“重新加載”(刪除所有模塊並重新導入)更改。

但是,我找不到在工作表上使用此方法。 如果我在工作表上添加了視覺更改(例如,我添加了按鈕或更改了工作表的外觀),是否可以像模塊一樣將工作表作為代碼導出,因此我可以將工作表完全導入從我的變化看?

我已經知道一些偽解決方案,但是要么不能滿足我在版本控制方面的需要,要么會變得很麻煩。 首先,我可以編寫一個VBA腳本將Excel應用程序復制到一個.xlsx文件中,該文件將容納我的任何工作表更改,然后,如果需要,我可以將它們導入到該應用程序的另一個實例中。 這樣做的問題是,我將無法將它們包括在我的版本控制中。 我也知道,我可以在事件Workbook_Open編寫腳本,從而基本上在每次打開Excel應用程序時以編程方式在工作表上創建用戶界面。 這將解決我提交代碼的問題,但實在太麻煩了。

對這個問題有什么建議或解決方案嗎?

編輯:明確地說,我知道我也可以將工作表導出為模塊。 但是,似乎沒有任何跡象表明工作表在導出時的外觀。 因此,當我導入“工作表”時,它作為類模塊被導入。

昨天我回答了類似的問題Excel-VBA代碼的版本控制系統

源代碼控制表很困難。 假設您序列化單元格A1,A2,A3中的數據,那么您可能

A1:"Foo"
A2:"Bar"
A3:"Baz"
...
A5577: "Kevin"

即大量的行。 然后您在頂部的行中插入一行,例如3,那么下面的所有行將不同步並拋出5000! 版本比較不匹配; (當我在執行此操作的系統上工作時),這很煩人。

也許您可能想好好考慮一下這個問題並發布可能的解決方案。 我本人對此進行了快速思考,我想知道一些類似於鏈表的邏輯是否會有所幫助。 因此,先序列化一個單元格,然后再序列化到下一個單元格的鏈接,然后遍歷整個單元格列表。 然后,單行插入將只需要一個更改,即鏈接插入。

“工作表”是Document類型的VBComponent ,它一個類模塊,在宿主應用程序的對象模型(此處為Worksheet類) VBComponent類化特定的對象類型。 因此,“代碼”部分將導出為類模塊; “文件”部分,那么,您的主機的文件-即含量不止細胞值和公式(字體,單元格格式,條件格式,單元格批注,形狀等),並在Office 2007+那些被序列化以XML格式打包,並以.zip打包(然后以.xlsx擴展名重命名):為了對文檔進行適當的源代碼控制,您需要與實際XML上的差異。

此外,您不能將文檔類型的VBComponent導入回VBProject ,因為它是擁有文檔類型組件的宿主應用程序。 例如,要將工作表添加到ThisWorkbook ,您需要使用Excel對象模型並調用ThisWorkbook.Worksheets.Add ; 同上刪除它們。

這就是為什么沒有用於VBA的源代碼控制解決方案能夠處理每個用例的原因:要使其功能完整,它必須能夠在打開該文檔的同時修改該文檔結構的壓縮XML。從磁盤加載XML。

我有這個OSS項目Rubberduck ,它具有集成的Git源代碼控制功能:

Rubberduck的“源代碼控制”面板

它與主機無關,因此它的功能並沒有特定於主機的內容,但是即使有人聲稱“很簡單” ,實際情況並非如此:一個人會很高興能夠恢復代碼-背后; 另一個將需要單元格的值和公式; 另一個人將需要能夠恢復形狀及其格式和分配的宏,另一個人會抱怨,因為從源代碼管理中恢復項目時,他們失去了條件格式:最后,擁有文檔類型的唯一方法VBComponent源代碼控制下,是提取它的XML,並保持源控制下......不過呢,你不能完全恢復的文件。

唯一合理的解決方案是,盡可能使VBA代碼實現與文檔脫鈎-編寫有效的VBA代碼,而不管代碼所在的工作簿中的工作表是什么; 參數化所有內容,並具有一個生成工作表布局和格式等內容的模塊-換句話說,不要“設計”工作表(在Excel中),不要“編碼”它們(在VBE中)。

至於數據...好運,不幸的是:源代碼控制是為了代碼 ,而不是數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM