Comprobar nombres de los gráficos de una hoja

Hola!
Estoy tratando de hacer una macro que compruebe si en una determinada hoja de un libro existe un gráfico de nombre determinado. El código que he probado, adaptado de cómo comprobar si existe una hoja con tal nombre en tal libro, no funciona, ¿así qué alguien me puede echar una mano, por favor?
Muchas gracias de antemano!
dim graf as string
graf="sgedad18"
Workbooks("Prueba RESULTADOS").Sheets("GRÁFICOS").Activate
Dim contador as byte
For contador = 1 To Worksheets("GRÁFICOS").ChartObjects.Count
   If Worksheets("GRÁFICOS").ChartObjects(contador).Parent.Name = graf Then
   'Ya existe el gráfico, así que pregunta al usuario si desea sustituirlo, en cuyo caso se <span style="white-space: pre;"> </span>procede a eliminar el original'
   Dim sustituir As Byte
        sustituir = MsgBox("Ya existe un gráfico sectorial para el intervalo 18-24 años." & <span style="white-space: pre;"> </span>Chr(13) & Chr(10) & Chr(13) & Chr(10) & "¿Desea sustituirlo?", vbYesNo, "Encuesta <span style="white-space: pre;"> </span>AVV")
            If sustituir = 6 Then
            'Si el usuario decide sustituirla, borra el gráfico existente y continua'
            Workbooks("Prueba RESULTADOS").Sheets("GRÁFICOS").ChartObjects("GENERAL").Delete
            End If
   End If
Next

1 respuesta

Respuesta
1
Si preguntas por el 'parent. Name' del gráfico, estás refiriéndote al nombre de su padre que es la página donde está, por lo que la expresión:
Worksheets("GRÁFICOS"). ChartObjects(contador). Parent. Name
siempre devuelve el valor 'GRÁFICOS'.
Quizás, lo que quieres sea el nombre del gráfico (si es que lo has podido poner), en cuyo caso se trataría de:
Worksheets("GRÁFICOS"). ChartObjects(contador). Name
Otro detalle. Pones que si sustituir es 6... que borre el gráfico anterior (para crear uno nuevo). ¿No sería más lógico que si responden que No salgas del procedimiento sin hacer nada?
Yo pondría lo siguiente (por cierto me gusta declarar al principio todas las variables, cuestión de gustos):
    Dim graf As String
    Dim contador As Byte
    Dim sustituir As Byte
    graf = "sgedad18"
    Workbooks("Prueba RESULTADOS").Sheets("GRÁFICOS").Activate
    For contador = 1 To Worksheets("GRÁFICOS").ChartObjects.Count
        If Worksheets("GRÁFICOS").ChartObjects(contador).Name = graf Then
        'Ya existe el gráfico, así que pregunta al usuario si desea sustituirlo, en cuyo caso se procede a eliminar el original'
            sustituir = MsgBox("Ya existe un gráfico sectorial para el intervalo 18-24 años." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "¿Desea sustituirlo?", vbYesNo, "Encuesta")
            If sustituir = vbNo Then Exit Sub
            'Si el usuario decide sustituirla, borra el gráfico existente y continua'
            Workbooks("Prueba RESULTADOS").Sheets("GRÁFICOS").ChartObjects("GENERAL").Delete
            Exit For ' Ya no buscamos más porque lo hemos encontrado y borrado
        End If
    Next
Hola Santiago,
Funcionó perfecto, así que muchas gracias! :D En cuanto a los del Sí o el No en el msgbox, si contestan que no, se hace otra cosa más (he cortado sólo la parte de código que no me tiraba).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas