Como puedo pegar valores en VBA

Tengo una macro hecha por usted pero lo que quiero es que pegue el valor que esta en la celda y no lo hace ya que la celda que copio tiene formula, también como es que puedo tener la secuencia ya que tengo enumerados mis libros de Excel pero pega el valor por ejemplo del Libro2, Libro5, Libro3, etc. Y quiero que vaya del Libro 1 al Libro 10 esto es lo que pongo:

Sub Libros()
'Lee archivos del directorio y Copia la hoja 1
'Por.Dam
Application.ScreenUpdating = False
ruta = ThisWorkbook.Path
ChDir ruta
archi = Dir("*.xl*")
Set h1 = ThisWorkbook.Sheets("hoja1")
On Error Resume Next
Do While archi <> ""
    If InStr(1, archi, "nuevo") = 0 Then
        Workbooks.Open archi
        If Err.Number = 0 Then
            Sheets.Select
            Range("O20").Copy _
            h1.Range("B" & h1.Range("B1").SpecialCells(xlLastCell).Row + 1)
        Else
            Err.Number = 0
        End If
        Application.DisplayAlerts = False
        Workbooks(archi).Close
        Application.DisplayAlerts = True
    End If
    archi = Dir()
Loop
End Sub

1 respuesta

Respuesta
2

Cambia el código por el siguiente, revisa que al principio de todo el código quede la declaración de la variable nombres

Dim nombres As New Collection
'
Sub Libros()
'Lee archivos del directorio y Copia la hoja 1
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'On Error Resume Next
    '
    Set nombres = Nothing
    ruta = ThisWorkbook.Path
    ruta = "C:\trabajo\"
    ChDir ruta
    archi = Dir("*.xl*")
    Set h1 = ThisWorkbook.Sheets("hoja1")
    Do While archi <> ""
        If InStr(1, archi, "nuevo") = 0 Then
            agregar archi
        End If
        archi = Dir()
    Loop
    '
    For Each n In nombres
        Workbooks.Open n
        werr = Err.Number
        If Err.Number = 0 Or Err.Number = 13 Then
            h1.Range("B" & h1.Range("B1").SpecialCells(xlLastCell).Row + 1) = Sheets(1).Range("O20")
        End If
        Err.Number = 0
        Workbooks(n).Close
    Next
    MsgBox "Fin"
End Sub
'
Sub agregar(dato)
    'por.DAM agrega los datos únicos y en orden alfabético
    For i = 1 To nombres.Count
        Select Case StrComp(nombres(i), dato, vbTextCompare)
        Case 0: Exit Sub 'ya existe, no lo agrega
        Case 1: nombres.Add dato, Before:=i: Exit Sub 'agrega antes
        End Select
    Next
    nombres.Add dato 'lo agrega al final
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Gracias,  solo que pongo en la declaración la variable nombres pero me aparece el error 76

Crea un nuevo módulo. Copia todo el código en el nuevo módulo

Ejecuta la macro y dime en qué línea se detiene

Se pone una flecha amarilla en  ChDir ruta

Borra esta línea de la macro

ruta = "C:\trabajo\"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas