【发布时间】:2016-04-20 18:59:05
【问题描述】:
我正在研究一个宏,它提供了我们生产的产品的 4 个不同生产阶段的可视化表示。电子表格设置为显示为线性日历,显示一年中的所有 365 天并将它们分组为日历周。每个生产阶段都有与之相关的不同颜色。四个构建阶段是:1) 组装:1 天(黄色)2) 初步分析:1 天(紫色)3) 深入分析:7 天(绿色)4) 运输:1 天(红色)
周末或节假日不进行任何工作。周六和周日由黑色单元格表示,假期由橙色单元格表示,并具有十字形图案。该宏旨在使用以下 if then 语句跳过这些假期:
Dim i As Integer
i = Analysis days
for i = 1 to 7
ActiveCell.Select
If Selection.Interior.Pattern = x1CrissCross And Selection.Interior.Color = orange Then
ActiveCell.Offset(0, 1).Select
Else: ActiveCell.Select
End If
If Selection.Interior.Color = black Then
ActiveCell.Offset(0, 2).Select
Else: ActiveCell.Select
End If
告诉宏跳过周六和周日的 If Then 语句每次都有效。但是,告诉宏跳过假期的语句仅在部分时间有效,如果假期持续时间超过几天(圣诞节假期持续 9 天),宏会插入贯穿整个假期的生产工作日。我发现将上述语句直接复制并粘贴到另一个下方似乎可以快速解决该问题。但我确信必须有一种更有效的方法来做到这一点。有谁知道我可以解决问题而不必多次复制和粘贴相同的代码行的方法?
提前致谢!
【问题讨论】:
-
这很有野心^_^;
-
手工上色很乏味,但可能远没有宏所需的逻辑那么乏味?
-
啊,我高度建议您通读How to avoid
.Select,它会为您省去很多麻烦,并有助于了解VBA的工作原理/思考方式. -
您是否在模块顶部使用了
Option Explicit?我认为x1CrissCross应该是xlCrissCross或xlPatternCrissCross