Избавляемся от объединенных ячеек с центром по выделению - PullRequest
0 голосов
/ 03 июля 2018

Здравствуйте. Недавно кто-то опубликовал это в ветке комментариев на одном из моих предыдущих вопросов. Сам пост показывает код для удаления объединенных ячеек и замены их на Central Across Selection

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

Моя проблема в том, что я не могу заставить код работать. Я попытался дать код, но у меня две проблемы с ним. Прежде всего:

Sub fixMergedCells(sh As Worksheet)

и позже

Set used = sh.UsedRange

Что я не совсем понимаю, и они, кажется, мешают мне применять его как кнопку макроса. В противном случае мне кажется, что я получаю подсказку отладки, в которой говорится: «Метод« UnMerge »объекта« Range »не выполнен» в отношении строки:

 .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 голосов
/ 03 июля 2018

Ваша подпроцедура не указана в доступных макросах, поскольку в ней есть необязательный, не вариантный параметр.

Попробуйте использовать необязательный параметр типа варианта, который можно использовать или, если он не указан, заполнить ActiveSheet (который, как я полагаю, кнопка включена).

Sub fixMergedCells(Optional sh As Variant)

    If IsMissing(sh) Then Set sh = ActiveSheet

    sh.Cells.UnMerge

End Sub

IsMissing может использоваться только с необязательными параметрами типа варианта. Подпроцедуры с необязательными параметрами перечислены как доступные «макросы», которые можно назначить кнопке, если необязательным параметром является тип варианта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...