Excel Private Sub Worksheet con 2 instrucciones

Hola mucho agradecere su ayuda con lo siguiente:
necesito que aparte del siguiente codigo tambien me modifique automaticamente el color de la celda F18 que se cambia por medio de un inserto que tengo pormedio  de BUSCARV
el codigo es para insertar una imagen en otro rango de celdas
ACTUALMENTE TENGO:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [f7] Then Exit Sub
Me.Shapes("Foto").Delete
ruta = ThisWorkbook.Path & "\FOTOS\" & [f7] & ".jpg"
Set Foto = Me.Pictures.Insert(ruta)
With Range("B7:E12")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
Application.ScreenUpdating = True
End Sub
Y DESEO AGREGAR:
If Target.Value = "" Then Target.Interior.ColorIndex = 0
  If Target.Value = "PULIDO" Or Target.Value = "pulido" Then Target.Interior.ColorIndex = 29 'morado
  If Target.Value = "AUXILIAR" Or Target.Value = "auxiliar" Then Target.Interior.ColorIndex = 9 'cafe9
  If Target.Value = "MEDIO OFICIAL" Or Target.Value = "medio oficial" Then Target.Interior.ColorIndex = 51 'verde51
  If Target.Value = "OFICIAL" Or Target.Value = "oficial" Then Target.Interior.ColorIndex = 25 'azul25
  If Target.Value = "MAESTRO OFICIAL" Or Target.Value = "maestro oficial" Then Target.Interior.ColorIndex = 3 'rojo
  If Target.Value = "SUPERVISOR" Or Target.Value = "supervisor" Then Target.Interior.ColorIndex = 46 'color46
  If Target.Value = "JEFE DE PRODUCCION" Or Target.Value = "jefe de produccion" Then Target.Interior.ColorIndex = 1 'negro
  If Target.Value = vbNullString Then Target.Interior.ColorIndex = 0
DE ANTEMANO GRACIAS POR EL INTERES.

1 respuesta

Respuesta
1
Debajo de esta línea:
If Not Target = [f7] Then Exit Sub
Colocá las que deseás agregar.
Probala y comentame si así ya quedó tal como lo necesitas.
No funciono lo deje asi pero no cambia el color de la celda
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [f7] Then Exit Sub
  If Target.Value = "" Then Target.Interior.ColorIndex = 0
  If Target.Value = "PULIDO" Or Target.Value = "pulido" Then Target.Interior.ColorIndex = 29 'morado
  If Target.Value = "AUXILIAR" Or Target.Value = "auxiliar" Then Target.Interior.ColorIndex = 9 'cafe9
  If Target.Value = "MEDIO OFICIAL" Or Target.Value = "medio oficial" Then Target.Interior.ColorIndex = 51 'verde51
  If Target.Value = "OFICIAL" Or Target.Value = "oficial" Then Target.Interior.ColorIndex = 25 'azul25
  If Target.Value = "MAESTRO OFICIAL" Or Target.Value = "maestro oficial" Then Target.Interior.ColorIndex = 3 'rojo
  If Target.Value = "SUPERVISOR" Or Target.Value = "supervisor" Then Target.Interior.ColorIndex = 46 'color46
  If Target.Value = "JEFE DE PRODUCCION" Or Target.Value = "jefe de produccion" Then Target.Interior.ColorIndex = 1 'negro
  If Target.Value = vbNullString Then Target.Interior.ColorIndex = 0
Me.Shapes("Foto").Delete
ruta = ThisWorkbook.Path & "\FOTOS\" & [f7] & ".jpg"
Set Foto = Me.Pictures.Insert(ruta)
With Range("B7:E12")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
Application.ScreenUpdating = True
End Sub
Si para la foto se controla la celda F7 y para el color la celda F18, así te debe quedar:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [F7] And Not Target = [F18] Then Exit Sub
If Target = [F18] Then     'aquí controla el cambio en F18
  If Target.Value = "" Then Target.Interior.ColorIndex = 0
  If Target.Value = "PULIDO" Or Target.Value = "pulido" Then Target.Interior.ColorIndex = 29 'morado
  If Target.Value = "AUXILIAR" Or Target.Value = "auxiliar" Then Target.Interior.ColorIndex = 9 'cafe9
  If Target.Value = "MEDIO OFICIAL" Or Target.Value = "medio oficial" Then Target.Interior.ColorIndex = 51 'verde51
  If Target.Value = "OFICIAL" Or Target.Value = "oficial" Then Target.Interior.ColorIndex = 25 'azul25
  If Target.Value = "MAESTRO OFICIAL" Or Target.Value = "maestro oficial" Then Target.Interior.ColorIndex = 3 'rojo
  If Target.Value = "SUPERVISOR" Or Target.Value = "supervisor" Then Target.Interior.ColorIndex = 46 'color46
  If Target.Value = "JEFE DE PRODUCCION" Or Target.Value = "jefe de produccion" Then Target.Interior.ColorIndex = 1 'negro
  If Target.Value = vbNullString Then Target.Interior.ColorIndex = 0
