为什么这仅将格式应用于列A而不是选定的列J

时间:2019-09-27 14:08:23

标签: excel vba

我正在尝试改变列的对齐方式以使阅读更加容易,但是即使im指定了J列,它也始终将格式应用于A列

如果我创建一个新的工作表并针对一个简单的1列工作表运行它,它会很好并且按预期工作。但是我需要它来对抗J列

Sub alternateAlignLeft()
    Columns("J:J").Select
    For rowx = 2 To 1000 Step 2
    Cells(rowx, 1).HorizontalAlignment = xlLeft
    Next
End Sub


Sub alternateAlignRight()
    Columns("J:J").Select
    For rowx = 1 To 1000 Step 2
    Cells(rowx, 1).HorizontalAlignment = xlRight
    Next
End Sub

我需要此代码(仅对J列有效),该代码对A列非常有效。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您通常应尽量避免here中所述的.Select

尝试以下代码:

Sub alternateAlignLeft()
For rowx = 2 To 1000 Step 2
    Cells(rowx, "J").HorizontalAlignment = xlLeft
Next
End Sub

Sub alternateAlignRight()
For rowx = 2 To 1000 Step 2
    Cells(rowx, "J").HorizontalAlignment = xlRight
Next
End Sub

要说明:Cells带有两个参数:RowIndexColumnIndex。因此,您在列1 A上执行了格式化。之前出现的.Select语句实际上根本不会影响此行,因为没有引用Selection

请注意,您还应该对所有Range对象进行限定,如下所示:

ThisWorkbook.Sheets("Sheet1").Cells(rowx, "J").HorizontalAlignment = xlRight

这当然需要根据您的用例进行调整。

答案 1 :(得分:0)

您的Columns("J:J").Select没有任何作用,因为您随后将选择具有以下内容的特定单元格:

 Cells(rowx, 1).HorizontalAlignment = xlLeft

Cells(rowx, 1)表示第1列“ rowx”行上的单元格,即A。

如果希望它为J,则需要将其更改为10:

Cells(rowx, 10).HorizontalAlignment = xlLeft

 Cells(rowx, 10).HorizontalAlignment = xlRight