Ayuda con código VB

Soy nueva en esto del Visual basic y me han encomendado un trabajo en el que no se me ocurre como solucionarlo:
Tengo una tabla en la que he insertado un CommandButton1 y que cada fila cuenta con un OptionButton. Lo que trato de hacer es que cuando un optionbutton (solo puede estar activo uno) este activado al darle al commandbutton1 busque un archivo excel en una carpeta con el mismo nombre que tiene una casilla de la fila del optionbutton seleccionada y lo abra. En caso de no haber ninguno tiene que crear un excel con el nombre de la casilla para todos los casos que no exista concordancia.
Además algunas casillas de la fila del optionbutton tienen que copiarse a la nueva hoja creada.
Mirando esta página y en buscadores he aprendido a hacer cosas de arriba, pero combinarlas todas es otra historia. Es complicado, os agradeceré mucho si me ayudas
Un saludo
Respuesta
1
En primer lugar te aclaro que si bien los ves a los controles en una fila, en realidad están 'sobre' la hoja por lo que no se pueden relacionar con las filas.
Habrá que buscar otras alternativas. Se me ocurre que si utilizas los controles de la barra Formularios, los controles pueden vincularse a una celda. Entonces el commandbutton debiera buscar el valor de esa celda y según eso saber de qué fila se trata.
Por ej: si la celda fuese J1, que tendrá valores 1, 2, 3 según qué OptionButton fue seleccionado. Y si la lista de datos empieza en fila 2 sabremos que si el valor de J1 es 3 entonces se trata de la fila 4, ¿verdad?
Luego la instrucción será:
nbreCarpeta = cells(fila,col). value  'reemplaza fila por 4 para este ejemplo y col por la que tiene el nombre de la carpeta o libro a buscar.
Saludos y si todo se ha comprendido, no olvides presionar el botón FINALIZAR para concluir esta consulta.
Le he añadido un textbox en la que se pone la fila y con un commandbox para toda la hoja, pero lo que no consigo es pasar el valor de unas celdas al libro que creo, aquí esta parte del código:
`Tiene que copiar
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("b" + TextBox1.Value).Copy
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("c" + TextBox1.Value).Copy
Workbooks.Add Template:= _
"C:Documents and Settings992536EscritorioPruebasContratosPlantilla.xls"
ActiveWorkbook.Sheets("Ficha Revisión").Range("c4").Select
ActiveSheet.Paste
ActiveWorkbook.Sheets("Ficha Revisión").Range("j4").Select
ActiveSheet.Paste
-------------------------------------
Lo que ocurre es que solo funciona con una casilla, si pongo dos diferentes solo tiene en cuenta el ultimo
Un saludo
Lo que pasa es que no podes hacer 2 copy seguidos, cada copy debe ir con su paste...
Podes utilizar instrucciones como:
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("b" + TextBox1.Value).Copy destination:=Workbooks("tu_segundolibro").
Perdón, me equivoqué de botón y se me fue incompleta la respuesta:
Espero que ahora sí se vea completa... je je
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("b" + TextBox1.Value).Copy destination:= Workbooks"tu_segundolibro").Sheets("Ficha Revisión").Range("c4")
Y lo mismo para la 2da copia. Tu segundo libro ya tiene que estar abierto y comprobá que estés en el libro original...
Estoy tratando de hacerlo con este código pero no consigo introducirlo para que funcione, este es el código con el que estoy trabajando:
(La copia de celdas ocurre en el caso negativo del if)
--------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
On Local Error Resume Next
Dim PathContratos, NomArchivo, Buscador As String
'Guardar en una variable la ubicación de los contratos
PathContratos = "C:\Documents and Settings\992536\Escritorio\Pruebas\Contratos\"
'Guardar en otra variable el nombre del archivo. Estoy suponiendo
'que dicho nombre de archivo esta almacenado en la celda A4
NomArchivo = Range("D" + TextBox1.Value) & ".xls"
'En la variable buscador almaceno el path y nombre del archivo
Buscador = PathContratos & NomArchivo
'Luego procedo a buscar el archivo
Buscador = Dir(Buscador)
'Buscador = "" es porque no encontro el archivo
'Buscador = NomArchivo entonces encontro el archivo
If Buscador "" Then
'Si encontro el archivo en el directorio PathContratos
'lo abre. Le pasamos el path completo + el nombre del archivo
Workbooks.Open FileName:=PathContratos & NomArchivo
Else
'Si no encontro el archivo crea un nuevo libro
Workbooks.Add Template:= _
"C:\Documents and Settings\992536\Escritorio\Pruebas\Contratos\Plantilla.xls"
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("b" + TextBox1.Value).Copy destination:= Workbooks"tu_segundolibro").Sheets("Ficha Revisión").Range("c4")
ActiveWorkbook.SaveAs FileName:= _
PathContratos & NomArchivo, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End If
If Err Then
MsgBox "Se ha producido un error, revise el procedimiento"
End If
End Sub
El código que he puesto funciona de la siguiente forma:
Escribo la fila del contrato en el textbox
Le doi al commandbox y busca en una carpeta un archivo con el nombre de una casilla de la fila del contrato buscado.
Si encuentra lo abre, si no lo encuentra lo crea utilizando una plantill, pero aquí quiero que algunas casillas también se copien, por ejemplo el nombre del cliente, pero no consigo hacerlo, lo ultimo que he hecho es esto pero no funciona:
...
Workbooks.Add Template:= _
"C:\Documents and Settings\992536\Escritorio\Pruebas\Contratos\Plantilla.xls"
ActiveWorkbook.Sheets("PROM (BE Alfabét)").Range("b" + TextBox1.Value).Copy destination:= Workbooks"tu_segundolibro").Sheets("Ficha Revisión").Range("c4")
...
perdo, he copiado el tuye lo ultimo que hice que no funcionaba era esto:
Workbooks("plantilla.xls").Sheets("Ficha Revisión").Range("C4").Value = Workbooks("dsfasdfasdfa.xls").Sheets("PROM (BE Alfabét)").Range("B" + TextBox1.Value).Value
Un saludo y gracias por tu tiempo
Lo he conseguido muchas gracias!
Con la instrucción: WorkBooks. Add Template... estás abriendo una plantilla que una vez abierta tiene por nombre: Plantilla1... y ya no te coincide en la instrucción:
WorkBooks("plantilla.xls")...
Debieras modificar esa línea por:
Workbooks("Plantilla1")... ' (sin extensión)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas