我有一些用 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
总体上避免这种情况,而是对范围进行硬编码,但这并不重要。