Le agradecería que pudiera obtener ayuda sobre un problema al intentar crear una macro vba. Tengo dos libros de trabajo y quiero comparar la columna "N" en el libro de trabajo 1 con la columna "F" en el libro de trabajo 2. Luego, si hay una coincidencia, pase a la siguiente celda hacia abajo si no se encontraron coincidencias. Quiero copiar la siguiente celda después de la columna. "F" en el libro 2. El libro 2 no tendrá el mismo nombre cuando lo reciba cada mañana, pero el nombre del libro siempre comienza con "Copia de", así que creé el siguiente código para seleccionarlo usando un nombre parcial.
For Each ws In ActiveWorkbook.Worksheets
If ws.Name Like "Copy of*" Then
ws.Select
Exit For
End If
Next ws
Incluso si pudiera indicarme la dirección correcta, sería fantástico.
Respuesta1
Esta explicación no es muy clara.
...si hay una coincidencia, pase a la siguiente celda hacia abajo si no se encontraron coincidencias. Quiero copiar la siguiente celda después de la columna "F" en el libro de trabajo 2...
pero prueba algo como esto y modifícalo en consecuencia
Option Explicit
Public Sub CompareWorkBooks()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = GetWSCopy("Copy of*")
If Not ws2 Is Nothing Then
Dim r As Long, cel As Range, found As Variant, ws2lr As Long
optimizeXL True
For r = ws1.UsedRange.Rows.Count To 1 Step -1
Set cel = ws1.Cells(r, ws1.Columns("N").Column)
If Len(cel.Value2) > 0 Then
found = Application.Match(cel.Value2, ws2.UsedRange.Columns("F"), 0)
If Not IsError(found) Then 'a match was found so move next cell down
cel.Offset(1).EntireRow.Insert xlDown
Else 'match not found so copy row from ws1 to first empty row of ws2
ws2lr = ws2.UsedRange.Rows.Count + 1
ws1.UsedRange.Rows(cel.Row).EntireRow.Copy ws2.Cells(ws2lr, 1)
End If
End If
Next
optimizeXL False
End If
End Sub
Private Function GetWSCopy(ByVal wsName As String) As Worksheet
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like wsName Then
Set GetWSCopy = ws
Exit Function
End If
Next
End Function
Public Sub optimizeXL(Optional ByVal settingsOff As Boolean = True)
With Application
.ScreenUpdating = Not settingsOff
.Calculation = IIf(settingsOff, xlCalculationManual, xlCalculationAutomatic)
.EnableEvents = Not settingsOff
End With
End Sub
Además, te refieres a 2 libros de trabajo (archivos),
pero tu código se refiere a hojas de trabajo (pestañas dentro del mismo libro de trabajo).