【问题标题】:Code Error for Merged Cells合并单元格的代码错误
【发布时间】:2016-01-02 13:26:26
【问题描述】:

我是新手,需要帮助解决这个问题。我正在尝试在 excel 上使用此代码来更改单元格的颜色和文本,但它不适用于合并的单元格。如何使它适用于合并的单元格?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("$C$17:$C$80")) Is Nothing Then Exit Sub
    Select Case Target
    Case ""
        Target = "Priority 1"
        Target.Interior.ColorIndex = 3
    Case "Priority 1"
        Target = "Priority 2"
        Target.Interior.ColorIndex = 6
    Case "Priority 2"
        Target = "Priority 3"
        Target.Interior.ColorIndex = 45
    Case Else
        Target = ""
        Target.Interior.ColorIndex = 15
    End Select
    Cancel = True
End Sub

【问题讨论】:

  • 如果您描述了“不起作用”的含义,那肯定会有所帮助。什么都没发生?错误信息? (如果是这样,在哪里,在哪条线上?)。作为一种猜测,如果目标结果是多个单元格,您可能需要遍历目标中的每个单元格。
  • 运行时错误'13':类型不匹配
  • 您没有指出返回错误的行。同样,您很可能正在对多个单元格进行操作(合并的单元格将是多个单元格),因此您可能需要循环遍历目标中的每个单元格(或目标与您的范围相交的每个单元格)。
  • 有趣的一个。您能否提及在 cmets 中或通过编辑帖子调用此子程序的代码例程。尽管它有效,但我对这一点不太清楚。
  • 错误突出显示案例“”。 @RonRosenfeld。

标签: excel merge vba


【解决方案1】:

超级接近,只需将一行:Select Case Target改为Select Case Target.Item(1)

完整代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("$C$17:$C$80")) Is Nothing Then Exit Sub

    Select Case Target.Item(1)
    Case ""
        Target = "Priority 1"
        Target.Interior.ColorIndex = 3
    Case "Priority 1"
        Target = "Priority 2"
        Target.Interior.ColorIndex = 6
    Case "Priority 2"
        Target = "Priority 3"
        Target.Interior.ColorIndex = 45
    Case Else
        Target = ""
        Target.Interior.ColorIndex = 15
    End Select
    Cancel = True
End Sub

结果:

你可以在这里看到我有一个从 C23 到 C26 的合并区域

【讨论】:

  • 如果我想将范围更改为几个选定的单元格,我该怎么做? @PortlandRunner C17,C21,C25,C29,C33,C42,C46,C50,C54,C58,C67,C71,C75,C83,C87,C91,C100,M17,M21,M25,M29,M33,M42,M46,M55,M59,M69,M73,M82,M86,W17,W21,W25,W29,AG17,AG21,AG25,AG34,AG38,AG42,AG51,AG55,AG59,AG68,AG72,AG81,AG85,AG89,AG98,AG102,AG106,AG110,AG114,AQ17,AQ21,AQ30,AQ34,AQ43,AQ47,AQ51,AQ60,AQ64,BA17,BA21,BA25,BA29,BA33,BA37,BA46,BA50,BA54,BA58,BA62,BA71,BA75,BA79,BA89,BA93
  • 您应该能够更改相交范围以包括不相交的单元格。例如前三个:Range("C17,C21,C25")
  • 代码不允许我这样做,因为字符太多。
  • 我看到两个选项:1. 使用命名范围,或者,2. 将 intersect 命令拆分为多个逻辑语句。我会投票给命名范围,因为它简化了您的代码,但如果没有明确的评论,将来有人修改可能会让人感到困惑。
猜你喜欢
  • 1970-01-01
  • 2021-03-30
  • 2021-07-26
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 2013-07-05
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多