【问题标题】:Excel - Multiple Cell Ranges error 1004 when using VBAExcel - 使用 VBA 时出现多个单元格区域错误 1004
【发布时间】:2021-03-18 10:42:59
【问题描述】:

我有一行代码可以选择多个单元格区域,如下所示:

Range("B9:M9,B12:M12,B15:M15,B18:M18,B21:M21,B24:M24,B27:M27,B30:M30,B33:M33,R9:AC9,R12:AC12,R15:AC15,R18:AC18,R21:AC21,R24:AC24,R27:AC27,R30:AC30,R33:AC33,AH9:AS9,AH12:AS12,AH15:AS15,AH18:AS18,AH21:AS21,AH24:AS24,AH27:AS27,AH30:AS30,AH33:AS33,AW9:BI9,AW12:BI12,AW15:BI15").Select

但是,看起来我选择了太多单元格,因为我在问题底部的图片中看到了错误(错误 1004)。如果我删除一些选择,它会起作用。

我决定录制一个宏,看看它是如何应对的,它执行了以下代码:

    Union(Range( _
    "AW24:BI24,AW27:BI27,AW30:BI30,AW33:BI33,B9:M9,B12:M12,B15:M15,B18:M18,B21:M21,B24:M24,B27:M27,B30:M30,B33:M33,R9:AC9,R12:AC12,R15:AC15,R18:AC18,R21:AC21,R24:AC24,R27:AC27,R30:AC30,R33:AC33,AH9:AS9,AH12:AS12,AH15:AS15,AH18:AS18,AH21:AS21,AH24:AS24,AH27:AS27" _
    ), Range("AW12:BI12,AW15:BI15,AW18:BI18,AW21:BI21")).Select

但是,当我再次尝试运行代码时,我得到了相同的 1004 错误。非常感谢任何帮助

完整代码如下:

Sub updateSelectedMetric()

currentChosenMetric = Range("A4").Value

Range("B9:M9,B12:M12,B15:M15,B18:M18,B21:M21,B24:M24,B27:M27,B30:M30,B33:M33,R9:AC9,R12:AC12,R15:AC15,R18:AC18,R21:AC21,R24:AC24,R27:AC27,R30:AC30,R33:AC33,AH9:AS9,AH12:AS12,AH15:AS15,AH18:AS18,AH21:AS21,AH24:AS24,AH27:AS27,AH30:AS30,AH33:AS33").Select

'Union(Range( _
'    "AW24:BI24,AW27:BI27,AW30:BI30,AW33:BI33,B9:M9,B12:M12,B15:M15,B18:M18,B21:M21,B24:M24,B27:M27,B30:M30,B33:M33,R9:AC9,R12:AC12,R15:AC15,R18:AC18,R21:AC21,R24:AC24,R27:AC27,R30:AC30,R33:AC33,AH9:AS9,AH12:AS12,AH15:AS15,AH18:AS18,AH21:AS21,AH24:AS24,AH27:AS27" _
'    ), Range("AW12:BI12,AW15:BI15,AW18:BI18,AW21:BI21")).Select

Select Case currentChosenMetric
    Case "Waste (%)", "CiCL <1", "DSODA", "DCODA"
        Selection.NumberFormat = "0.0%"
    Case "UPT", "Sales (U)", "CTF (U)"
        Selection.NumberFormat = "#,##0"
    Case "RoS", "CTF to Sales"
        Selection.NumberFormat = "##.0"
    Case "Sales (£)", "Waste (£)"
        Selection.NumberFormat = "£#,##0"
End Select

Range("A1").Select

结束子

【问题讨论】:

  • 您只能将 255 个字符的字符串传递给 Range。把它分成更短的块。
  • 设置范围的字符串不能超过255个字符。但是,你一直写这样的代码方便吗?不连续范围不能使用一段代码使用算法(待定义)来构建吗?当您手动执行此操作时,我想您有特定的逻辑来执行此操作……为什么需要选择?编辑您的问题并分享显示您最终尝试完成的代码不是更好吗?
  • 附加代码显示选择是根据用户选择的指标修改格式。
  • 是 @Rui 建议的命名范围是一个不错的选择。如果您想通过 VBA 执行此操作,那么我会在 Rows 9 to 33 with Step 3B:MR:ACAH:ASAW:BI 范围内看到一个模式。使用 Union 的简单循环可以解决您的问题;) 上述模式中唯一的异常值是 AW:BI.. 我觉得应该是 AX:BI

标签: excel vba


【解决方案1】:

拆分选择似乎有效...

    Range("R27:AC27,R30:AC30,R33:AC33,AH9:AS9,AH12:AS12,AH15:AS15,AH18:AS18,AH21:AS21,AH24:AS24,AH27:AS27,AH30:AS30,AH33:AS33,AW9:BI9,AW12:BI12,AW15:BI15").Select
Union(Selection, Range("B9:M9,B12:M12,B15:M15,B18:M18,B21:M21,B24:M24,B27:M27,B30:M30,B33:M33,R9:AC9,R12:AC12,R15:AC15,R18:AC18,R21:AC21,R24:AC24")).Select

【讨论】:

  • 录制的宏是如此接近大声笑:) 谢谢你的帮助。
  • 也许您应该考虑使用命名范围以便于访问。 =)
  • 哦,这可能更有意义。感谢您提供额外的想法。
猜你喜欢
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多