Validar datos antes de copiar
Necesito ayuda con un macro para EXCEL profesional plus 2013.
Parto de la base de que yo no tengo ni idea de programación VBA, y lo que voy haciendo es a base de corta pega y modificaciones deductivas, por lo que el código que aquí os pondré, seguramente se podrá hacer mucho más sencillo y eficaz.
Tengo una tabla en la cual ingreso unos datos, y mediante un botón macro los copio a una tabla de registro.
Quisiera que al ejecutar el macro validara que varias celdas contengan información y no estén en blanco antes de copiar, saltando un aviso de que falta información y no se ejecute la copia al registro.
Las celdas en cuestión son: C3 (código), D3(fecha) y después tengo 6 combobox en la que al menos alguno debe contener datos, así como sus casillas relacionadas.
Ejemplo: Combobox1. Me devuelve el valor seleccionado en la casilla G7, y en la celda C7 van (unidades) y D7 (lote). Así hasta el Combobox6 las casillas G12, C12 y D12.
Yo he buscado alternativas por internet y he probado varios macros, pero no consigo hacer lo que quiero. Ahora mismo solo lo tengo con el combobox1, ya que no se hacerlo con la condición de que al menos alguno de los combobox contenga datos (con sus correspondieste casillas de unidades y lote relacionadas). Aun así, lo que tengo tampoco me funciona bien. Tanto el código cliente, como la fecha o el lote, solo quiero que me avise que están vacías, pero que pueda continuar con la macro dejando cualquiera de esas casillas en blanco. La cuestión es que si por ejemplo la fecha y el lote están ambas en blanco, ahora mismo me saltaría el aviso de "falta fecha", y no me avisa de la falta de lote.
Esto es lo que tengo ahora mismo:
Sub Registro()
If Range("G7") = "-" Then
MsgBox ("NO HAY NINGUN PRODUCTO SELECCIONADO")
Exit Sub
Else
If Range("C7") = "" Then
MsgBox ("NO HAY UNIDADES DE PRODUCTO")
Exit Sub
Else
If Range("C3") = "" Then
MsgBox ("FALTA CODIGO CLIENTE")
Else
If Range("D3") = "" Then
MsgBox ("FALTA FECHA")
Else
If Range("D7") = "" Then
MsgBox ("NO HAY LOTE INTRODUCIDO")
End If
End If
End If
End If
End If
continuar = vbYes
respuesta = MsgBox("¿Desea copiar datos al registro?", vbYesNoCancel)
Select Case respuesta
Case vbYes
Dim filalibre As Integer
filalibre = Sheets("REGISTRO").Range("C65536").End(xlUp).Row + 1
Sheets("REGISTRO").Select
Sheets("REGISTRO").Cells(filalibre, 2) = ActiveSheet.Range("C3")
Sheets("REGISTRO").Cells(filalibre, 3) = ActiveSheet.Range("G3")
Sheets("REGISTRO").Cells(filalibre, 4) = ActiveSheet.Range("D3")
Sheets("REGISTRO").Cells(filalibre, 5) = ActiveSheet.Range("E3")
Select Case ActiveSheet.Range("G7").Value
Case Is = "HTC50"
colx = 6
Case Is = "HTC100"
colx = 8
Case Is = "HTC325"
colx = 10
Case Is = "HTD50"
colx = 12
Case Is = "HTD100"
colx = 14
Case Is = "HTD325"
colx = 16
Case Is = "HTD925"
colx = 18
Case Is = "HS50"
colx = 20
Case Is = "HS100"
colx = 22
Case Is = "HS325"
colx = 24
Case Is = "ERIZO"
colx = 26
Case Is = "LT450"
colx = 28
Case Is = "LT2000"
colx = 30
End Select
Sheets("REGISTRO").Cells(filalibre, colx) = ActiveSheet.Range("C7")
Sheets("REGISTRO").Cells(filalibre, colx + 1) = ActiveSheet.Range("D7")
...