Soy nuevo en VBA y macros. He estado tropezando bastante decentemente, pero me he encontrado con este problema y no estoy seguro de cómo modificar el código.
Necesito que el usuario pueda ingresar un valor (número) para buscar en toda la hoja de trabajo, luego, una vez que se encuentre, copie y pegue en la siguiente celda vacía en la columna B en otra hoja en la misma hoja de trabajo.
Se pone cada vez menos donde quiero que esté.
Cualquier ayuda sería apreciada.
Sub Reference_Lookup_Paste()
' Written by Barrie Davidson
Dim datatoFind
Dim sheetCount As Integer
Dim counter As Integer
Dim currentSheet As Integer
Application.ScreenUpdating = False
On Error Resume Next
currentSheet = ActiveSheet.Index
datatoFind = InputBox("Please enter the Reference Number.")
If datatoFind = "" Then Exit Sub
sheetCount = ActiveWorkbook.Sheets.count
If IsError(CDbl(datatoFind)) = False Then datatoFind = CDbl(datatoFind)
For counter = 1 To sheetCount
Sheets(counter).Activate
Cells.Find(What:=datatoFind, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
If ActiveCell.Value = datatoFind Then Call Reference_Move
On Error Resume Next
Next counter
If ActiveCell.Value <> datatoFind Then
MsgBox ("Value not found")
Sheets(currentSheet).Activate
End If
End Sub
Sub Reference_Move()
Selection.Copy
Sheets("Service-Warranty").Select
Dim r1 As Range, r2 As Range
Set r1 = Intersect(Range("B:B"), Cells.SpecialCells(xlCellTypeBlanks))
Set r2 = Cells(Rows.count, "B").End(xlUp).Offset(1, 0)
If r1 Is Nothing Then
r2.Select
Else
r1(1).Select
End If
ActiveSheet.Paste
End Sub
Aquí está la llamada si ActiveCell.Value = datatoFind
Sub Reference_Move()
Selection.Copy
Sheets("Service-Warranty").Select
Dim r1 As Range, r2 As Range
Set r1 = Intersect(Range("B:B"), Cells.SpecialCells(xlCellTypeBlanks))
Set r2 = Cells(Rows.count, "B").End(xlUp).Offset(1, 0)
If r1 Is Nothing Then
r2.Select
Else
r1(1).Select
End If
ActiveSheet.Paste
End Sub
Actualización: ahora encontrará el valor y lo pegará en la columna adecuada, pero pegará 4 celdas en lugar de solo una, y cuando no se encuentren los datos, pegará lo que esté en el portapapeles.
Sub Reference_Lookup_Paste()
' Written by Barrie Davidson
Dim datatoFind
Dim sheetCount As Integer
Dim counter As Integer
Dim currentSheet As Integer
Application.ScreenUpdating = False
On Error Resume Next
currentSheet = ActiveSheet.Index
datatoFind = InputBox("Please enter the Reference Number.")
If datatoFind = "" Then Exit Sub
sheetCount = ActiveWorkbook.Sheets.count
If IsError(CDbl(datatoFind)) = False Then datatoFind = CDbl(datatoFind)
For counter = 1 To sheetCount
Sheets(counter).Activate
Cells.Find(What:=datatoFind, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
If ActiveCell.Value = datatoFind Then Selection.Copy
Sheets("Service-Warranty").Select
Range("B1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Next counter
If ActiveCell.Value <> datatoFind Then
MsgBox ("Value not found")
Sheets(currentSheet).Activate
End If
End Sub