Ciao
Ho un problema con copy.picture in vba excel, dovrei semplicemente copiare un determinato range da un file excel che apro in modo che non sia visibile, in un documento word.
Questa operazione devo ripeterla per molti file attraverso un loop, e quindi devo nascondere sia il file excel che il documento word, aperti durante il processo, per evitare effetti grafici poco piacevoli.
Provo a pubblicare una parte del codice per evidenziare il problema:
Public objExcel As Excel.Application
Public opjwkb As Workbook
Public objWord ' As Word.Application
Public objDoc ' As Word.Document
Sub copia_immagine()
link_exc = "c:/temp/pippo_d.xlsm" 'semplice --> pippo_2.xlsx,d_file --> pippo_d.xlsm,con macro --> pippo_2.xlsm
link_doc = "c:/temp/pippo_2.docx"
Set objWord = CreateObject("Word.Application") ' apro applicazione word
Set objExcel = CreateObject("Excel.Application")
Set opjwkb = objExcel.Workbooks.Open(link_exc) ' apro d-file
Set objDoc = objWord.Documents.Open(link_doc)
opjwkb.Application.CutCopyMode = False
a = opjwkb.Sheets(1).Cells(2, 1)
Call pp' sub con copia range
objDoc.SaveAs FileName:=("C:/temp/pippo_doc.docx")
opjwkb.Close SaveChanges:=False ' chiudo file d-card
objDoc.Close SaveChanges:=True ' chiudo file d-card
'objDoc.Close
Set objDoc = Nothing
Set objWord = Nothing
Set opjwkb = Nothing
Set objExcel = Nothing
MsgBox "fine"
End Sub
Sub PP
Sub pp()
objExcel.Visible = true
Do: DoEvents: Loop Until Application.Ready
opjwkb.Sheets(1).Range("A1:t50").CopyPicture 'xlScreen, xlBitmap
objExcel.Visible = False
Do: DoEvents: Loop Until Application.Ready
' copia immagine nel documento word
objWord.Selection.Paste
objWord.Selection.TypeParagraph
End Sub
il problema è che se rendo visibile il file excel , modificando la riga evidenziate in rosso, funziona correttamente se invece rendo invibile il file ottengo errore, più precisamente --> CopyPicture method of range class failed.
in riassunto:
objExcel.Visible = False --> Errore --> CopyPicture method of range class failed
objExcel.Visible = True --> OK
Come posso risolvere ?