por los detalles que (no) expones en tu consulta, no se alcanza a "ver" alguna posible causa del comportamiento -?-
- algun codigo desgastante/repetitivo/... que consuma los recursos de que dispone excel (como la memoria) ?
p.e. en los eventos '_calculate', '_change, '_selectionchange', ... en las hojas y/o en el libro
comentas (si detectas) algun detalle mas significativo ?
saludos,
hector.
__ OP __
> Una hoja de un libro, que llevo tiempo usando, y modificando, segun necesidad y que tiene unas 10 filas ocultas
> por primera vez al introducir los datos (numeros) en cada una de las celdas donde corresponde, 'tiembla' la hoja
> durante algo menos que un segundo y asi cada vez que meto un nuevo dato.
> Desoculto las 10 lineas y no me hace este 'tembleque'.
> Como nunca antes me lo habia hecho, ni con las filas ocultas y sin ocultarlas
> he guardado la hoja, he cerrado el excel, he borrado temporales y cokies, etc
> como cuando cierro el PC, y he vuelto a abrir el Libro
> y en la hoja con las 10 lineas ocultas como siempre, he introducido los datos y no me lo ha vuelto hacer.
> Me gustaria saber a que puede ser debido este 'baile' de la hoja
En la HOJA2 (MASTERS) abre ventana que pone _izquierda (Worksheet) _derecha
(Change) tiene:
"Private Sub Worksheet_Change(ByVal Target As Range)
End Sub"
En la HOJA3 (MANUALES) abre ventana que pone _izquierda 'Worksheet'
_derecha 'SelectionChange' tiene:
"Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub"
Y en Modulos, en Modulo1, abre la ventana _izquierda (General) _derecha
(TomarClientes) la macro:
"Function TomarClientes(Clientes As Range, Claves As Range, Clave) As String
Dim Celda As Range, Fila As Long: TomarClientes = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then
If TomarClientes <> "" Then TomarClientes = TomarClientes & ", "
TomarClientes = TomarClientes & Clientes.Cells(Fila)
End If: Fila = Fila + 1
Next
End Function"
Espero no haber sido demasiado profuso en detalles y con esto puedas mejor
ver por donde vienen los 'tiros' y determinar una solucion.
Como siempre gracias por tu interes y el tiempo que me dedicas.
Saludos
Alfonso.
-------------------------------
"Héctor Miguel" <NOhemio...@PLShotmail.com> escribió en el mensaje
news:uzGqGwtF...@TK2MSFTNGP04.phx.gbl...
> ---
> avast! Antivirus: Mensaje entrante limpio.
> Base de datos de Virus (VPS): 080914-0, 14/09/2008
> Comprobado el: 15/09/2008 15:49:27
> avast! - copyright (c) 1988-2008 ALWIL Software.
> http://www.avast.com
>
>
>
__ 1 __
> ... quiza si dejaramos algunas veces el tema para la mañana siguiente, se pondrian la mitad de las cuestiones aqui.
1) (yo creo que) si le agregamos una costumbre a consultar la ayuda en linea {F1}, seria mas de la mitad :))
__ 2 __
> La hoja SOLO 'tiembla' cuando la tengo Desprotejida, y TENGO OCULTAS 8 filas.
> Si no esta protejida pero las Filas estan a la vista, meto los datos (1,2,3,4...) y no 'tiembla'...
> ... en la HOJA1... esta la macro:
> Private Sub Worksheet_Calculate()
> Dim Celda As Range
> Application.EnableEvents = False
> On Error GoTo Salida
> For Each Celda In Cells.SpecialCells(xlCellTypeFormulas)
> If InStr(Celda.Formula, "TomarClientes") _
> Then Celda.WrapText = False: Celda.WrapText = True
> Next
> Salida:
> Application.EnableEvents = True
> End Sub
2) a) cuando la hoja esta "protegida" (y habiendo quitado la re/proteccion en el evento '_open' solo a la interfase del usuario)
esta macro "falla" a las primeras de cambio e inmediatamente "salta" a la linea de "Salida:" (o sea, NO se ejecuta realmente)
b) cuando la hoja NO esta "protegida"... el codigo se ejecuta tantas veces como celdas donde uses la funcion (TomarClientes)
y como se puede apreciar, su objetivo es (re)dimensionar alto/ancho de la celda donde se obtienen los datos
-> prueba agregado una instruccion: Application.ScreenUpdating = False
ANTES de la linea que dice: -> Application.EnableEvents = False
saludos,
hector.
> ... solo me queda una cosa... por solucionar, que no he conseguido ...
> Cuanto tengo la hoja... protegida (tiene que estarlo)... a pesar de la macro... sigue sin abrirme las filas.
> En cuanto la desprotejo... las abre automaticamente y queda todo perfecto
> y al quitar la informacion en origen, cierra las filas a su tamano original
> que tengo en 'autoajustar' para ello, quedando estupendamente la hoja de presentacion.
> Si se te ocurriera algo para erradicar este problema, te lo agradeceria...
he corrido pruebas y no logro reproducir el comportamiento que describes
(que al modificar la clave solicitada no se auto-ajuste la celda donde se usa la funcion TomarClientes)
revisa como hice las pruebas y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
probado bajo este escenario:
- hoja1 un listado de nombres y claves
- hoja2 protegida (salvo celdas donde se piden claves) y llamadas a la funcion (TomarClientes)
- se hacen cambios tanto en la hoja con el listado (hoja1) como en las celdas donde se indica cual clave se busca (hoja2)
- en el modulo de codigo del libro (ThisWorkbook)
Private Sub Workbook_Open()
Worksheets("hoja2").Protect _
UserInterfaceOnly:=True
End Sub
- en el modulo de codigo de la hoja2
Private Sub Worksheet_Calculate()
Dim Celda As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo Salida
For Each Celda In Cells.SpecialCells(xlCellTypeFormulas)
If InStr(Celda.Formula, "TomarClientes") _
Then Celda.WrapText = False: Celda.WrapText = True
Next
Salida:
Application.EnableEvents = True
End Sub
- en un modulo de codigo estandar
Function TomarClientes(Clientes As Range, Claves As Range, Clave As Range) As String
Dim Celda As Range, ListaClientes As String, Fila As Long
For Each Celda In Claves: Fila = Fila + 1
If Celda = Clave Then ListaClientes = ListaClientes & ", " & Clientes.Cells(Fila)
Next: TomarClientes = Mid(ListaClientes, 3)
End Function
"> he corrido pruebas y no logro reproducir el comportamiento que describes
> (que al modificar la clave solicitada no se auto-ajuste la celda donde se
> usa la funcion TomarClientes)
>
> revisa como hice las pruebas y si cualquier duda (o informacion
> adicional)... comentas ?
> saludos,
> hector.
>
> probado bajo este escenario:
>
> - hoja1 un listado de nombres y claves
[hoja1(TECNICOSyEXPERTOS), Protegida, es la del problema, estan los nombres
de los cursos(B48:B69, dato fijo), numero de cursos(C48:c69, vacias hasta
que recogen datos de la hoja2), nombre de los alumnos(E48:E69, vacias hasta
que recojen datos de la hoja2), y aquí en este rango es donde tengo el
problema porque no abren hasta recoger todos los nombres que se ponen en la
hoja2, pero que si quito la protección y muevo cualquier dato de la hoja2,
ya amplía.]
> - hoja2 protegida (salvo celdas donde se piden claves) y llamadas a la
> funcion (TomarClientes)
[hoja2(MASTERS), Protegida, aquí es donde se pone el numero de master y
todos los nombres de los alumnos, en cada fila del master que corresponda,
abriendo la fila en funcion del numero de nombres que contenga, y estos
datos son los que pasa a la anterior hoja1]
> - se hacen cambios tanto en la hoja con el listado (hoja1) como en las
> celdas donde se indica cual clave se busca (hoja2)
[la hoja1 se rellena con los datos que toma (numero, nombres) de la hoja2, y
en las columnas de resultados ayacentes, con el producto de numero por
precio]
> - en el modulo de codigo del libro (ThisWorkbook)
> Private Sub Workbook_Open()
> Worksheets("hoja2").Protect _
> UserInterfaceOnly:=True
> End Sub
[aquí yo tengo todo igual (incluyendo la clave de proteger, que no haces
figurar), pero la hoja del Worksheets que yo tengo es: ("TECNICOSyEXPERTOS),
que en mi Libro es la hoja1, NO la hoja2]
> - en el modulo de codigo de la hoja2
[en el raiz de 'Microsoft Excel Objetos', click en la
hoja1(TECNICOSyEXPERTOS), y ahí la tengo yo]
> Private Sub Worksheet_Calculate()
> Dim Celda As Range
> Application.ScreenUpdating = False
> Application.EnableEvents = False
> On Error GoTo Salida
> For Each Celda In Cells.SpecialCells(xlCellTypeFormulas)
> If InStr(Celda.Formula, "TomarClientes") _
> Then Celda.WrapText = False: Celda.WrapText = True
> Next
> Salida:
> Application.EnableEvents = True
> End Sub
>
> - en un modulo de codigo estandar
> Function TomarClientes(Clientes As Range, Claves As Range, Clave As Range)
> As String
> Dim Celda As Range, ListaClientes As String, Fila As Long
> For Each Celda In Claves: Fila = Fila + 1
> If Celda = Clave Then ListaClientes = ListaClientes & ", " &
> Clientes.Cells(Fila)
> Next: TomarClientes = Mid(ListaClientes, 3)
> End Function
[yo la tengo en 'Modulos' como Modulo1, y ES PARECIDA, pero NO igual, quiza
esto afecte o no, pero la mia es:
Function TomarClientes(Clientes As Range, Claves As Range, Clave) As String
Dim Celda As Range, Fila As Long: TomarClientes = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then
If TomarClientes <> "" Then TomarClientes = TomarClientes & ", "
TomarClientes = TomarClientes & Clientes.Cells(Fila)
End If: Fila = Fila + 1
Next
End Function]
> Hay algunas diferencias, entre lo que tu me indicas y lo que yo te expongo
> a ver si tengo suerte y en algunas de estas diferencias pueda estar la solucion...
no me quedo claro si la funcion personalizada (TomarClientes) la utilizas en ambas hojas -?-
1) el procedimiento de evento: -> Private Sub Worksheet_Calculate()
debera estar en el modulo de codigo de la hoja (u hojas)
-> donde se requiera que el codigo auto-ajuste las dimensiones (alto/ancho)
de las celdas donde se hagan llamadas a la funcion (tomarClientes)
2) en el codigo de apertura: -> Private Sub Workbook_Open()
deberas incluir (a todas) las hojas donde se requiera que su evento '_calcuate' ajuste celdas
si cualquier duda... comentas ?
saludos,
hector.
"Héctor Miguel" <NOhemio...@PLShotmail.com> escribió en el mensaje
news:u%23FndUEG...@TK2MSFTNGP03.phx.gbl...
> ---
> avast! Antivirus: Mensaje entrante limpio.
> Base de datos de Virus (VPS): 080916-0, 16/09/2008
> Comprobado el: 17/09/2008 0:03:58
> ... Tampoco pasa nada por tener que desproteger y volver a proteger la hoja, como he estado haciendo hasta ahora ...
(creo que) el siguiente "paso final" pudiera ser enviarte un ejemplo "trabajando" (bajo el escenario comentado) ;)
saludos,
hector.
> ... a ver si me arroja algo de luz y me vale para resolver esta dificultad.
lo siento... yahoo ha rechazado el envio a "esa" direccion de correo
(sin el "NO...SPAM" obviamente) :-((
saludos,
hector.