Variables

Hola Fejoal.. Gracias por todas tus respuestas... Te tengo una nueva interogante...
Estoy utilizando el Worksheet_Change() tengo 10 hojas de trabajo, una por categoría, en nueve de las hojas tengo el mismo procedimiento, el cual me verifica si existe un volor en la hoja de nomencladores, si existe todo bien, continuo digitando, pero si no existe me activa la hoja de nomencladores para que lo agregue, mi pregunta es, puedo agregar un botón en el encabezado donde al darle click me regrese a la hoja de la categoría de donde vengo, yo pensaba almacenar el nombre de la hoja en una variable y luego en el botón que me active la hoja que esta almacenada en esa variable, pero me da error de variable no encontrada.. Donde puedo hacer publica la variable... Bueno espero darme a entender y de nuevo gracias

1 Respuesta

Respuesta
1
OK. Se me ocurre -primero- la siguiente sugerencia, si me lopermites:
Si el procedimiento es el mismo tal vez te convenga quitarlo de cada hoja y colocarlo en "ThisWorkbook" bajo el evento "Workbook_SheetChange"
De esta manera, al agregar nuevas hojas, también continuará funcionando para ellas sin necesidad de agregarle más lineas (idénticas) de código a esta nueva hoja.
Si, ya sé, no quieres que este evento afecte a la hoja de nomencladores... Bastará entonces colocarle un control a la macro para que no se ejecute si el cambio ocurre en tal hoja.
En cualquier caso, el uso de la variable no es funcional. Pasa que al terminar una ejecución de la macro donde esta esté declarada como pública, esta se vacía, a menos que la declares como Estática. Pero ni aún así porque el nuevo macro que la menciona considera que es una nueva...
Por lo tanto, corto por lo sano: No uso variable. El nombre de la hoja que lleva al nomenclador lo guardo físicamente, en una celda vacía del mismo nomenclador, allí donde no moleste.
Entonces, siguiendo mi sugerencia original, o adaptándola a tus 9 macros, coloca una instrucción que guarde el valor en tal celda.
Desde luego, la macro que te devuelve a la hoja original, lee esa celda para saber a dónde ir...
Por ejemplo la macro que analiza el evento diría algo así como:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Sh.Name <> "Hoja10" Then
If Target.Value > 3 Then 'coloca qui la condiciónpara ir al Nomenclador
DesdeHoja = Sh.Name
Application.EnableEvents = False
Sheets("hoja10").Range("Z4").Value = DesdeHoja 'Dejo nombre hoja actual en una celda libre
Sheets("hoja10").Select
'...aquí irían tus comandos para cuando un código no sea encontrado en el nomenclador...
Application.EnableEvents = True
End If
End If
End Sub
Esta macro general idenfica la hoja de cambio en la variable Sh y la celda que se modifica en Target.
Controla esa hoja no sea la del nomenclador (Hoja10), suspende los eventos momentáneamente, para colocar en la hoja10 en la celda Z4 el nombre de esa hoja.
Luego, supongo tendrás aquella macro asociada a un botón del Nomenclador que te llevará a la hoja original.
Tal macro sería algo así como esto:
Sub VolverA()
DesdeHoja = Sheets("Hoja10").Range("Z4").Value
MsgBox "vine de hoja " & DesdeHoja
Sheets(DesdeHoja).Select
End Sub
Esta tiene un cuadro demensaje pero puedes reemplazar esa linea con las acciones que quieres que haga antes de volver a su origen.
(Desde luego la idea orinal sirve para el caso de que mantengas una macro por cada hoja).
Bien, espero que esto te ayude. En cualquier caso, ya sabes que hacer... ;)
Un abrazo!
Fernando
Simplemente EXCELENTE... gracias por tu ayuda... me ha servido.. y por el momento se la aplicare a cada una de las hojas que tengo... pero como siempre pasa mientra uno va aprendiendo a programar va viendo que ocupa a veces códigos innecesario, como es mi caso aplicándole cada código a cada una de las hojas.. pero como este archivo es uno de los primordiale en mi trabajo estoy haciendo uno nuevo ahorandome lineas de código y también fórmulas en celdas porque te diré que solo por las fórmulas pesa casi 3 megas el archivo... y tomare tu consejo de ubicar el código en el Thisworkbook.. gracias de antemano...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas