Copiar contenidos de un userform a una hoja excel

Hola
Tengo el siguiente problema, soy nuevo en esto de la programación y estoy utilizando un UserForm donde quiero que se introduzcan datos y guardar estos datos en un hoja de trabajo de excel, bueno el problema que tengo es el siguiente estoy utilizando, tres checkbox, dos combobox con listas establecidas y dos textbox para que se rellenen datos y lo que quiero es que al terminar estos datos y al presionar un botón se rellenen los mismos en la hoja de trabajo que puede ser "Hoja4" como la tengo yo.
El programa que escribí no me funciona porque me dice que "No coinciden los tipos" cuando declaro el combobox por favor si me ayudas muchas gracias
Sheets("Hoja4").Select
Dim valor1 As Double, valor2 As Double, valor3 As Double, valor4 As Double
valor1 = ComboBox1.Value
valor2 = ComboBox2.Value
valor3 = TextBox1.Value
valor4 = TextBox2.Value
Range("A6").Activate
ActiveCell.End(xlDown).Offset(1, 0) = valor1
ActiveCell.End(xlDown).Offset(0, 1) = valor2
ActiveCell.End(xlDown).Offset(0, 2) = valor3
ActiveCell.End(xlDown).Offset(0, 3) = valor4
Range("A1").Activate
End Sub
Quiero que todos los datos rellenados en este userform se trasladen a las celdas, por si acaso de los tres checkbox quiero que solamente copie el que este marcado
en serio muchas gracias

2 Respuestas

Respuesta
1
Te dice que no coinciden los tipos porque has declarado los 4 valores como numéricos, pero el valor que te devuelve el combobox es un string (alfanumérico), si es un numero almacenado como alfanumérico debes devolverlo utilizando una función para convertir el tipo de datos devuelto. O declarar valor1 como string.
valor1 = clng(ComboBox1.Value) o valor1 = cdbl(combobox1.value)
Para los checkbox haz una concatenación de sentencias If, de manera que compruebas el valor de cada checkbox, si este es true (esta marcado), entonces asignas el valor a la celda deseada.
Gracias me ha servido de mucho
Una pregunta más... como puedo hacer para que los dos combobox que tengo estén relacionados, que el segundo dependa del contenido del primero... haber si me explico, que cuando el combobox1 tenga elegida una opción en el combobox2 aparezcan solamente valores asignados a a esa opción
De antemano gracias
eso ya requiere algo mas de codigo, la mejor forma de hacerlo es usando el evento Change del combobox1 y para este caso, mejor que un if, usar un select case
private sub combobox1_change()
combobox2.clear 'borramos el contenido del segundo combobox
select case combobox1.value
case is "opcion 1"
Combobox2. Additem ("opciones del segundo combobox")
Combobox2. Additem("blablaba")
case is "opcion 2"
Combobox2. Additem ...
...
end select
Si te ha servido por favor, valora y cierra la pregunta...
Respuesta
1
Lo de "No coinciden los tipos" es por que estas dimensionando los valores de los ComboBox como Double, que son números de coma flotante. Si los ComboBox contienen es texto debes dimensionarlos como String y si los datos son muy variables dimensionalos como Variant. Para lo de capturar el checkbox marcado, podríamos utilizar un if y capturar el Caption... algo así:
...
Private Sub CommandButton1_Click()
Sheets("Hoja4").Select
Dim valor0 As Variant, valor1 As Variant, valor2 As Variant, valor3 As Variant, valor4 As Variant
If CheckBox1 Then
    valor0 = CheckBox1.Caption
ElseIf CheckBox2 Then
    valor0 = CheckBox2.Caption
Else
    valor0 = CheckBox3.Caption
End If
valor1 = ComboBox1.Value
valor2 = ComboBox2.Value
valor3 = TextBox1.Value
valor4 = TextBox2.Value
Range("A1").Activate
ActiveCell.End(xlDown).Offset(1, 0) = valor0
ActiveCell.End(xlDown).Offset(0, 1) = valor1
ActiveCell.End(xlDown).Offset(0, 2) = valor2
ActiveCell.End(xlDown).Offset(0, 3) = valor3
ActiveCell.End(xlDown).Offset(0, 4) = valor4
Range("A1").Activate
End Sub
...
Éxitos, no olvides calificar y cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas