您好,最近有人在我之前的一个问题中的评论主题中发布了此内容。帖子本身显示了删除合并的单元格并将其替换为“中央跨选择”的代码
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
答案 0 :(得分:1)
您的子过程未包含在可用的“宏”中,因为它具有非可选的,不变的参数。
尝试使用可选的变量类型参数,该参数可以使用,或者如果省略,则用ActiveSheet(我假设按钮处于打开状态)填充。
Sub fixMergedCells(Optional sh As Variant)
If IsMissing(sh) Then Set sh = ActiveSheet
sh.Cells.UnMerge
End Sub
IsMissing仅可与可选的变量类型参数一起使用。如果可选参数是变量类型,则带有可选参数的子过程仅列为可分配给按钮的“宏”。