【发布时间】:2019-03-19 18:26:32
【问题描述】:
从标题来看,我的问题可能听起来很明显,但请听我说完。
我正在制作一个电子表格,用于跟踪员工的病假,其布局为员工姓名,列是一年中的每一天。
我正在开发一个宏,它将数据向后移动一个月,以便输入新数据。我目前的操作顺序是复制数据(第2个月到上个月)并将其向左移动一个月,然后清除上个月的数据。这个photo 可能会更好地解释它。
由于这种布局,我正在移动一个大约 50 行 x 330 列的数据数组。到目前为止,我一直在明智地使用以下代码和功能,它按预期工作:
(图中C1到C8是日历的角点)
主子程序:
'Copying entire calender into undo tab for the undo subroutine to use
Sheets(1).Range(C1 & ":" & C8).Copy Sheets(5).Range(C1)
'Moving the "moving zone" months 31 cells to the left
Sheets(1).Range(C2 & ":" & C8).Copy Sheets(1).Range(C1)
'Clearing the last month to make room for new information
Sheets(1).Range(C3 & ":" & C8).ClearContents
Sheets(1).Range(C3 & ":" & C8).ClearComments
“撤消”子程序:
'Copies information from undo tab back into sheet 1
Sheets(5).Range(C1 & ":" & C8).Copy Sheets(1).Range(C1)
问题是每次运行代码时,文件都会变大,代码运行速度会变慢。据我所知,这种类型的 Range.Copy 不需要“Application.CutCopyMode=False”标志,而且在我使用它时似乎并没有什么不同。
我使用复制功能而不是剪切功能的原因是因为我想保留日历最右侧的格式(边框、颜色等)不变。
是否有更好的方法来实现我的结果,因为现在似乎有一些隐藏的数据是代码执行的结果,这些数据堆积在我看不到的地方。
【问题讨论】:
-
欢迎来到 SO。您的代码看起来不错,我怀疑问题出在其他地方。还有更多代码吗?文件大小增加了多少?您是否尝试过通常的消肿技巧?例如techrepublic.com/blog/microsoft-office/…
-
为什么不为每个新月插入(使用 CopyOrigin:=xlFormatFromRightOrBelow)31 个新列?
-
@Absinthe 感谢您的欢迎!这是我的大部分代码......我有几行额外的代码首先将所有内容复制到一个单独的选项卡中以供我的“撤消”代码使用。文件大小最初从 100kb 左右开始,当它开始爬行停止时达到 300-400kb。不仅代码变慢,整个电子表格也很难使用。
-
最好发布所有代码,以防万一 - 很多时候问题是由看起来不相关的代码部分引起的。工作簿中有很多公式吗?关闭自动计算有帮助吗?你使用的是 xlsm 还是 xls 文件格式?
-
@user11217663 电子表格本身是由其他人创建的,其中包含许多令我头疼的公式,因此我尽量避免过多地弄乱布局。据我了解,需要对过去一年的病假进行统计,因此我的想法是将数据改组一个月而不是插入新列。