【问题标题】:Shifting a merged cell down向下移动合并的单元格
【发布时间】:2014-03-09 06:12:26
【问题描述】:

我正在编写一个 VBA 脚本,它将向下移动一个合并的单元格。当它执行此操作时,会出现一个弹出框,警告用户此操作将取消合并合并的单元格。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("A28")) Is Nothing Then
    Range("c28").Insert Shift:=xlDown
End If

我希望发生两件事中的一件。

A.始终自动接受是,因此不会向用户显示弹出窗口。 (插入后我会在 VBA 中重新合并)

B.有没有办法在不取消合并的情况下向下移动。

【问题讨论】:

  • 你是否合并了 A28C28??
  • 对于案例“A”,您可以在子的开头使用Application.DisplayAlerts = False,最后使用Application.DisplayAlerts = True
  • C28:D28 是在双击时向下移动的合并单元格。对此感到抱歉。
  • @Josh,你有没有试过像我上面的评论那样使用Application.DisplayAlerts = False
  • @Josh,顺便说一句,你打算改变什么?只有C 列或整行中的单元格?

标签: vba excel merge


【解决方案1】:

如果您不知道具体合并了哪些单元格,可以使用以下方法:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Me.Range("A28")) Is Nothing Then
        Application.DisplayAlerts = False
        Me.Range("c28").MergeArea.Insert Shift:=xlDown
        Application.DisplayAlerts = True
    End If
End Sub

但请注意,第 28 行以下的合并区域也可以通过此操作取消合并。例如,如果说单元格 B30:F30 被合并,上面的代码将导致它们取消合并。

【讨论】:

    【解决方案2】:

    根据您的 cmets,这应该可以工作并避免警告:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Not Intersect(Target, Range("A28")) Is Nothing Then
            Range("c28:d28").Insert Shift:=xlDown
        End If
    End Sub
    

    如果您仍然收到警告,请尝试以下操作:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Not Intersect(Target, Range("A28")) Is Nothing Then
            Application.DisplayAlerts = False
            Range("c28:d28").Insert Shift:=xlDown
            Application.DisplayAlerts = True
        End If
    End Sub
    

    【讨论】:

    • 我试过了,没用。警告出现了。
    最近更新 更多