Изображение не показывается, пока суб не закончен - PullRequest
0 голосов
/ 27 января 2020

Я работаю над проектом в Excel, используя VBA. Я получаю листы из других рабочих тетрадей, что занимает немного времени. Для удобства пользователей я бы хотел показать картинку с надписью «Загрузка», пока приложение получает разные листы. Моя проблема в том, что картинка не отображается до того, как саб закончил. Я попытался устранить неполадки самостоятельно.

Я попытался запустить код, чтобы вставить картинку в другой вызываемый Sub. Я пытался добавить "DoEvents". Я пытался добавить приложение ждать. Я попробовал "ActiveWindow.SmallScroll" и "Application.Calculate" все без какой-либо удачи. Я не могу понять, почему картинка не будет отображаться при запуске кода.

Если я добавлю точку останова в коде, картинка покажет, когда я этого захочу. У меня нет идей и надеюсь, что вы мне поможете.

Это фрагмент моего кода:

    Sheet1.Activate
    Application.Goto Reference:=Range("a1"), Scroll:=True
    PicLoad = "PicLoad"
    Sheet1.Pictures.Insert(Pictures & PicLoad & ".jpg").Name = PicLoad & "_picture"
    Sheet1.Pictures(PicLoad & "_picture").Width = Application.Width
    Sheet1.Pictures(PicLoad & "_picture").Left = 0
    Sheet1.Pictures(PicLoad & "_picture").Top = 0
    Sheet1.Shapes(PicLoad & "_picture").Line.Visible = msoTrue
    Sheet1.Shapes(PicLoad & "_picture").Line.ForeColor.ObjectThemeColor = msoThemeColorText1
    Sheet1.Shapes(PicLoad & "_picture").Line.Weight = 1

    If ThisWorkbook.Path = requiredPath Then
        Application.Run "Module4.HideCal"
        For Each ws In ThisWorkbook.Worksheets 'Sletter alle worksheets undtagen nummer 1
            If ws.Index <> 1 Then
                ws.Delete
            End If
        Next
        thisName = ThisWorkbook.Name

        Workbooks.Open (requiredPath & "\" & fileComponents & "*.xl??"), ReadOnly:=True, CorruptLoad:=xlRepairFile  'f?r componenter ind
        fileComponents = ActiveWorkbook.Name
        total = Workbooks(thisName).Worksheets.Count
        Workbooks(fileComponents).Worksheets(1).Copy _
        after:=Workbooks(thisName).Worksheets(total)
        Workbooks(fileComponents).Close 

        *Continues getting worksheets from different workbooks..

Module4.HideCal содержит:

Application.DisplayAlerts = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Все работает точно так, как должно. Единственная проблема заключается в том, что изображение не отображается до тех пор, пока саб не закончится. Я хотел бы показать это перед оператором If.

С наилучшими пожеланиями

1 Ответ

1 голос
/ 27 января 2020

Проверьте ваш Application.ScreenUpdating - если это False, то вы сказали Excel , а не , чтобы показать это. Вам нужно будет попросить Excel перерисовать / обновить экран!

Один метод, который иногда заставляет экран перерисовываться, это:

Application.WindowState= Application.WindowState

Вы можете, просто на всякий случай, также захотеть переключать Application.ScreenUpdating вокруг этого:

Appliction.ScreenUpdating=True
Application.WindowState= Application.WindowState
Application.ScreenUpdating = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...