Macro para hacer historial de dos variables externas de excel y graficar los datos

escribo desde Cúcuta / Colombia

Mi problema es el siguiente, tengo un libro de excel el cual recopila informacion de unas variables externas, con estos datos debo crear un historial con respecto al tiempo, lo cual realizo con la siguiente macro

Sub Fila()
Application.ScreenUpdating = False
On Error Resume Next
alertTime = Now + TimeValue("00:00:10")
Application.OnTime alertTime, "Fila"
 If Sheets("ConexionPLC").Range("b9") = "1" Then
 Application.ScreenUpdating = False
Sheets("Datos").Range("a20") = "Estado"
Sheets("Datos").Range("b20") = "IdOperario"
Sheets("Datos").Range("a20") _
.End(xlDown).End(xlDown).End(xlUp). _
Offset(1, 0).Value = Sheets("ConexionPLC").Range("c9").Value
Sheets("Datos").Range("b20") _
.End(xlDown).End(xlDown).End(xlUp). _
Offset(1, 0).Value = Sheets("ConexionPLC").Range("c4").Value
    ElseIf Sheets("ConexionPLC").Range("b9") = "2" Then
    Application.ScreenUpdating = False
Sheets("Datos").Range("a20") _
.End(xlDown).End(xlDown).End(xlUp). _
Offset(1, 0).Value = "'"
Sheets("Datos").Range("b20") _
.End(xlDown).End(xlDown).End(xlUp). _
Offset(1, 0).Value = "'"
 Else
'    Sheets("Sheet2").Columns("A:D").ClearContents
    End If
End Sub

 Este macro se ejecuta cada X tiempo debajo de  celdas A20 y B20, todo hasta el momento lo realiza bien, lo que necesito que haga es que al momento de la instrucción

ElseIf Sheets("ConexionPLC"). Range("b9") = "2" Then

la cual se ejecuta una sola vez ya que el valor de b9 que es 2 cambia a 0 correctamente, en vez de agregar " ' " en el historial de ambas variables, agregue una celda en blanco, sin nada, vacía.

Sheets("Datos").Range("a20") .End(xlDown).End(xlDown).End(xlUp). Offset(1, 0).Value = "'"
Sheets("Datos").Range("b20") .End(xlDown).End(xlDown).End(xlUp). Offset(1, 0).Value = "'"

Y cuando el valor de b9 cambie a 1 para volver a crear el historial deje esa celda en blanco, sin nada, vacía. Y continué en la siguiente celda vacía, y de ahí en adelante siga agregando datos consecutivamente, como en la siguiente imagen

puesto que debo graficar dichas variables y NECESITO QUE SEA ALGO ASI "ejemplo"

El codigo completo que les presente actualmente me esta agregando una comilla simple que a la vista pareciera una celda vacia, pero al momento de graficar los valores me genera LA SIGUIENTE CURVA ERRADA para mi proyecto, la cual es la siguiente

He probado agregando cualquier cantidad de letras o codigos a estas casillas para que no la tome (#N/A), y de igual manera me genera la grfica mala, SI en mi código dejo un espacio en blanco en vez de la comillas simple o mando a dar el salto dos veces (Offset(2, 0)), al momento de ejecutar el resto del codigo siempre me sobreescribe el ultimo valor y no me genera un historial

1 Respuesta

Respuesta
1

H o l a:

Intenta con lo siguiente

Sub Fila()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    On Error Resume Next
    alertTime = Now + TimeValue("00:00:10")
    Application.OnTime alertTime, "Fila"
    '
    Sheets("Datos").Range("A20") = "Estado"
    Sheets("Datos").Range("B20") = "IdOperario"
    '
    If Sheets("ConexionPLC").Range("B9") = "1" Then
        f = 1
    ElseIf Sheets("ConexionPLC").Range("B9") = "2" Then
        f = 2
    Else
        '    Sheets("Sheet2").Columns("A:D").ClearContents
    End If
    u = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Datos").Range("A" & u + f) = Sheets("ConexionPLC").Range("C9").Value
    Sheets("Datos").Range("B" & u + f) = Sheets("ConexionPLC").Range("C4").Value
End Sub

Realiza tus pruebas y me comentas.

Si te funciona, recuerda valorar la respuesta.

¡Gracias!

Solo debí agregarle mi código completo para que funcionara perfecto, gracias de ante mano y le comparto el código por si alguien más le pudiese servir

Sub Historial()
    Application.ScreenUpdating = False
    On Error Resume Next
    alertTime = Now + TimeValue("00:00:10")
    Application.OnTime alertTime, "Historial"
    If Sheets("ConexionPLC").Range("B9") = "1" Then
        f = 2
    Sheets("Datos").Range("a20") = "Estado"
    Sheets("Datos").Range("b20") = "IdOperario"
    Sheets("Datos").Range("c20") = "Fecha"
    Sheets("Datos").Range("d20") = "Hora"
    Sheets("Datos").Range("e20") = "Temperatura"
    Sheets("Datos").Range("f20") = "Peso Humedo"
    Sheets("Datos").Range("g20") = "Tiempo"
    Sheets("Datos").Range("h20") = "Peso Seco"
    Sheets("Datos").Range("i20") = "Humedad"
    Sheets("Datos").Range("j20") = "unit"
    Sheets("Datos").Range("k20") = "Tipo Muestra"
    Sheets("Datos").Range("l20") = "Cod.Material"
    Sheets("Datos").Range("m20") = "LoteSAP"
    Sheets("Datos").Range("n20") = "#"
    u = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Datos").Range("A" & u + f) = Sheets("ConexionPLC").Range("C9").Value
    Sheets("Datos").Range("B" & u + f) = Sheets("ConexionPLC").Range("C4").Value
    Sheets("Datos").Range("C" & u + f) = Now
    Sheets("Datos").Range("D" & u + f) = Now
    Sheets("Datos").Range("E" & u + f) = Sheets("ConexionPLC").Range("C1").Value
    Sheets("Datos").Range("F" & u + f) = Sheets("ConexionPLC").Range("C3").Value
    Sheets("Datos").Range("G" & u + f) = Sheets("ConexionPLC").Range("C8").Value
    Sheets("Datos").Range("H" & u + f) = "'"
    Sheets("Datos").Range("I" & u + f) = Sheets("ConexionPLC").Range("C2").Value
    Sheets("Datos").Range("J" & u + f) = "%MC"
    Sheets("Datos").Range("K" & u + f) = "DESCARGUE"
    Sheets("Datos").Range("L" & u + f) = Sheets("ConexionPLC").Range("C7").Value
    Sheets("Datos").Range("M" & u + f) = Sheets("ConexionPLC").Range("C6").Value
    Sheets("Datos").Range("N" & u + f) = Sheets("ConexionPLC").Range("C7").Value
    ElseIf Sheets("ConexionPLC").Range("B9") = "2" Then
        f = 1
    u = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Datos").Range("A" & u + f) = "'"
    Sheets("Datos").Range("B" & u + f) = "'"
    Sheets("Datos").Range("C" & u + f) = "'"
    Sheets("Datos").Range("D" & u + f) = "'"
    Sheets("Datos").Range("E" & u + f) = Sheets("ConexionPLC").Range("C1").Value
    Sheets("Datos").Range("F" & u + f) = "'"
    Sheets("Datos").Range("G" & u + f) = Sheets("ConexionPLC").Range("C8").Value
    Sheets("Datos").Range("H" & u + f) = "'"
    Sheets("Datos").Range("I" & u + f) = Sheets("ConexionPLC").Range("C2").Value
    Sheets("Datos").Range("J" & u + f) = "%MC"
    Sheets("Datos").Range("K" & u + f) = "'"
    Sheets("Datos").Range("L" & u + f) = "'"
    Sheets("Datos").Range("M" & u + f) = "'"
    Sheets("Datos").Range("N" & u + f) = "'"
    ElseIf Sheets("ConexionPLC").Range("B9") = "3" Then
        f = 1
     u = Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Datos").Range("A" & u + f) = Sheets("ConexionPLC").Range("C9").Value
    Sheets("Datos").Range("B" & u + f) = "'"
    Sheets("Datos").Range("C" & u + f) = "'"
    Sheets("Datos").Range("D" & u + f) = "'"
    Sheets("Datos").Range("E" & u + f) = Sheets("ConexionPLC").Range("C1").Value
    Sheets("Datos").Range("F" & u + f) = "'"
    Sheets("Datos").Range("G" & u + f) = Sheets("ConexionPLC").Range("C8").Value
    Sheets("Datos").Range("H" & u + f) = Sheets("ConexionPLC").Range("C10").Value
    Sheets("Datos").Range("I" & u + f) = Sheets("ConexionPLC").Range("C2").Value
    Sheets("Datos").Range("J" & u + f) = "%MC"
    Sheets("Datos").Range("K" & u + f) = "'"
    Sheets("Datos").Range("L" & u + f) = "'"
    Sheets("Datos").Range("M" & u + f) = "'"
    Sheets("Datos").Range("N" & u + f) = "'"
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas