Excel 2010 VBA afetando apenas a última linha no intervalo

1

Eu tenho algum código VBA escrito no Excel 2010 para forçar o preenchimento em torno das linhas em uma tabela, mas parte do código afeta apenas a última linha do intervalo. Aqui está o código completo:

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

Dado cada vez que eu corro, toda a faixa autofits a altura da linha, parece que o problema está apenas dentro do loop for-each. Tudo incluído nesse loop funciona muito bem para a última linha no intervalo, mas é isso. Nenhuma outra linha é afetada por uma das duas alterações reais no loop (alinhamento vertical e preenchimento).

O arquivo .xlsm inteiro é uma pasta de trabalho simples de uma folha (excluída as outras duas folhas padrão). O conteúdo é apenas uma tabela com estilo padrão, começando em A1 com cabeçalhos de coluna e ordenação ativada, sem funções, mas adicionando na data atual.

Eu tenho alguma experiência em programação, mas nenhuma em VBA (ou qualquer outro VB). Qualquer ajuda seria muito apreciada!

    
por PCI-J 18.02.2014 / 19:38

1 resposta

1

O problema não está no seu loop, está no seu rng -

Quando você set rng = range("A2").end(xlDown) está definindo rng para a última célula que é preenchida de A2. Ou seja, você está selecionando apenas uma célula.

Tente -

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

Isso funciona bem -

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

Mas isso também acontece -

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

Além disso, apenas uma nota, mas você não precisa .select no seu código para erow , a menos que o restante do loop seja selection.verticalalignment etc.

Também é melhor evitar .select em geral e codificar bastante os intervalos, mas isso não é nem aqui nem lá.

    
por 18.02.2014 / 20:12