Я протестировал и попытался внедрить индикатор выполнения в мой макрос.Но почему-то индикатор выполнения не отображается, и сейчас я пытаюсь выяснить, почему.
Я реализовал индикатор выполнения и код во внешнем файле, где находится макрос, загружаемый при обновлении шаблонов.Кроме того, в макросе есть строка application.screenupdate = false.
Поэтому мне интересно, влияет ли эта последняя строка на индикатор выполнения.
Я пробовал это в самом шаблоне.индикатор выполнения отображается на 0%, но больше ничего не происходит.Когда я отменяю индикатор выполнения (нажмите «x» в правом верхнем углу индикатора выполнения), макрос продолжается.
это макрос, который выполняется во внешнем файле сценария:
Sub vernieuwalles(mytemplate As String)
Dim workbook_Name As Variant
Dim workbookdirectory As String
Dim activewb As String
Dim i As Integer
Dim counter As Integer
Windows(mytemplate).Activate
On Error GoTo Err_
UserForm1.Show
'Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Call SheetOpschonen
counter = 0
Call progress
Call datawissen
counter = counter + 1
Call progress
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Output Totaal" Then Call ASW
Next i
counter = counter + 1
Call progress
Call dataplaatsen
counter = counter + 1
Call progress
Call kolomtitels
counter = counter + 1
Call progress
Call toevoegen
counter = counter + 1
Call progress
Call maaktabel
counter = counter + 1
Call progress
Call refreshpivots
counter = counter + 1
Call progress
If ActiveWorkbook.ReadOnly = True Then ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
ActiveWorkbook.Application.DisplayAlerts = False
activewb = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)
workbookdirectory = "M:\Commercie\Marktdata\IRi\Segment Ontwikkeling\"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", InitialFileName:=workbookdirectory & activewb)
If workbook_Name <> False Then ActiveWorkbook.SaveAs Filename:=workbook_Name, FileFormat:=50
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
ActiveWorkbook.Application.DisplayAlerts = True
Exit_:
Application.StatusBar = ""
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
Err_:
Call MsgBox(Err.Number & vbCrLf & Err.Description)
Resume Exit_
Application.Calculation = xlCalculationAutomatic
End Sub
Для управления индикатором выполнения у меня есть этот код:
Sub code()
Dim pctCompl As Single
pctCompl = counter / 7
progress pctCompl
If pctCompl.Value = 1 Then Unload UserForm1
End Sub
Sub progress(pctCompl As Single)
UserForm1.Text.Caption = pctCompl & "Completed"
UserForm1.Bar.Width = pctCompl
DoEvents
'UserForm1.Hide
End Sub
шаблон self имеет этот код для запуска файла сценария:
Option Explicit
Sub vernieuwalles()
Dim myTemplate As String: myTemplate = ActiveWorkbook.Name
Dim myTool As String: myTool = "refresh_segment_template.xlsm"
Application.ScreenUpdating = False
Workbooks.Open GetPath & myTool
Application.Run myTool & "!vernieuwalles", myTemplate
Call Windows(myTool).Close(False)
Application.ScreenUpdating = True
End Sub
Private Function GetPath() As String
Dim myPosition As Integer
Dim myPath As String: myPath = ActiveWorkbook.Path
myPosition = InStr(StrReverse(myPath), "\") - 1
myPosition = Len(myPath) - myPosition
GetPath = Mid(myPath, 1, myPosition - 1) & "\XLAM\"
End Function
Теперь мне интересно, стоит ли запускать индикатор выполнения из внешнего файла сценария или из шаблона.Потому что, когда я запускаю его из шаблона, ничего не происходит, но индикатор выполнения отображается с 0%.
Форма пользователя (также) включена во внешний файл шаблона.Сценарий работает нормально, за исключением индикатора выполнения, который не отображается.И я не могу найти причину этого.
Метод обновления индикатора выполнения вдохновлен тем, что написано в учебном пособии на веб-сайте wellsr.