Criação de Gráficos através de Macros

Prezados, solicito auxilio para a criação de gráficos através de macros. Estou desenvolvendo o código com auxílio do Chatgpt, pois não sei muito de programação.

Eu queria uma sub que crie um gráfico para mim dependendo da situação que a planilha se encontra, porém estou com alguma dificuldades:

1- o gráfico está sendo inserido com o fundo preto, ja tentei de tudo e não consigo mudar isso;

2- não está inserindo com a legenda visível, também já tentei de várias formas.

3- o tipo do gráfico que está sendo gerado é sempre de barras, não consigo alterar para outro (dispersão, linhas xy, por ex) apesar de ja ter tentado de várias formas.

4- toda vez que rodo o código, está vindo com a mensagem: O objeto não acessível.
Utilização inválida de um objeto. na linha:
oChart = oPlanilha.Charts.addNewByName(chart_name, rec, aAddresses, True, True)

segue a subs abaixo:

Dim rangeX As String

Sub ObterRangesX()
Dim oDoc As Object
Dim oPlanilha As Object
Dim ultimaLinha As Long
Dim i As Long
Dim nomeX As String
Dim resultado As String

' Obtém o documento atual (planilha)
oDoc = ThisComponent
oPlanilha = oDoc.Sheets.getByName("ANÁLISE")

' Obtém o nome dos dados X na linha 10, coluna A
nomeX = oPlanilha.getCellByPosition(0, 10).String

' Obtém a última linha da coluna A
ultimaLinha = oPlanilha.getRows().getCount() - 1
For i = 12 To ultimaLinha
    If oPlanilha.getCellByPosition(0, i).String = "" Then
        ultimaLinha = i - 1
        Exit For
    End If
Next i

' Define o intervalo X
rangeX = "A11:A" & (ultimaLinha + 1) ' Intervalo de A13 até A última linha não vazia

' Monta a mensagem com o nome e o intervalo de dados X
resultado = "Nome dos dados X: " & nomeX & Chr(10) & "Range: " & rangeX

' Mostra os dados em uma única mensagem
MsgBox resultado, 64, "Range X Obtido"

End Sub

Dim rangesY() As String

Sub ObterRangesY()
Dim oDoc As Object
Dim oPlanilha As Object
Dim ultimaLinha As Long
Dim i As Long, j As Long
Dim colunasY() As Long
Dim numColunas As Long
Dim contador As Long
Dim resultado As String

' Obtém o documento atual (planilha)
oDoc = ThisComponent
oPlanilha = oDoc.Sheets.getByName("ANÁLISE")

' Obtém a última linha da coluna A
ultimaLinha = oPlanilha.getRows().getCount() - 1
For i = 12 To ultimaLinha
    If oPlanilha.getCellByPosition(0, i).String = "" Then
        ultimaLinha = i - 1
        Exit For
    End If
Next i

' Verifica as colunas a partir da coluna E na linha 11
numColunas = oPlanilha.getColumns().getCount() - 1
contador = 0

' Coleta os índices das colunas com dados Y
For j = 4 To numColunas ' Começando da coluna E (índice 4)
    If oPlanilha.getCellByPosition(j, 10).String <> "" Then
        ReDim Preserve colunasY(contador)
        colunasY(contador) = j
        contador = contador + 1
    End If
Next j

' Inicializa o array de ranges
ReDim rangesY(0 To contador - 1)

' Monta a mensagem com os ranges de dados Y
resultado = "Ranges Y:" & Chr(10)

' Coleta os ranges Y correspondentes
For j = LBound(colunasY) To UBound(colunasY)
    Dim nomeY As String
    nomeY = oPlanilha.getCellByPosition(colunasY(j), 10).String ' Título da série Y

    ' Define o intervalo Y
    Dim startCell As String
    Dim endCell As String
    startCell = oPlanilha.getCellByPosition(colunasY(j), 12).getRangeAddress().StartColumn + 1 & _
                (12 ) ' Linha 13 (índice 12)
    endCell = oPlanilha.getCellByPosition(colunasY(j), ultimaLinha).getRangeAddress().StartColumn + 1 & _
              (ultimaLinha + 1)

    ' Converte os índices para letras de coluna
    Dim colunaLetra As String
    colunaLetra = Chr(65 + colunasY(j)) ' 65 é o código ASCII para 'A'

    rangesY(j) = colunaLetra & (11) & ":" & colunaLetra & (ultimaLinha + 1) ' Ajusta o formato do intervalo
    resultado = resultado & "Nome dos dados Y: " & nomeY & " - Range: " & rangesY(j) & Chr(10)
Next j

' Mostra os ranges em uma única mensagem
MsgBox resultado, 64, "Ranges Y Obtidos"

End Sub

Sub CriarGraficoComDados()
Dim oDoc As Object
Dim oPlanilha As Object
Dim oChart As Object
Dim rec As New com.sun.star.awt.Rectangle
Dim chart_name As String
Dim aAddresses() As Variant ’ Usar Variant para o array

' Obtém o documento atual (planilha)
oDoc = ThisComponent
oPlanilha = oDoc.Sheets.getByName("ANÁLISE")

' Define o nome do gráfico
chart_name = oPlanilha.getCellRangeByName("D9").getString()

' Verifica se o gráfico já existe
If oPlanilha.Charts.hasByName(chart_name) Then
    MsgBox "O gráfico já existe!", 64, "Erro"
    Exit Sub
End If

' Chama as subs para obter as ranges
ObterRangesX() ' Certifique-se de que esta sub preenche rangeX
ObterRangesY() ' Certifique-se de que esta sub preenche rangesY()

' Define a posição e o tamanho do gráfico
With rec
    .X = 810
    .Y = 6100
    .Width = 25000
    .Height = 12500
End With


' Inicializa o array de endereços
Dim numSeries As Long
numSeries = UBound(rangesY) - LBound(rangesY) + 1
ReDim aAddresses(numSeries) ' Um para X e os demais para Y

' Adiciona a range X
aAddresses(0) = oPlanilha.getCellRangeByName(rangeX).RangeAddress

' Adiciona as ranges Y
Dim i As Long
For i = LBound(rangesY) To UBound(rangesY)
    aAddresses(i + 1) = oPlanilha.getCellRangeByName(rangesY(i)).RangeAddress
Next i

' Cria um novo gráfico com os dados
oChart = oPlanilha.Charts.addNewByName(chart_name, rec, aAddresses, True, True)

' Ajusta o título do gráfico
oChart.Title = "Gráfico com Dados"

' Define o fundo branco
oChart.BackgroundColor = RGB(255, 255, 255) ' Branco

' Define o tipo do gráfico como linha XY

' Alterar o tipo do gráfico
aChartDoc.setDiagram(aDiagram)

' Adiciona a legenda e define como visível
oChart.HasLegend = True
oChart.getLegend().setVisible(True)

MsgBox "Gráfico com dados criado com sucesso!", 64, "Sucesso"

End Sub

De uma olhada aqui…

6.9 Graficando datos