Excel 2010 VBA 仅影响范围内的最后一行

Excel 2010 VBA 仅影响范围内的最后一行

我有一些用 Excel 2010 编写的 VBA 代码,用于强制填充表格中的行,但部分代码仅影响范围内的最后一行。以下是完整代码:

Private Sub FixRowHeight_Click()
Dim rng As Range
Dim eRow As Excel.Range
Dim padding As Integer
padding = 10
With Worksheets("Issues")
    Set rng = .Range("A2").End(xlDown)
    rng.Select
    .Rows.AutoFit
    For Each eRow In rng.Rows
        eRow.Select
        eRow.VerticalAlignment = xlCenter
        eRow.RowHeight = eRow.RowHeight + padding
    Next eRow
End With
End Sub

考虑到每次运行它时,整个范围都会自动调整行高,看来问题只在于 for-each 循环。该循环中包含的所有内容对于范围内的最后一行都运行正常,但仅此而已。循环中的两个实际更改(垂直对齐和填充)不会影响其他行。

整个 .xlsm 文件是一个简单的单页工作簿(删除了其他 2 个默认工作表)。内容只是一个从 A1 开始的默认样式表,带有列标题和排序功能,没有任何功能,但可以添加当前日期。

我有一些编程经验,但没有 VBA(或任何其他 VB)经验。任何帮助都将不胜感激!

答案1

问题不在于你的循环,而在于你的rng-

当您set rng = range("A2").end(xlDown)将 rng 设置为从 A2 向下填充的最后一个单元格时。也就是说,您只选择一个单元格。

尝试 -

Set rng = Range(Cells(2, 1), Cells(2, 1).End(xlDown))


运行良好 -

Sub FixRowHeight_Click()
Dim rng As Range
Dim padding As Integer
padding = 10
With ActiveSheet
    Set rng = .Range(Cells(2, 1), Cells(2, 1).End(xlDown))
    rng.Rows.AutoFit
    For Each Row In rng
        Row.VerticalAlignment = xlCenter
        Row.RowHeight = Row.RowHeight + padding
    Next
End With
End Sub

但是,这也一样 -

Sub FixRowHeight_Click()
    Range(Cells(2, 1), Cells(2, 1).End(xlDown)).Rows.AutoFit
    For Each Row In Range(Cells(2, 1), Cells(2, 1).End(xlDown))
        Row.VerticalAlignment = xlCenter
        Row.RowHeight = Row.RowHeight + 10
    Next
End Sub

另外,只需注意,但您不需要.select在代码中这样做,erow除非循环的其余部分是selection.verticalalignment等等。

最好.select总体上避免这种情况,而是对范围进行硬编码,但这并不重要。

相关内容