excel vba per Mac non copia grafico su word

Anonimo
2025-02-20T11:30:25+00:00

Ho sviluppato una macro con Excel 365 VBA per Mac attraverso la quale copio delle tabelle su un file word e devo incollare due grafici in due posizioni distinte ed individuate nel documento di Word attraverso due Segnalibri ("Bookmarks").

Nel momento in cui faccio l'operazione Incolla da Excel VBA sul documento Word il sistema si blocca per qualche minuto e non esegue il comando richiesto.

Allego il listato in VBA, potete darmi una mano a capire dove sbaglio?

Nell'estratto del listato che allego il segnalibro su Word si chiama "Graficop2" ed il grafico di Excel che vorrei copiare su Word si chiama "Grafico1".

Grazie

1                Dim Apriword As Object

2                Dim Mydoc As Object

3                Dim Tabella1 As Table

4                On Error Resume Next

'Apro l'istanza Word

5                Set Apriword = GetObject(, "Word.Application")    'gives error 429 if Word is not open

5.1               If Err = 429 Then

5.2               Set Apriword = CreateObject("Word.Application")   'creates a Word application

5.3               Err.Clear

5.4               End If

'Definisco le variabili per il salvataggio del file Word

6 periodoini = Day(Worksheets("Maschera").Cells(3, "C")) & "-" & Month(Worksheets("Maschera").Cells(3, "C")) & "-" & _ Year(Worksheets("Maschera").Cells(3, "C")) 

7 periodofine = Day(Worksheets("Maschera").Cells(3, "D")) & "-" & Month(Worksheets("Maschera").Cells(3, "D")) & _

"-" & Year(Worksheets("Maschera").Cells(3, "D"))

'Apro il documento Word

8                With Apriword

9                .Visible = True

'Apro il documento Word Master

10         .Documents.Open FileName:=Percorso & "Analisi di gestione/" & ragione & "/Caso di studio - master EE.docx"

'Salvo il documento Word con nome in modo da compilarlo lasciando il documento Master disponibile per i successivi cicli

11         strfile = testodir & "/" & ragione & "/Elaborazione dal " & periodoini & " al " & periodofine & ".docx"

12         .ActiveDocument.SaveAs FileName:=strfile

 'Attivo la procedura di copia ed incolla del grafico da Excel a Word

13         Application.EnableEvents = False

14          .Selection.GoTo what:=wdGoToBookmark, Name:="Graficop2"

15         .ActiveDocument.Bookmarks("Graficop2").Select

16         Worksheets("Maschera").ChartObjects("Grafico 1").Activate

17         ActiveChart.PlotArea.Select

18         ActiveChart.ChartArea.Copy

19              Worksheets("Maschera").ChartObjects("Grafico 1").CopyPicture

20         .Selection.GoTo what:=wdGoToBookmark, Name:="Graficop2"

21                 .ActiveDocument.Bookmarks("Graficop2").Select

22                .ActiveDocument.Selection.Range.Paste

23         ActiveDocument.Save 'As Filename:=strfile

24         .ActiveDocument.Close

25         'chiudere word per le prossime analisi

26         .Quit wdDoNotSaveChanges

27         End with

28         Set Mydoc = Nothing

29         Set Apriword = Nothing

Ho provato anche a cambiare le dichiarazioni iniziali ponendo:

Dim Apriword as Word.Application

Dim Mydoc as Word.Document.Application

ma a quel punto il sistema va in crash nel momento in cui deve eseguire l'istruzione CreateObject.

Microsoft 365 e Office | Excel | Per il lavoro | MacOS

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Meno recente
  1. Anonimo
    2025-02-21T23:04:17+00:00

    Ciao,

    innanzitutto grazie del supporto. Eseguita la prova il risultato non è cambiato.

    Credo che la differenza di comportamento stia nella versione Mac degli strumenti Word ed Excel: non stanno dialogando.

    Ho fatto un altro test: ho eseguito la Subroutine su Excel fino all'istruzione:

    Worksheets("Maschera").ChartObjects("Grafico 1").CopyPicture Appearance:=xlPrinter, Format:=xlPicture 
    poi mi sono spostato su word ed ho fatto una macro di prova che contiene l'istruzione:
    ActiveDocument.Bookmarks("Graficop2").Range.Paste
    A questo punto il programma funziona.
    Ho pensato allora di creare un'istruzione di chiamata da excel alla Sub "prova" su Word:
    Apriword.Run ("prova")
    si è verificato nuovamente l'errore di automazione.
    A questo punto credo che il problema sia nel rapporto tra excel e word. La cosa strana è che i bookmarks di testo 
    o numerici vengono incollati bene. Il problema emerge quando excel e word dialogano sul grafico.
    Perchè?
    

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2025-02-22T07:15:39+00:00
    Perchè?
    

    Purtroppo non saprei.

    Con le versioni più recenti di office, nella versione Windows, mi è capitato che si avesse un errore di VBA in corrispondenza dell'istruzione di incollaggio nel range del bookmark. L'errore era dovuto dal fatto che l'immagine non venisse caricata in memoria e occorresse attendere un paio di decimi di secondo prima di passare all'istruzione di incollaggio.

    Ho risolto facendo trascorrere quel tempo tramite una sub di "delay".

    Te la riporto qui sotto:

    Public Sub TimerDelay(Optional Delay As Double)
    
      Const vDelay As Double = 0.25
    
      Dim vTimer As Double
    
      If Delay = 0 Then Delay = vDelay
    
      vTimer = Timer
    
      Do While Timer < vTimer + Delay
    
          DoEvents
    
      Loop
    
    End Sub
    

    Se chiamata senza il parametro il tempo di ritardo è prefissato 1/4 di secondo.

    Prova ad inserire l'istruzione "Call TimerDelay" dopo il "copypicture" e prima del "range.paste" e vedere se viene comunque prodotto l'errore vba.

    Inoltre hai provato a fare il "contrario"?

    Word che apre Excel, copia il grafico di Excel e lo riporta nel documento?

    Per vedere se anche così si presenta l'errore nel momento in cui si cerca di incollare il grafico nel documento?

    La risposta è stata utile?

    0 commenti Nessun commento