Un 'arreglo' para Hector Miguel

10/02/2008 - 16:55 por Ernesto | Informe spam
Hola Hector Miguel

No se si recordaras con la cantidad de mensajes que contestas, que hace ya
tiempo me solucionaste (esto entre otras cosas) 'recoger todos los nombres
que ponía en una fila de una
hoja', hoja donde previamente se recogian todos los datos (BD), pasando
todos estos
nombres, automaticamente, a otra linea de otra hoja (resumen) del mismo
libro, con esta 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

Funciona de maravilla, pero, siempre surge un pero, en aquella epoca no se
incluian muchos
nombres (nombre y dos apellidos) en la linea de la hoja 'BD', cuya linea por
su formato,
se abre todo lo necesario segun la cantidad de nombres que vas incorporando,
admite muchos, no así la línea de la hoja(resumen) donde los traslada, en la
que solo se ven
los que permite la linea segun su altura que tenga de formato la linea.
La hoja esta protegida y el usuario para ver todos tendria que saber la
'clave', desproteger,
ir a esa linea y formatearla como 'autoajustar', pero aun asi cuando la
informacion
'desaparece' (se borra en BD), queda abierta en la 'altura' que quedó en el
último 'autoajustar'

Tengo dudas de habertelo consultado esto antes, y algo de que no se podia
hacer me ronda en la memoria,
pero no lo recuerdo, no obstan te lo vuelvo a plantear y tu me indicas.
Me gustaría, por no dejar la hoja 'abierta' que con otra macro se pudiera
hacer, que la linea
donde 'recibe' la informacion, funcionara como la linea donde se incluye,
que va abriendose
segun se incorporan datos y que al borrar los datos queda con una altura
determinada y
todas las lineas que reciben esta informacion, igual.

Te reitero mi agradecimiento por tus aportaciones al foro y recibe un
cordial saludo.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
10/02/2008 - 23:38 | Informe spam
hola, Ernesto ! (en aquella ocasion consultaste como "Hernando" ?)

1) si la hoja que recibe debe estar protegida, (re)protegela en el evento '_open' de tu libro +/- como sigue:

Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub

2) copia/pega las sigientes instrucciones EN el modulo de codigo de "esa" hoja...

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

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta original __
... 'recoger todos los nombres que ponía en una fila de una hoja'
... pasando... estos nombres... a otra linea de otra hoja (resumen)... con esta 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
... en aquella epoca no se incluian muchos nombres... en la linea de la hoja 'BD', cuya linea por su formato
se abre todo lo necesario segun la cantidad de nombres que vas incorporando admite muchos
no asi la línea de la hoja (resumen) donde los traslada... solo se ven los que permite... segun su altura que tenga de formato la linea.
La hoja esta protegida y el usuario para ver todos tendria que saber la 'clave', desproteger, ir a esa linea y formatearla como 'autoajustar'
pero aun asi cuando la informacion 'desaparece' (se borra en BD), queda abierta en la 'altura' que quedo en el ultimo 'autoajustar'
... de... consultado esto antes, y algo de que no se podia hacer me ronda en la memoria, pero no lo recuerdo
Me gustaría, por no dejar la hoja 'abierta' que con otra macro se pudiera hacer, que la linea donde 'recibe' la informacion
funcionara como la linea donde se incluye, que va abriendose segun se incorporan datos
y que al borrar los datos queda con una altura determinada y todas las lineas que reciben esta informacion, igual...
Respuesta Responder a este mensaje
#2 Ernesto
11/02/2008 - 23:26 | Informe spam
Hector Miguel, gracias nuevamente.
He hecho lo que me indicas y algo habre hecho mal porque despues de ello he
probado y siguen sin abrirse las filas de la hoja que recibe los
datos(resumen)
Como solo he incorporado una macro, la que tenia esta hoja antes y que tu me
facilitaste, te explico como he incorporado estas otras dos macros que me
has facilitado ahora, por si no lo hubiera hecho correctamente y ahi es
donde estribaria el error:
He picado con el boton derecho en la parte superior izquierda de la hoja y
de 'archivo', el logo de excel,-->'Ver codigo', y aparecen dos ventanas, a
la izquierda el raiz de VBAProject(Nombre del Libro) con las 3 hojas que
tiene y al final una carpeta de Modulos donde esta el Modulo1 que tiene la
macro que me facilitaste, y a la derecha una pantalla en blanco (en su parte
superior izquierda pone 'Workbook' y a su derecha 'Open', donde he copiado
tu macro:

Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
(Supongo que en:PassWord:="la MISMA cOntRase#a aUe lE pUsISte", tengo que
poner MI CONTRASEÑA, la que tengo puesta a la hoja, y así lo he hecho),

despues de esto, he picado en el raiz, en la hoja(resumen) que recibe los
datos (la que no 'abren' sus lineas para poder ver todo su contenido),
aparece igual que antes el raiz, y a la derecha otra ventana con la cabecera
'Worksheet' a la izquierda, y 'Calculate' a la derecha, y ahi he copiado la
otra 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

He dado 'Archivo' y 'guardar' y después 'Archivo' y 'Cerrar y volver a
Microsow Excel'
He probado incluyendo cantidad de datos en la Hoja (BD) y en la de (resumen)
solo se ven los que admite el formato que tiene, no abre lo suficiente para
ver todos los datos que recibe, como antes.
¿Hago algo mal? Te agradecería volvieras a interesarte por ello y me
informaras si lo he hecho bien o que error he cometido, para hacerlo
correctamente.
Muchas gracias y un cordial saludo.

"Héctor Miguel" escribió en el mensaje
news:
hola, Ernesto ! (en aquella ocasion consultaste como "Hernando" ?)

1) si la hoja que recibe debe estar protegida, (re)protegela en el evento
'_open' de tu libro +/- como sigue:

Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub

2) copia/pega las sigientes instrucciones EN el modulo de codigo de "esa"
hoja...

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

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta original __
... 'recoger todos los nombres que ponía en una fila de una hoja'
... pasando... estos nombres... a otra linea de otra hoja (resumen)...
con esta 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
... en aquella epoca no se incluian muchos nombres... en la linea de la
hoja 'BD', cuya linea por su formato
se abre todo lo necesario segun la cantidad de nombres que vas
incorporando admite muchos
no asi la línea de la hoja (resumen) donde los traslada... solo se ven
los que permite... segun su altura que tenga de formato la linea.
La hoja esta protegida y el usuario para ver todos tendria que saber la
'clave', desproteger, ir a esa linea y formatearla como 'autoajustar'
pero aun asi cuando la informacion 'desaparece' (se borra en BD), queda
abierta en la 'altura' que quedo en el ultimo 'autoajustar'
... de... consultado esto antes, y algo de que no se podia hacer me ronda
en la memoria, pero no lo recuerdo
Me gustaría, por no dejar la hoja 'abierta' que con otra macro se pudiera
hacer, que la linea donde 'recibe' la informacion
funcionara como la linea donde se incluye, que va abriendose segun se
incorporan datos
y que al borrar los datos queda con una altura determinada y todas las
lineas que reciben esta informacion, igual...




Respuesta Responder a este mensaje
#3 Héctor Miguel
12/02/2008 - 00:25 | Informe spam
hola, Ernesto !

solo te hace falta "obigar" a excel para que (re)proteja la hoja con la opcion de "solo la interfase con el usuario"...
lo que hace el evento de apertura cuando le das permiso al libro de usar las macros (al abrirlo)...

op1: "parate" en el procedimento "Private Sub Workbook_Open()" y pulsa la tecla {F5}
op2: cierra y (re)abre el libro (la "tradicional")

saludos,
hector.

__ la consulta original __
... he copiado tu macro:
Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
(Supongo que en:PassWord:="la MISMA cOntRase#a aUe lE pUsISte"
tengo que poner MI CONTRASEÑA, la que tengo puesta a la hoja, y asi lo he hecho),

... en la hoja(resumen) que recibe los datos (la que no 'abren' sus lineas para poder ver todo su contenido)
... he copiado la otra 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

He dado 'Archivo' y 'guardar' y después 'Archivo' y 'Cerrar y volver a Microsow Excel'
He probado incluyendo cantidad de datos en la Hoja (BD) y en la de (resumen) solo se ven los que admite el formato que tiene
no abre lo suficiente para ver todos los datos que recibe, como antes. Hago algo mal? ...
Respuesta Responder a este mensaje
#4 Ernesto
12/02/2008 - 14:19 | Informe spam
Hola Héctor Miguel, otra vez yo.

Al abrir el Libro, me abre como siempre, aparece la ventana de Advertencia
de Seguridad, de que contiene macros, habilito macros y se abre el Libro
como siempre. No me da opcion de "pararme", o no se como hacerlo en el
procedimiento "Private Sub Workbook_Open()", que me indicas para pulsa la
tecla {F5}.

Por si tu indicacion era ir a la ventana donde estaba la macrto, he ido al
código, y en la ventana donde aparece la macro:

Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub

he dado {F5}, he guardado, salido, vuelto a abrir y sigue igual.

Como sabes mis conocimientos son justitos, y a pesar de que tus
explicaciones son de lo mas claro, a veces los que no dominamos los
terminos, nos liamos con las cosas mas tontas, seguro que algo no hago bien.

He repetido el proceso varias veces, mirado si hay alguna opción de "solo la
interfase con el usuario"...anque dices que lo hace el evento de apertura y
ya no se que mas hacer, no veo ninguna diferencia con estas nuevas macros al
abrir el Libro.

Por eso apelo nuevamente a tu paciencia a ver si salgo adelante con este
problema.
Gracias y saludos.


"Héctor Miguel" escribió en el mensaje
news:%
hola, Ernesto !

solo te hace falta "obigar" a excel para que (re)proteja la hoja con la
opcion de "solo la interfase con el usuario"...
lo que hace el evento de apertura cuando le das permiso al libro de usar
las macros (al abrirlo)...

op1: "parate" en el procedimento "Private Sub Workbook_Open()" y pulsa la
tecla {F5}
op2: cierra y (re)abre el libro (la "tradicional")

saludos,
hector.

__ la consulta original __
... he copiado tu macro:
Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
(Supongo que en:PassWord:="la MISMA cOntRase#a aUe lE pUsISte"
tengo que poner MI CONTRASEÑA, la que tengo puesta a la hoja, y asi lo he
hecho),

... en la hoja(resumen) que recibe los datos (la que no 'abren' sus
lineas para poder ver todo su contenido)
... he copiado la otra 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

He dado 'Archivo' y 'guardar' y después 'Archivo' y 'Cerrar y volver a
Microsow Excel'
He probado incluyendo cantidad de datos en la Hoja (BD) y en la de
(resumen) solo se ven los que admite el formato que tiene
no abre lo suficiente para ver todos los datos que recibe, como antes.
Hago algo mal? ...




Respuesta Responder a este mensaje
#5 Héctor Miguel
12/02/2008 - 22:13 | Informe spam
hola, Ernesto !

1) los codigos que hemos visto en esta consulta, deben estar cada uno en su cada tipo de modulo:
a) Private Sub Workbook_Open() <= en el modulo de codigo del objeto ThisWorkbook
b) Private Sub Worksheet_Calculate() <= en el modulo de codigo de "la hoja" donde usas la funcion
c) el de la Function TomarClientes(Clientes ... (obviamente) en un modulo de codigo estandar/general/normal

2) en el workbook_open se debe hacer referencia a la hoja y la clave "correctas"... o sea:
cambia el nombre de la hoja e indica la clave que le asignaste (a las reales)
Private Sub Workbook_Open()
Worksheets("pon aqui el nombre de tu hoja").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub

OJO: solo por codigo se puede establecer que la proteccion de la hoja dejara "libre accion a las macros"
(la parte con el argumento: UserInterfaceOnly:=True)

3) hay dos formas de ejecutar este procedmiento (workbook_open):

a) automaticamente al abrir el libro (CON su permiso de usar las macros)
para pruebas deberas cerrar y re-abrir el libro o...

b) pulsar la tecla {F5} cuando el cursor esta dentro del procedimiento (en el editor de vba)

si algo de lo anterior no se ajusta a los procedimientos que sigues... comentas cualquier detalle adicional ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida