Macro para copiar celdas
Amigo recuerda el programa de copiar lo de una celda en una columna de la hoja 2 lo que pasa es que los datos que recibo son del puerto serie del pc el programa funciona bien cuando uno los introduce desde teclado pues porque uno le da enter y se pasan correctamente a la hoja2 no hay alguna posibilidad de que el programa me los copie sin necesidad de darle enter a cada dato que se introduce.
Option Explicit
Dim snCambioB5 As Boolean
Private Sub Worksheet_Activate()
snCambioB5 = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
snCambioB5 = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Copiamos el valor en la hoja 2
If snCambioB5 Then copiaValorB5enHoja2 Cells(5, 2): snCambioB5 = False
' Para que no se mueva de la celda B5 de la Hoja1
Sheets("Hoja1").Select
Cells(5, 2).Select
End Sub
Private Sub copiaValorB5enHoja2(ByVal valorB5)
Dim nLin As Long
If IsNull(valorB5) Or valorB5 = "" Then Exit Sub
' Buscaremos de forma rápida la última línea grabada
' Primero de 1000 en 1000 hasta que no haya nada
nLin = 2
Do While Sheets("Hoja2").Cells(nLin, 2) <> ""
nLin = nLin + 1000
Loop
' Volvemos hacia atras de 25 en 25 hasta que haya una ocupada
Do While Sheets("Hoja2").Cells(nLin, 2) = ""
If nLin > 25 Then nLin = nLin - 25 Else Exit Do
Loop
' Y buscamos de 1 en 1 hacia delante hasta que haya una libre
Do While Sheets("Hoja2").Cells(nLin, 2) <> ""
nLin = nLin + 1
Loop
' nLin contiene el primer número de línea vacío. Guardamos el valor ahí
Sheets("Hoja2").Cells(nLin, 2) = valorB5
Sheets("Temperaturas").Cells(nLin, 3).NumberFormat = "dd-mm-yyyy / hh:mm:ss"
Sheets("Temperaturas").Cells(nLin, 2) = valorB2
End Sub
Gracias
Option Explicit
Dim snCambioB5 As Boolean
Private Sub Worksheet_Activate()
snCambioB5 = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
snCambioB5 = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Copiamos el valor en la hoja 2
If snCambioB5 Then copiaValorB5enHoja2 Cells(5, 2): snCambioB5 = False
' Para que no se mueva de la celda B5 de la Hoja1
Sheets("Hoja1").Select
Cells(5, 2).Select
End Sub
Private Sub copiaValorB5enHoja2(ByVal valorB5)
Dim nLin As Long
If IsNull(valorB5) Or valorB5 = "" Then Exit Sub
' Buscaremos de forma rápida la última línea grabada
' Primero de 1000 en 1000 hasta que no haya nada
nLin = 2
Do While Sheets("Hoja2").Cells(nLin, 2) <> ""
nLin = nLin + 1000
Loop
' Volvemos hacia atras de 25 en 25 hasta que haya una ocupada
Do While Sheets("Hoja2").Cells(nLin, 2) = ""
If nLin > 25 Then nLin = nLin - 25 Else Exit Do
Loop
' Y buscamos de 1 en 1 hacia delante hasta que haya una libre
Do While Sheets("Hoja2").Cells(nLin, 2) <> ""
nLin = nLin + 1
Loop
' nLin contiene el primer número de línea vacío. Guardamos el valor ahí
Sheets("Hoja2").Cells(nLin, 2) = valorB5
Sheets("Temperaturas").Cells(nLin, 3).NumberFormat = "dd-mm-yyyy / hh:mm:ss"
Sheets("Temperaturas").Cells(nLin, 2) = valorB2
End Sub
Gracias
1 respuesta
Respuesta de santiagomf
1