首页 > 解决方案 > VBA 定义行高 - 优化

问题描述

我创建了下面的代码,它定义了一系列行的高度,同时检查它们是否为空。

它按预期工作,但是速度非常慢。对于上下文,变量length有 64 行,运行大约需要 15 秒。

有谁知道我如何优化这段代码?

谢谢

sub linhasdim()

' define a altura das linhas da folha planner

Application.ScreenUpdating = False

Dim i As Integer, n As Integer

Sheets(1).Activate ' activa a sheet(1)

Lastrow = Cells(Rows.Count, "O").End(xlUp).Row ' guarda o indice da ultima linha com conteudo da coluna O. Mesmo havendo vazios identifca a ultima linha

Length = Range(Range("O6"), Range("O" & Lastrow)).Rows.Count ' dimensão da coluna O ate a ultima celula com conteudo começando na O6

For i = 1 To Length ' loop na coluna O

    If Range("O6").Offset(i, 0).Value <> "" Then ' se célula O(i) não tem vazio altura = 20

     Range("O6").Offset(i, 0).RowHeight = 20

    Else ' se for vazio altura =3

    Range("O6").Offset(i, 0).RowHeight = 3

    End If

Next i


End Sub

标签: excelvba

解决方案


试试这个简单快速的解决方案。范围内空单元格的行高设置为 20。范围内文本/常量单元格的行高设置为 3

Sub linhasdim()

' define a altura das linhas da folha planner

Application.ScreenUpdating = False

Dim i As Integer, n As Integer

Sheets(1).Activate ' activa a sheet(1)

Lastrow = Cells(Rows.Count, "O").End(xlUp).Row 
' guarda o indice da ultima linha com conteudo da coluna O. _
Mesmo havendo vazios identifca a ultima linha

Range(Range("O6"), Range("O" & Lastrow)). _
SpecialCells(xlCellTypeBlanks).EntireRow.RowHeight = 20

Range(Range("O6"), Range("O" & Lastrow)). _
SpecialCells(xlCellTypeConstants, 23).EntireRow.RowHeight = 3
' thought I wonder why row height the for cells with text is 3 !!
Application.ScreenUpdating = True ' better to reset the value

End Sub

推荐阅读