2017-05-07 49 views
0

我有一個數據很大的文件,每週更新一次,VBA腳本從中複製大量各種長度和起點的列,然後將這些列逐個粘貼到另一個文件中。VBA:複製excel列:存儲單元格引用的最佳實踐?

我的問題是如何最好地存儲腳本需要能夠複製正確列的單元格引用?目前有一堆數組存儲起始行號,起始列號,圖表編號等,這些索引都是相同的,並且有一個循環函數用於實際複製粘貼工作。

這個(特別糟糕的)解決方案顯然是一個絕對的噩夢,如果源文件稍微改變一點。那麼一個人應該如何做得更好?

+0

歡迎使用stackoverflow。請,你能提供一些你的具體問題的代碼嗎?這可以證明你嘗試了多遠,它會幫助其他成員更好地理解你的問題,當時,你會給他們一個你的問題的背景。請檢查以下鏈接:https://stackoverflow.com/help/mcve和https://stackoverflow.com/help/how-to-ask –

+0

由於您的代碼正在運行,因此此問題可能更適合[代碼評論](https://codereview.stackexchange.com/)論壇。 –

+0

這很難說,因爲我們不知道你的意思是「很多不同長度和起點的列」。無論如何,這似乎是一個合乎邏輯的問題,而不是編碼問題。你怎麼知道你想複製的範圍?如果選擇背後有一個共同的基本原理,那麼可以以某種方式存儲這些規則。如果沒有一個(例如,ColumnA,第2行到第5行; ColumnM,第105行到第522行),這將是非常困難的,並且可能您必須對規則進行硬編碼。總之:首先解決問題,然後編寫代碼。 – CMArg

回答

0

Excel正在爲此使用枚舉。枚舉是將常量分配給名稱的最有效方式。

[Private] Enum WeeklyReport 
    FirstRow = 3 
    StartColumn = 1   ' Columns: 
    Text 
    Values 
    Totals = 17 
    Remarks 
End Enum 

上面的聲明指定了具有5個值,一行和四列的枚舉WeeklyReportText具有2的值,因爲如果省略值先前的遞增1。因此,Remarks = 18

可以通過其全名調出的值,比如,WeeklyReport.Remarks或它們的短名稱,如Remarks。這就是爲什麼Excel給它的枚舉賦予唯一的名字的原因,比如xlUp,你可能會一直使用而不知道枚舉的名字。上面給出的名字是可能的,但不是很好。

枚舉是它們自己可與Long互換的數據類型。在任何代碼之前聲明,在代碼表頂部,如果是私有的,則在整個項目中可用,否則在項目中。