通过选择中心消除合并的单元格

时间:2018-07-03 15:15:36

标签: vba merge

您好,最近有人在我之前的一个问题中的评论主题中发布了此内容。帖子本身显示了删除合并的单元格并将其替换为“中央跨选择”的代码

https://codereview.stackexchange.com/questions/197726/getting-rid-of-merged-cells/197730#197730

我的问题是我似乎无法使代码正常工作。我试过了一下代码,但是遇到了两个问题。主要是:

Sub fixMergedCells(sh As Worksheet)

及以后的

Set used = sh.UsedRange

我不太了解,他们似乎阻止了我将其用作宏按钮。否则,对于该行,我似乎会收到一条调试提示,提示“对象'Range'的方法'UnMerge'失败”

 .UnMerge

您能帮我理解我似乎无法掌握的含义吗?

这是我其他帖子中的原始代码:

Sub fixMergedCells(sh As Worksheet)
'replace merged cells by Center Acroos Selection
'high perf version using a hack: https://stackoverflow.com/a/9452164/78522
    Dim c As Range, used As Range
    Dim m As Range, i As Long
    Dim constFla: constFla = Array(xlConstants, xlFormulas)

    Set used = sh.UsedRange
    For i = 0 To 1  '1 run for constants, 1 for formulas
        Err.Clear
        On Error Resume Next
        Set m = Intersect(used.Cells.SpecialCells(constFla(i)), used.Cells.SpecialCells(xlBlanks))
        On Error GoTo 0
        If Not m Is Nothing Then
            For Each c In m.Cells
                If c.MergeCells Then
                    With c.MergeArea
                        'Debug.Print .Address
                        .UnMerge
                        .HorizontalAlignment = xlCenterAcrossSelection
                    End With
                End If
            Next c
        End If
    Next i
End Sub

Sub test_fixMergedCells()
    fixMergedCells ActiveSheet
End Sub

1 个答案:

答案 0 :(得分:1)

您的子过程未包含在可用的“宏”中,因为它具有非可选的,不变的参数。

尝试使用可选的变量类型参数,该参数可以使用,或者如果省略,则用ActiveSheet(我假设按钮处于打开状态)填充。

Sub fixMergedCells(Optional sh As Variant)

    If IsMissing(sh) Then Set sh = ActiveSheet

    sh.Cells.UnMerge

End Sub

IsMissing仅可与可选的变量类型参数一起使用。如果可选参数是变量类型,则带有可选参数的子过程仅列为可分配给按钮的“宏”。