Utilizar datos introducidos mediante inputbox

Hola!
Estoy haciendo una macro que, entre otras, permite al usuario nombrar al archivo como quiera. Esto lo hago mediante un inputbox de esta forma (en este caso para cambiar el nombre de un archivo existente):
Dim nombrearchivo As String
nombrearchivo = InputBox("Por favor, introduzca el nuevo nombre del archivo.", "Insertar nuevo nombre de archivo", Nombre_sin_extensión)
'Y una vez introducido el nuevo nombre por el usuario, se lo cambio al archivo existente sin problemas'
Workbooks.Open Filename:="C:\Users\su\Desktop\Encuesta\Cuestionar io.xlsm"
ChDir "C:\Users\su\Desktop\Encuesta"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\su\Desktop\Encuesta\" + nombrearchivo + ".xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
A partir de aquí, quisiera seguir trabajando con la macro haciendo referencia a ese nombre, y es aquí donde empieza a darme problemas en instrucciones como:
Workbooks("nombrearchivo").Sheets("Hoja3").Delete
Y lo mismo cuando quiero utilizar la ruta y nombre de un archivo seleccionado por el usuario:
Inicio:
Dim cierre As Boolean
cierre = Application.Dialogs(xlDialogOpen).Show
'El valor de cierre sera False si se cancela el cuadro de diálogo sin elegir un archivo, y True cuando el usuario sí ha realizado su elección'
If cierre = False Then
GoTo Inicio
End If
'Y se captura el nombre y ruta de acceso a este archivo elegido por el usuario'
Dim nombre As String
Dim ruta As String
nombre = ActiveWorkbook.Name
ruta = ActiveWorkbook.Path
Y otra vez me da error cuando intento referirme a este archivo a través de estas variables en cuanto deja de ser libro activo, por ejemplo, para borrarlo cuando ya he terminado de trabajar con él:
Kill "ruta\nombre"
Resumiendo (espero haberme explicado medianamente bien :P): ¿Cómo hacer referencia a un archivo elegido por usuario (luego no conoceré a priori ni nombre ni ubicación del mismo) para trabajar con él una vez deja de ser libro activo?
Muchas gracias por la ayuda de antemano!

2 respuestas

Respuesta
1
Me parece que tienes un ligero problema de base.
El problema que veo en tu código es que no distingues entre una variable de tipo texto (string) y lo que es un texto fijo.
Si tu tienes una variable llamada nombrearchivo cuyo contenido es 'libroDeJuan', cuando pones workBooks(nombrearchivo) te estás refiriendo al workbooks("libroDeJuan"), pero si pones workBooks("nombrearchivo") te refieres a un libro que se llama "nombrearchivo", y lógicamente no existe.
Si pones el nombre de la variable entre comillas, en lugar de usar el contenido de la variable estás poniendo un texto fijo.
Otro caso: pones Kill "ruta\nombre". Eso se refiere al fichero 'nombre' que está dentro de la carpeta 'ruta'. Lo que tu quieres poner es:
        Kill ruta & "\" & nombre
Fíjate que construimos un texto con las dos variables e intercalamos la barra entre medias.
Por cierto, tu unes cadenas de caracteres usando el operador "+". En Visual Basic suele funcionar pero es aconsejable dejar ese operador para la suma matemática y utilizar el carácter "&" para concatenar cadenas.
Pues si, más que ligero, tengo un importante problema de base. De hecho me metí en estas historias hace menos de un mes, y ya se ve que no es lo mío je je.
Muchísimas gracias por la explicación, tomo nota.
Un saludo!
Respuesta
1
Acá el error es :
Workbooks("nombrearchivo"). Sheets("Hoja3").Delete
no debes usar las comillas debe ser
Workbooks(nombrearchivo).Sheets("Hoja3").Delete
aca el error es :
Kill "ruta\nombre"
no debes usar las comillas y de falta un controlador de union de string .debe ser
Kill ruta & "\" & nombre
Eso seria.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas