2017-05-07 47 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互换的数据类型。在任何代码之前声明,在代码表顶部,如果是私有的,则在整个项目中可用,否则在项目中。