我做了一个简短的VBA代码,该代码基本上只是在单元格内自动拟合文本/内容。我记录了此宏,然后对其进行了重新制作,以使代码可以遍及整个工作表:
Sub Macro3() Dim lastRowIndex As Integer Dim rowIndex As Integer lastRowIndex = 2600For rowIndex = 0 To lastRowIndex If ActiveSheet.Cells(rowIndex, 1).Value <> "" Then If ActiveSheet.Rows(rowIndex).RowHeight < 10.7 Then If ActiveSheet.Rows(rowIndex).RowHeight > 8 Then ActiveSheet.Rows(rowIndex).Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Rows.AutoFit End If End If End If Next rowIndex
End Sub
应用程序在IF条件下停止。它们在那里是因为我不想影响所有单元,只是我需要修改的那些单元。
当我尝试运行此代码时,它给我一个运行时错误“ 1004”-应用定义或对象定义的错误。我不知道为什么...
我尝试将Option Explicit放在代码上方,因为我在某处阅读了该内容,然后为您提供了有关该错误的更详细的信息,但这似乎也不起作用。我以前从未真正使用过VBA,所以不知道发生错误的原因是什么。
(为什么上面的代码的一部分向左移动?我无法修复它)
答案 0 :(得分:0)
CELLS()索引从1开始,因此:
For rowIndex = 1 To lastRowIndex
(可能还有其他错误。)
答案 1 :(得分:0)
Option Explicit
With
语句中,然后在其中使用点运算符vbNullString
而不是空字符串文字""
可以更快地进行比较If
条件合并为一行以减少嵌套并提高可读性With
语句保留对当前行的引用Long
而不是Integer
,将来可能会有更大的数字溢出的风险lastRowIndex
是一个常量,因此应这样声明代码:
Option Explicit
Public Sub FormatRows()
Const lastRowIndex As Long = 2600
Dim rowIndex As Long
With ThisWorkbook.Worksheets("Sheet1")
For rowIndex = 1 To lastRowIndex
If Not .Cells(rowIndex, 1).Value <> vbNullString Then
If .Rows(rowIndex).RowHeight > 8 And .Rows(rowIndex).RowHeight < 10.7 Then
With .Rows(rowIndex)
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.AutoFit
End With
End If
End If
Next
End With
End Sub