Else    'aquí controla el cambio en F7
    Me.Shapes("Foto").Delete
    ruta = ThisWorkbook.Path & "\FOTOS\" & [f7] & ".jpg"
    Set Foto = Me.Pictures.Insert(ruta)
    With Range("B7:E12")
    Arriba = .Top
    Izquierda = .Left
    Ancho = .Offset(0, .Columns.Count).Left - .Left
    Alto = .Offset(.Rows.Count, 0).Top - .Top
    End With
    With Foto
    .Name = "Foto"
    .Top = Arriba
    .Left = Izquierda
    .Width = Ancho
    .Height = Alto
    End With
    Set Foto = Nothing
    Application.ScreenUpdating = True
End If
End Sub
Tal cual me lo plantea copie y pegue mas no me cambia el color de la celda en el siguiente link esta el archivo haber si le puede hechar un ojo:
http://mx.geocities.com/alexbarron_79/FOTO_CREDENCIAL/foto_credencial_1.xls
El ejemplo que dejaste funciona sin ningún inconveniente en versión Excel 2003 y 2007.
En este link podrás verlo, ingresando nombres tanto en mayúsc como en minúsc.
http://es.geocities.com/lacibelesdepunilla/Ejemplos/ColorEnCeldas.jpg
Se me ocurre que quizás estés pensando que te hará los 2 cambios al mismo tiempo:
Es decir, si estás pensando que al ingresar la foto se actualiza la celda combinada F18, no hará el cambio de color.
El evento Change se ejecuta cuando ingresás manualmente un valor en esa celda.
Probalo de nuevo . Si bien se trata de celdas combinadas en estas versiones las reconoce como F18. No sé qué te está sucediendo.
Sdos
Elsa
Gracias Elsa. Justamente eso es lo que pretendo que se cambie automaticamente incluso ya no importa las minusculas.
Es decir:
Ingreso el numero de empleado y se inserta la foto y se ponen los datos obtenidos por BUSCARV y en la celda de "PUESTO" tengo que darle F2 para que se abra y TAB para que se genere el cambio de color.
Me gustaria que este cambio fuera automatico. :)
Ah, si, disculpa, no ví que tenía fórmula la celda F18, pensé que ingresabas el dato manualmente.
Así te queda entonces la rutina:
---------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [f7] Then Exit Sub
    Me.Shapes("Foto").Delete
    ruta = ThisWorkbook.Path & "\FOTOS\" & [f7] & ".jpg"
    Set Foto = Me.Pictures.Insert(ruta)
    With Range("B7:E12")
    Arriba = .Top
    Izquierda = .Left
    Ancho = .Offset(0, .Columns.Count).Left - .Left
    Alto = .Offset(.Rows.Count, 0).Top - .Top
    End With
    With Foto
    .Name = "Foto"
    .Top = Arriba
    .Left = Izquierda
    .Width = Ancho
    .Height = Alto
    End With
    Set Foto = Nothing
'aquí controla el cambio en F18, con OFFSET(fila,col), es decir OFFSET(11,0)
  If Target.Offset(11, 0).Value = "" Then Target.Offset(11, 0).Interior.ColorIndex = 0
  If Target.Offset(11, 0).Value = "PULIDO" Or Target.Offset(11, 0).Value = "pulido" Then Target.Offset(11, 0).Interior.ColorIndex = 29 'morado
  If Target.Offset(11, 0).Value = "AUXILIAR" Or Target.Offset(11, 0).Value = "auxiliar" Then Target.Offset(11, 0).Interior.ColorIndex = 9 'cafe9
  If Target.Offset(11, 0).Value = "MEDIO OFICIAL" Or Target.Offset(11, 0).Value = "medio oficial" Then Target.Offset(11, 0).Interior.ColorIndex = 51 'verde51
  If Target.Offset(11, 0).Value = "OFICIAL" Or Target.Offset(11, 0).Value = "oficial" Then Target.Offset(11, 0).Interior.ColorIndex = 25 'azul25
  If Target.Offset(11, 0).Value = "MAESTRO OFICIAL" Or Target.Offset(11, 0).Value = "maestro oficial" Then Target.Offset(11, 0).Interior.ColorIndex = 3 'rojo
  If Target.Offset(11, 0).Value = "SUPERVISOR" Or Target.Offset(11, 0).Value = "supervisor" Then Target.Offset(11, 0).Interior.ColorIndex = 46 'color46
  If Target.Offset(11, 0).Value = "JEFE DE PRODUCCION" Or Target.Offset(11, 0).Value = "jefe de produccion" Then Target.Offset(11, 0).Interior.ColorIndex = 1 'negro
  If Target.Offset(11, 0).Value = vbNullString Then Target.Offset(11, 0).Interior.ColorIndex = 0
Application.ScreenUpdating = True
End Sub
-------------------------
Si necesitas tu libro con la rutina, podés pedírmela al correo que encontrarás en mi sitio.
Elsa quiero extenderte mi mas amplio agradecimiento pues tu respuesta fue excelente me has dado una fantástica solución.
Te comento que sigo haciendo lo posible para que cuando este bloqueada la hoja me permita insertar la imagen y haga el cambio de color.
Saludos :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas