Cambiar color con macro y bucar en otro libro

08/09/2006 - 19:21 por El Pepus | Informe spam
Hola de nuevo, no vale reirse, pero he tardado 4,5 horas en encontrar
estos codigos para abrir y cerrar un libro despues de mucho rebuscar
abro el libro Nombres.xls y me abre tambien el libro Servicios.xls
en estelibro de Nombres.xls este codigo

Private Sub Workbook_Open()
Workbooks.Open ("C:\Control\Servicios.xls")
End Sub

se tiene que trabajar con Servicios.xls y al cerrarlo que guarde tambien
Nombres.xls por si hay cambios en el, en estelibro de Servicios.xls este codigo

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Workbooks("Nombres.xls").Close SaveChanges = True
End Sub

Ahora biene lo que no funciona como comente en el hilo "Cambiar color con macros"
en la "Hoja1" de Servicios.xls tengo este codigo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Column = 1 Then Exit Sub

With Cells(Target.Row, 4)
.NumberFormat = "hh:mm"
.Value = Now()
Cells(Target.Row, 5).Select

ŽESTE TROZO NO FUNCIONA
If Not Target.Column = 6 Then
Cells.Font.ColorIndex = 3
.Value = Now()
Else
Cells.Font.ColorIndex = 1
.Value = Now()
End If

End With
End Sub

Si pongo el "If Not Target.Column = 6 Then" me coloca toda la pagina en rojo y
si quito el Not lo dejo "If Target.Column = 6 Then" me coloca toda la pagina en negro
y yo quiero que si hay un valor en la columna 6 solo la fila correspondiente este en negro
y si en la columna 6 no hay nada este en rojo hasta que yo le ponga un valor y cambie
a negro, he probado de todo =$F="" pero logro hacerlo funcionar bien.

Otra cosa tambien quiero pasar a codigo lo siguiente:
=SI(A5>0;SI(ESERROR(COINCIDIR(A5;Hoja2!A:A;0));"No Existe";BUSCARV(Hoja1!A5;Hoja2!A:B;2;FALSO));"")
Pero, yo pongo el datos en columna A de la hoja que sea del libro Servicios.xls y lo busque en la
columna A del libro Nombres.xls y si lo encuentra que me copie los datos de la columna B del libro
Nombres.xls a la columna B del libro Servicios.xls en la hoja que tenga en pantalla en ese momento
o sea la hoja Activa??

Bueno a ver si no me he liado con tantos codigos y no me he explicado bien, si hace falta lo separo por
preguntas.
Venga un saludos a todos desde Ibiza y gracias anticipadas
Jose Amengual

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
10/09/2006 - 02:56 | Informe spam
hola, jose !

1) la parte de codigo que no te funciona ES porque le preguntas si la columna es la #6 PERO...
al inicio del procedimiento condicionas para que si la columna NO es la #1... OMITA el resto del codigo :))

la otra parte que falla es porque aplicas propiedades al objeto 'Cells' [que se refiere a todas las celdas en la hoja]
cuando [supongo] que deberias afectar a un objeto 'range' de una sola celda [o algo parecido] p.e.

Target.EntireRow.Font.ColorIndex = ???????

2) para la segunda parte... podrias comentar/confirmar/... si lo que necesitas es 'efectivamente'...
-> depositar una formula... y dejar vinculado un libro con otro ? [entonces]... en cual celda se quedaria la formula ?
-> o solo necesitas obtener el dato [por codigo] y depositar SOLO un resultado [en cual hoja y celda ?] SIN vincular los libros ?
o... podrias intentar usando la grabadora de macros... revisar el codigo 'generado'... y comentar que necesitas modificarle -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
__ 1 __
... lo que no funciona como comente en el hilo "Cambiar color con macros" en la "Hoja1" de Servicios.xls tengo este codigo:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Column = 1 Then Exit Sub
With Cells(Target.Row, 4)
.NumberFormat = "hh:mm"
.Value = Now()
Cells(Target.Row, 5).Select
´ESTE TROZO NO FUNCIONA
If Not Target.Column = 6 Then
Cells.Font.ColorIndex = 3
.Value = Now()
Else
Cells.Font.ColorIndex = 1
.Value = Now()
End If
End With
End Sub
Si pongo el "If Not Target.Column = 6 Then" me coloca toda la pagina en rojo
y si quito el Not... me coloca toda la pagina en negro
y yo quiero que si hay un valor en la columna 6 solo la fila correspondiente este en negro
y si en la columna 6 no hay nada este en rojo hasta que yo le ponga un valor y cambie a negro
he probado de todo =$F="" pero logro hacerlo funcionar bien.



__ 2 __
Otra cosa tambien quiero pasar a codigo lo siguiente:
=SI(A5>0;SI(ESERROR(COINCIDIR(A5;Hoja2!A:A;0));"No Existe";BUSCARV(Hoja1!A5;Hoja2!A:B;2;FALSO));"")
Pero, yo pongo el datos en columna A de la hoja que sea del libro Servicios.xls y lo busque en la columna A del libro Nombres.xls
y si lo encuentra que me copie los datos de la columna B del libro Nombres.xls a la columna B del libro Servicios.xls
en la hoja que tenga en pantalla en ese momento o sea la hoja Activa??
Bueno a ver si no me he liado con tantos codigos y no me he explicado bien, si hace falta lo separo por preguntas.
Venga un saludos a todos desde Ibiza y gracias anticipadas
Jose Amengual
Respuesta Responder a este mensaje
#2 El Pepus
11/09/2006 - 10:47 | Informe spam
A ver si se resumirlo de manera mas clara
Abro 2 libros, uno "Nombres.xls" tiene en la columna A numeros de telefono y en la B los nombres de los clientes
el otro "Servicios.xls" que es el que se va a manejar tiene que hacer lo siguiente:
Cuando llaman por telefono la persona que atiende coloca el numero de telefono en la columna A de "Servicios.Xls"
tiene que buscar en "Nombres.xls" columna A si existe ese numero, si existe, copiar el nombre del cliente a la columna
B de "Servicios.xls" o sea de B a B, pero, el trabajo se tiene que pasar a un operario hay entra la columna F, si esta
vacia es que no esta pasado el trabajo tiene que estar toda la fila de A hasta G en rojo a si con una simple mirada
se ve que trabajos faltan por asignar, y en el momento que se coloque el numero de operario en F coloque toda la
fila en color negro, tengo que intentar que el libro "Servicios.xls" tenga 31 hojas, una para cada dia de la semana
por lo que el codigo tiene que estar activo con la hoja que tenga en pantalla, Hoja1, Hoja2, Hoja3 etc...
el libro "Nombres.xls" solo tendra una hoja con los numeros de telefono y nombre del cliente, digamos que sera
la "agenda" donde consultaran las hojas del libro "Servicios.xls".

El codigo que me pasaron, formula BUSCARV y el "formato condicional" funcionaba bien todo en un libro, pero
ahora quiero usar 2 libros y ademas por macros porque no se cuantas filas se pueden llegar a usar en un dia, ademas
cuando termine el mes se guarda el libro "Servicios.xls" y se abre otro nuevo usando el libro "Nombres.xls" en el mismo

Gracias anticipadas y a ver si me he explicado bien
Jose Amengual


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

1) la parte de codigo que no te funciona ES porque le preguntas si la columna es la #6 PERO...
al inicio del procedimiento condicionas para que si la columna NO es la #1... OMITA el resto del codigo :))

la otra parte que falla es porque aplicas propiedades al objeto 'Cells' [que se refiere a todas las celdas en la
hoja]
cuando [supongo] que deberias afectar a un objeto 'range' de una sola celda [o algo parecido] p.e.

Target.EntireRow.Font.ColorIndex = ???????

2) para la segunda parte... podrias comentar/confirmar/... si lo que necesitas es 'efectivamente'...
-> depositar una formula... y dejar vinculado un libro con otro ? [entonces]... en cual celda se quedaria la
formula ?
-> o solo necesitas obtener el dato [por codigo] y depositar SOLO un resultado [en cual hoja y celda ?] SIN
vincular los libros ?
o... podrias intentar usando la grabadora de macros... revisar el codigo 'generado'... y comentar que necesitas
modificarle -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
__ 1 __
... lo que no funciona como comente en el hilo "Cambiar color con macros" en la "Hoja1" de Servicios.xls tengo este
codigo:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Column = 1 Then Exit Sub
With Cells(Target.Row, 4)
.NumberFormat = "hh:mm"
.Value = Now()
Cells(Target.Row, 5).Select
ŽESTE TROZO NO FUNCIONA
If Not Target.Column = 6 Then
Cells.Font.ColorIndex = 3
.Value = Now()
Else
Cells.Font.ColorIndex = 1
.Value = Now()
End If
End With
End Sub
Si pongo el "If Not Target.Column = 6 Then" me coloca toda la pagina en rojo
y si quito el Not... me coloca toda la pagina en negro
y yo quiero que si hay un valor en la columna 6 solo la fila correspondiente este en negro
y si en la columna 6 no hay nada este en rojo hasta que yo le ponga un valor y cambie a negro
he probado de todo =$F="" pero logro hacerlo funcionar bien.



__ 2 __
Otra cosa tambien quiero pasar a codigo lo siguiente:
=SI(A5>0;SI(ESERROR(COINCIDIR(A5;Hoja2!A:A;0));"No Existe";BUSCARV(Hoja1!A5;Hoja2!A:B;2;FALSO));"")
Pero, yo pongo el datos en columna A de la hoja que sea del libro Servicios.xls y lo busque en la columna A del libro
Nombres.xls
y si lo encuentra que me copie los datos de la columna B del libro Nombres.xls a la columna B del libro Servicios.xls
en la hoja que tenga en pantalla en ese momento o sea la hoja Activa??
Bueno a ver si no me he liado con tantos codigos y no me he explicado bien, si hace falta lo separo por preguntas.
Venga un saludos a todos desde Ibiza y gracias anticipadas
Jose Amengual





Respuesta Responder a este mensaje
#3 Héctor Miguel
13/09/2006 - 05:06 | Informe spam
hola, Jose !

no estoy muy seguro de haber entendido cabalmente la situacion que necesitas resolver :-(
asumiendo [de tu primera consulta] que el libro 'de trabajo' [servicios.xls] es el que queda como activo al abrir 'nombres.xls'
el siguiente ejemplo DEBERA estar en el modulo de codigo del libro servicios.xls [ThisWorkbook] para que aplique a cualquier hoja
estoy suponiendo que la hoja con los nombres y telefonos en el libro 'base' [nombres.xls] se llama -> hoja1 <= OJO

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("a:a")) Is Nothing Then ActiveCell.Select
If Not Intersect(Target, Range("f:f")) Is Nothing Then ActiveCell.Select
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
Select Case Target.Column
Case 1
With Workbooks("nombres.xls").Worksheets("hoja1")
If Application.CountIf(.Range("a:a"), Target) Then
Target.Offset(, 1) = Application.VLookup(Target, .Range("a:b"), 2, 0)
If IsEmpty(Target.Offset(, 5)) Then Target.Resize(, 7).Font.ColorIndex = 3
End If
End With
Case 6
If Not IsEmpty(Target.Offset(, -5)) Then _
Target.Offset(, -5).Resize(, 7).Font.ColorIndex = 3
If Not IsEmpty(Target) Then _
Target.Offset(, -5).Resize(, 7).Font.ColorIndex = xlColorIndexAutomatic
End Select
End Sub

__ la consulta original __
A ver si se resumirlo de manera mas clara
Abro 2 libros, uno "Nombres.xls" tiene en la columna A numeros de telefono y en la B los nombres de los clientes
el otro "Servicios.xls" que es el que se va a manejar tiene que hacer lo siguiente:
Cuando llaman por telefono la persona que atiende coloca el numero de telefono en la columna A de "Servicios.Xls"
tiene que buscar en "Nombres.xls" columna A si existe ese numero
si existe, copiar el nombre del cliente a la columna B de "Servicios.xls" o sea de B a B, pero
el trabajo se tiene que pasar a un operario hay entra la columna F
si esta vacia es que no esta pasado el trabajo tiene que estar toda la fila de A hasta G en rojo a si con una simple mirada
se ve que trabajos faltan por asignar, y en el momento que se coloque el numero de operario en F coloque toda la fila en color negro
tengo que intentar que el libro "Servicios.xls" tenga 31 hojas, una para cada dia de la semana
por lo que el codigo tiene que estar activo con la hoja que tenga en pantalla, Hoja1, Hoja2, Hoja3 etc...
el libro "Nombres.xls" solo tendra una hoja con los numeros de telefono y nombre del cliente
digamos que serala "agenda" donde consultaran las hojas del libro "Servicios.xls".

