Tengo un libro de trabajo que tiene varias hojas de trabajo que varían en nombre, pero la estructura de contenido de cada hoja sigue siendo la misma. Solo hay un nombre de hoja que siempre es constante pie.

Estoy tratando de aplicar una fórmula en la celda N2 y luego copiar la fórmula a la última fila activa en todas las hojas de trabajo, excepto la que se llama pie El código que tengo hasta ahora funciona para un bucle pero luego aparece un error "Falló el método de Autocompletar de clase de rango" He usado

Lastrow = Range("M" & Rows.Count).End(xlUp).Row

Para determinar la última fila ya que la columna M siempre está completa. Cualquier ayuda para completar esto sería muy apreciada. El código que tengo es:

Sub ConcatForm()

Dim wSht As Worksheet

Lastrow = Range("M" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For Each wSht In Worksheets
    If wSht.Name <> "Pie" Then
        wSht.Range("N2").FormulaR1C1 = "=CONCATENATE(RC[-3],RC[-2],RC[-1])"
        wSht.Range("N2").AutoFill Destination:=Range("N2:N" & Lastrow)
    End If
Next wSht

Application.ScreenUpdating = True

End Sub
1
Andybrute 5 mar. 2017 a las 18:36

2 respuestas

La mejor respuesta

Solo estabas a una wSht referencia del objetivo:

Sub ConcatForm()
    Dim wSht As Worksheet

    lastRow = Range("M" & Rows.count).End(xlUp).row '<--| without explicit worksheet qualification it will reference a range in the "active" sheet
    Application.ScreenUpdating = False
    For Each wSht In Worksheets
        If wSht.Name <> "Pie" Then
            wSht.Range("N2").FormulaR1C1 = "=CONCATENATE(RC[-3],RC[-2],RC[-1])"
            wSht.Range("N2").AutoFill Destination:=wSht.Range("N2:N" & lastRow) '<--| this will reference a range in 'wSht' worksheet
        End If
    Next
    Application.ScreenUpdating = True
End Sub
0
user3598756 5 mar. 2017 a las 16:52

Utilice el siguiente sub ...

Sub ConcatForm()
    Dim wSht As Worksheet

    Lastrow = Range("A" & Rows.Count).End(xlUp).Row
    Application.ScreenUpdating = False
    For Each wSht In Worksheets
    With wSht
        If .Name <> "Pie" Then
            .Select
            .Range("N2").FormulaR1C1 = "=CONCATENATE(RC[-3],RC[-2],RC[-1])"
            .Range("N2").AutoFill Destination:=Range("N2:N" & Lastrow)
        End If
    End With
    Next wSht

    Application.ScreenUpdating = True

End Sub
-2
Harun24HR 5 mar. 2017 a las 15:59