合并单元格的代码错误

Posted

技术标签:

【中文标题】合并单元格的代码错误【英文标题】: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。 【参考方案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 命令拆分为多个逻辑语句。我会投票给命名范围,因为它简化了您的代码,但如果没有明确的评论,将来有人修改可能会让人感到困惑。

以上是关于合并单元格的代码错误的主要内容,如果未能解决你的问题,请参考以下文章

C#Winform中DataGridView合并单元格的问题?

合并单元格的快捷键

Swing jtable 怎么合并单元格 合并行 合并列

基于列值合并单元格的 VBA 宏

java poi 导出 excel时 ,合并单元格的问题

合并单元格的 GridView