VBA SpecialCells宏错误

时间:2018-08-16 08:14:36

标签: excel vba excel-vba

我当前正在使用以下代码自动将表格行中的数字,公式和文本居中对齐,但选择的第一列(如果是文本则左对齐,如果不是文本则居中对齐)。

但是,令人讨厌的是,如果我仅选择一行,则该宏将开始针对所选内容上方和下方的每个单元格运行。有办法解决这个问题吗?

此外,当前宏一旦运行完毕,它就会在所选内容的第一列上结束。有没有一种方法可以使它以我开始的选择作为结束(即,如果我选择了单元格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 - This is an example table I start with

我选择前两行:

Pic2 - I select the first two rows

效果很好,第一行在第一列中包含一个数字,因此它居中对齐;第二行在第一列中具有文本,因此它向左对齐-到目前为止很好:

Pic3 - And it works perfectly, the first row contains a number in the first column so it aligns centrally, and the second row has text in the first column so it aligns to the left - so far so good

但是,如果我在此行上运行宏:

Pic4 - But, if I run the macro on this row:

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

Pic5 - Suddenly all cells with text align to the left, regardless of whether I selected them or not

1 个答案:

答案 0 :(得分:1)

类似这样的东西可以处理一行的特殊情况:

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