El codigo que me pasaron, formula BUSCARV y el "formato condicional" funcionaba bien todo en un libro
pero ahora quiero usar 2 libros y ademas por macros porque no se cuantas filas se pueden llegar a usar en un dia
ademas cuando termine el mes se guarda el libro "Servicios.xls" y se abre otro nuevo usando el libro "Nombres.xls" en el mismo
Respuesta Responder a este mensaje
#4 El Pepus
13/09/2006 - 12:11 | Informe spam
Vale gracias, parece que funciona todo bien en resumen tengo este codigo
el tuyo y un trozo al final para cerrar el otro libro abierto.

Me falta añadir el siguiente codigo que me pasaron y no se como ni entre que lineas
añadirlo, me ayudas de nuevo?
En la misma fila donde coloco el numero de telefono y se coloca el nombre del cliente
pero en la columna 4 se tiene que dar la hora y minutos del sistema algo a si como
NumberFormat = "hh:mm"

en la columna 5
NumberFormat.Center = "@" Žpara poder colocar por ejemplo 04 sin que se "coma" el 0
y un Seletc para que al colocar el telefono "salte" a la columna 5 y colocar el numero

Gracias de nuevo y perdonar la molestias
Jose Amengual


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("a:a")) Is Nothing Then ActiveCell.Select
If Not Intersect(Target, Range("f:f")) Is Nothing Then ActiveCell.Select
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
Select Case Target.Column
Case 1
With Workbooks("nombres.xls").Worksheets("hoja1")
If Application.CountIf(.Range("a:a"), Target) Then
Target.Offset(, 1) = Application.VLookup(Target, .Range("a:b"), 2, 0)
If IsEmpty(Target.Offset(, 5)) Then Target.Resize(, 7).Font.ColorIndex = 3
End If
End With
Case 6
If Not IsEmpty(Target.Offset(, -5)) Then _
Target.Offset(, -5).Resize(, 7).Font.ColorIndex = 3
If Not IsEmpty(Target) Then _
Target.Offset(, -5).Resize(, 7).Font.ColorIndex = xlColorIndexAutomatic
End Select
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Workbooks("Nombres.xls").Close SaveChanges = True
End Sub
Respuesta Responder a este mensaje
#5 Héctor Miguel
14/09/2006 - 02:29 | Informe spam
hola, Jose !

Me falta a#adir el siguiente codigo que me pasaron y no se como ni entre que lineas a#adirlo...
En la misma fila donde coloco el numero de telefono y se coloca el nombre del cliente pero
en la columna 4 se tiene que dar la hora y minutos del sistema algo a si como NumberFormat = "hh:mm"
en la columna 5
NumberFormat.Center = "@" ´para poder colocar por ejemplo 04 sin que se "coma" el 0
y un Seletc para que al colocar el telefono "salte" a la columna 5 y colocar el numero...



1) no creo que sea necesario codigo para aplicar el formato "@" a la columna 'E' en las hojas del libro 'servicios.xls' ;)
a) haz click-secundario sobre la etiqueta de alguna y elige -> seleccionar todas las hojas
b) selecciona despues toda la columna 'E' [sera seleccionada para todas las hojas ] ;)
c) ve a [menu] formato / celdas... [o su atajo ctrl+1] y de la categoria de numeros selecciona -> texto
-> no te olvides de de-seleccionar todas las hojas despues, activando cualquiera otra del grupo :))

2) modifica el codigo propuesto, agregando -solo- estas dos instrucciones JUSTO ANTES del 'Case 6' y despues del 'End With'

Target.Offset(, 3) = Time
Range("e" & Target.Row).Select

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida