Страницы: 1
RSS
VBA. Разница между автоматическим и пошаговым выполнением макроса.
 
Excel2016-64bit. Уже не первый раз сталкиваюсь с подобной проблемой, но не помню как она решается. При автоматическом запуске макроса (он может быть запущен с листа кнопкой "Gen Charts") почему-то не вставляется рисунок в область диаграммы(Diagram.Paste 5-я строка снизу в процедуре "Save_Chart2"). Но если сделать на этой команде точку останова, то все происходит без проблем. Подскажите хотя-бы в какую сторону копать.
Код
Sub main()
    Dim SheetAd1 As Worksheet
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set SheetAd1 = ThisWorkbook.Sheets.Add
    
    Call Save_Chart2("exampleChart", SheetAd1)
    Call Save_Chart2("exampleChart2", SheetAd1)
    
    SheetAd1.Delete
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Ready!!!"
End Sub



Sub Save_Chart2(ByVal NameFile As String, ByRef Sh1 As Worksheet)
    Dim pic As Object
    
    ThisWorkbook.Sheets("Charts").Activate
    ActiveSheet.Shapes.Range(Array("Select_area")).Select
    Selection.Copy
    Sh1.Activate
    Set pic = ActiveSheet.Pictures.Paste
    pic.Copy
    
    Set Diagram = Sh1.Shapes.AddChart().Chart
    
    Diagram.ChartArea.Height = pic.Height
    Diagram.ChartArea.Width = pic.Width
    Diagram.Paste
    Diagram.Export Filename:=ThisWorkbook.Path & "\" & NameFile & ".gif", FilterName:="GIF"
    pic.Delete
    Diagram.Parent.Delete
End Sub
 
Сергей Беляев, попробуйте вставить DoEvents перед проблемной строкой
 
а если Application.ScreenUpdating = False закомментировать?
 
Пробовал, не помогает ни одно, ни другое
Пробовал также 10-секундную задержку. Голову уже сломал, но не могу починить никак.
Изменено: Сергей Беляев - 12.11.2018 23:38:18
 
Макрос отсюда Как сохранить картинки из листа Excel в картинки JPG имеет не значительное отличие.
Но, может, дело в нем?
 
Это макрос работает не на всех компьютерах. Проблема в строке ниже, решил решить другим путем, получается головой теперь о стены бьюсь и не могу найти выход.
Код
With wsTmpSh.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart
Изменено: Сергей Беляев - 12.11.2018 23:38:47
 
Такой вопрос поднимался на новых версия офиса и систем.
Добрый человек специально даже статью написал и поделился ею.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
У меня не возникает ошибка. У меня просто не вставляется или вставляется пустота.
Если код приостановить до вставки изображения в Chart, то получается норма.
Изменено: Сергей Беляев - 12.11.2018 23:38:58
 
Сергей Беляев, у Вас память короткая. Всего пол-года не были на форуме, а уже забыли, что кнопка цитирования не для бездумного копирования предыдущих сообщений.
 

Отлично работает на 365 офисе.

Код
With wsTmpSh.ChartObjects.Add(0, 0, oObj.Width, oObj.Height).Chart
 
Привет!

Попробуйте заменить:
Код
    Diagram.ChartArea.Height = pic.Height
    Diagram.ChartArea.Width = pic.Width
    Diagram.Paste
    Diagram.Export Filename:=ThisWorkbook.Path & "\" & NameFile & ".gif", FilterName:="GIF"
    pic.Delete
    Diagram.Parent.Delete
на
Код
    With Diagram
        .ChartArea.Height = pic.Height
        .ChartArea.Width = pic.Width
        .Paste
        .Export Filename:=ThisWorkbook.Path & "\" & NameFile & ".gif", FilterName:="GIF"
        pic.Delete
        .Parent.Delete
    End With
и из Вашего фрагмента непонятно как объявлена Diagram

ещё фантазия:
Код
    Set Diagram = Sh1.Shapes.AddChart().Chart
    pic.Copy Diagram ' напрямую, без пасте
Сравнение прайсов, таблиц - без настроек
Страницы: 1
Наверх