Ayuda sobre un documento creado con el programa informático Microsoft Excel

Hols que tal te escribo para que me saques de dos dudas, mira:
La primera es que estoy haciendo una macro donde por medio de un inputbox le pido al usuario el número de la hoja de libro, esto lo hago con el fin de que e valor almacenado en una variable sirva para que por medio de uña instrucción de macros se active dicha hoja, yo lo hago por medio de la siguiente instrucción, pero no me funciona:
application.workbooks(1).worksheets (hoja).activate
sabes alguna otra forma de hacerlo.
La otra es que he buscado alguna instrucción que me devuelva el nombre de la columna de la celda actualmente activa, yo probé con acticell.column pero este devuelve un numero. Quiero que me devuelva una A, B, C, DE etc.
Gracias por todo.

1 respuesta

Respuesta
1
Respecto a tu primer pregunta el numero almacenado en la variable hoja es *posicional* es decir que te llevará a la hoja que se encuentre en el orden que asignes a tal variable. Es decir que el método:
Worksheets(2). Activate
Te llevará a la segunda hoja de tu libro, independientemente del nombre de la hoja (el que figura en la solapa) o del nombre de código de la hoja (el nombre interno que MS Excel asignó a la hoja).
La clave está en el tipo de variable que le asignas a "hoja".
Ejemplo:
Sub SeleHoja()
Dim hoja As Integer 'definida como número
hoja = InputBox("Ingrese número de hoja")
Worksheets(hoja).Activate
End Sub
Esta macro lleva al número de órden que tenga la hoja. Mientras que:
Sub tt()
Dim hoja As String 'definida como cadena de caracteres
hoja = InputBox("Ingrese número de hoja")
Worksheets(hoja).Activate
End Sub
Lleva a la hoja cuya etiqueta (label) coincida con el valor ingresado en el Inputbox, independiente de la posición que ocupe. Esta, creo, es la variante de código que deberías utilizar si tus hojas estuvieran etiquetadas con números.
En programación, para evitar posibles conflictos porque el usuario haya cambiado el número de hoja o su posición en el libro, es preferible usar el nombre de código de esas. (En el editor de Visual Basic ves en el Navegador de proyectos, primero el nombre de código y, entre paréntesis, el nombre asignado a esa hoja)
Así, para activar la hoja cuyo nombre de código sea Hoja3, la instrucción será:
Hoja3. Activate
Con este pantallazo teórico sobre la denominación de las hojas, deberías poder resolver tu primera duda.
Respecto a la segunda, es cierto: VBA considera a las columnas por su número y no por su letra.
Pero, aprovechando la propiedad "Address" de tal columna podremos aislar las letras que le corresponden.
Usa estas dos líneas de código para alojar en la variable "Columna" tal letra o letras:
Columna = ActiveCell.Address(, False)
Columna = Left(Columna, InStr(1, Columna, "$") - 1)
Aquí, el truco está en forzar a que muestre las filas de tal dirección como absolutas de forma tal que aparece el signo pesos ($) separando filas de columna. Luego, con la función Left, tomaremos los caracteres izquierdos hasta dónde se encuentre le signo $.
Espero haber sido capaz de aclarar tus dudas.
Un abrazo!
Fernando
Te doy las gracias por tu respuesta es excelente. Implemente lo de seleccionar una hoja pero al momento de correr la macro se genero un error en tiempo de ejecución 9 (subíndice fuera del intervalo). Me podrías decira que se debe. Gracias
Complemento: Para hacer una rutina efectiva te convendría agregarle algunos controles.
Por ejemplo:
Sub SeleHoja()
Dim hoja As String 'definida como cadena de caracteres
'pide nombre de hoja
88: hoja = InputBox("Ingrese número de hoja", "IR A HOJA:...")
'Control de ingreso de dato:
If Len(hoja) > 0 Then
'Control de existencia de hoja
On Error Resume Next
Set SheetEx = ActiveWorkbook.Sheets(hoja)
If Err = 0 Then
On Error GoTo 0
SheetEx.Select
Set SheetEx = Nothing
Else
On Error GoTo 0
For ton = 1 To 4
Beep
Next ton
QueHago = MsgBox("No existe una hoja con el número: " & hoja & Chr(10) & "Para corregirlo, presione Reintentar. Use 'Cancelar' para salir de esta macro", vbRetryCancel, "HOJA INEXISTENTE")
If QueHago = vbRetry Then GoTo 88
End If
Else
For ton = 1 To 2
Beep
Next ton
QueHago = MsgBox("No ingresó número de hoja", vbRetryCancel, "Y EL NUMERO?!!!")
If QueHago = vbRetry Then GoTo 88
End If
End Sub
Esta rutina controla, primero que el inputbox haya recibido dato. Si no se ingresó da la oportunidad de volver a entrarlo o terminar.
Luego controla que la hoja exista y, otra vez, si no existe da la chance de que la ingreses de nuevo o salgas de la macro.
Desde luego, si la hoja existe, te lleva a ella.
Probé nombrando hojas con números y funcionó correctamente, pero la macro es válida para ingresarle cualquier nombre.
Espero que te funcione para tu caso.
Otro abrazo!
Fernando
Ese tipo de error se produce porque el nombre de la hoja que hayas seleccionado no existe en el libro.
Para resolverlo, fíjate en cómo está escrito el nombre de la hoja y cual es el que se carga en la variable con el inputbox.
Para esto suele ser conveniente ejecutar la macro en el modo "Paso a paso" y, al acercar el puntero del mouse a la variable, aparece su contenido en una etiqueta. Así podrás ver por qué no encuentra la hoja que le indicaste.
Prueba con esto y luego dime.
Un abrazo!
Fernando
Hay usuarios que no pueden consultarme porque -entre otras- tu pregunta está pendiente de finalizar.
Serías tan amable de hacerlo, sin olvidar el puntaje (OJO el predeterminado es un pobre 3/5 ;) ¿Y comentando?
Un abrazo!
Fernando
pd: Si finalizas rápidamente esta pregunta, tiene muchas chances de ser la respuesta finalizada número 1000, en tal caso te ganaras un bonito viaje a Bagdad para el próximo 30 de Febrero... ;)
Chau!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas