我当前正在使用以下代码自动将表格行中的数字,公式和文本居中对齐,但选择的第一列(如果是文本则左对齐,如果不是文本则居中对齐)。
但是,令人讨厌的是,如果我仅选择一行,则该宏将开始针对所选内容上方和下方的每个单元格运行。有办法解决这个问题吗?
此外,当前宏一旦运行完毕,它就会在所选内容的第一列上结束。有没有一种方法可以使它以我开始的选择作为结束(即,如果我选择了单元格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
这是我开始的示例表:
我选择前两行:
效果很好,第一行在第一列中包含一个数字,因此它居中对齐;第二行在第一列中具有文本,因此它向左对齐-到目前为止很好:
但是,如果我在此行上运行宏:
突然之间,所有带有文本的单元格都向左对齐,无论我是否选择它们:
答案 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