繁体   English   中英

VBA SpecialCells 宏错误

[英]VBA SpecialCells Macro bug

我目前正在使用以下代码自动居中对齐表格行中的数字、公式和文本,除了选择中的第一列,如果它是文本,则向左对齐,如果不是,则居中对齐。

然而,令人讨厌的是,如果我只选择一行,宏就会开始为所选内容上方和下方的每个单元格运行。 有没有办法来解决这个问题?

此外,目前一旦宏完成运行,它就会在选择的第一列结束。 有没有办法让它以我开始的选择结束(即,如果我选择了单元格 A1:D1,一旦运行完毕,当前选定的单元格将是 A1,但我希望它仍然突出显示 A1:D1 )。

如果有任何不清楚的地方,请见谅

Sub Test_align_left()
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With

    Selection.Columns(1).Select

    On Error Resume Next

    With Selection
        .SpecialCells(xlCellTypeConstants, xlTextValues).HorizontalAlignment = xlLeft
        .SpecialCells(xlCellTypeFormulas, xlTextValues).HorizontalAlignment = xlLeft
    End With
End Sub

这是我开始的示例表:

Pic1 - 这是我开始的示例表

我选择前两行:

Pic2 - 我选择前两行

它工作得很好,第一行在第一列中包含一个数字,因此它居中对齐,第二行在第一列中有文本,因此它向左对齐 - 到目前为止一切顺利:

Pic3 - 它工作得很好,第一行在第一列中包含一个数字,因此它居中对齐,第二行在第一列中有文本,因此它向左对齐 - 到目前为止一切顺利

但是,如果我在这一行运行宏:

Pic4 - 但是,如果我在这一行运行宏:

突然所有带有文本的单元格都向左对齐,无论我是否选择了它们:

Pic5 - 突然所有带有文本的单元格都向左对齐,无论我是否选择它们

像这样处理一行的特殊情况:

Sub Test_align_left()
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter

        With .Columns(1)
            If .Cells.Count > 1 Then

                On Error Resume Next
                .SpecialCells(xlCellTypeConstants, xlTextValues).HorizontalAlignment = xlLeft
                .SpecialCells(xlCellTypeFormulas, xlTextValues).HorizontalAlignment = xlLeft
            Else
                If Not IsNumeric(.Value) Then .HorizontalAlignment = xlLeft
            End If

        End With
    End With
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM