Здравствуйте. Нужно создать прогресс-бар для наглядности работы макроса. Нашел такой пример. [vba]
Код
Sub Progress() ' ' Progress Bar ' Dim intIndex As Integer Dim sngPercent As Single Dim intMax As Integer
intMax = 100 For intIndex = 1 To intMax sngPercent = intIndex / intMax ProgressStyle1 sngPercent, chkPg1Value.Value DoEvents '------------------------ ' Your code would go here '------------------------ Sleep 100 Next
End Sub
[/vba] Но не получается. Помогите, плиз.
Спасибо.
Здравствуйте. Нужно создать прогресс-бар для наглядности работы макроса. Нашел такой пример. [vba]
Код
Sub Progress() ' ' Progress Bar ' Dim intIndex As Integer Dim sngPercent As Single Dim intMax As Integer
intMax = 100 For intIndex = 1 To intMax sngPercent = intIndex / intMax ProgressStyle1 sngPercent, chkPg1Value.Value DoEvents '------------------------ ' Your code would go here '------------------------ Sleep 100 Next
Вообще-то очень удобно прогресс в статус-баре показывать. Вот у меня в заначке лежит несколько примеров:
[vba]
Код
Sub test1() For i = 1 To 10000 p = i \ 100 Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(8700)) DoEvents Next Application.StatusBar = False End Sub Sub test2() For i = 1 To 10000 p = i \ 100 Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(10000 + p \ 2)) DoEvents Next Application.StatusBar = False End Sub Sub test3() For i = 1 To 10000 p = i \ 100: S = "": For j = 10102 To 10102 + p \ 10: S = S & ChrW(j): Next Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub Sub test4() For i = 1 To 10000 p = i \ 100: S = String(p \ 10, ChrW(10152)) & String(11 - p \ 10, ChrW(8700)) Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub Sub test5() For i = 1 To 10000 p = i \ 100: S = String(p \ 10, ChrW(9632)) & String(11 - p \ 10, ChrW(9633)) Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub
Вообще-то очень удобно прогресс в статус-баре показывать. Вот у меня в заначке лежит несколько примеров:
[vba]
Код
Sub test1() For i = 1 To 10000 p = i \ 100 Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(8700)) DoEvents Next Application.StatusBar = False End Sub Sub test2() For i = 1 To 10000 p = i \ 100 Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(10000 + p \ 2)) DoEvents Next Application.StatusBar = False End Sub Sub test3() For i = 1 To 10000 p = i \ 100: S = "": For j = 10102 To 10102 + p \ 10: S = S & ChrW(j): Next Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub Sub test4() For i = 1 To 10000 p = i \ 100: S = String(p \ 10, ChrW(10152)) & String(11 - p \ 10, ChrW(8700)) Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub Sub test5() For i = 1 To 10000 p = i \ 100: S = String(p \ 10, ChrW(9632)) & String(11 - p \ 10, ChrW(9633)) Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next Application.StatusBar = False End Sub
Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.
Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.SLAVICK
Добрый день. Я тоже пользуюсь статусбаром, вот этот больше всего нравится [vba]
Код
Sub StatusBar3() Dim lr As Long Dim lAllCnt As Long 'кол-во итераций Const lMaxQuad As Long = 20 'сколько квадратов выводить lAllCnt = 10000
For lr = 1 To lAllCnt Application.StatusBar = "Выполнено: " & Int(100 * lr / lAllCnt) & "%" & String(CLng(lMaxQuad * lr / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * lr / lAllCnt), ChrW(9633)) DoEvents Next 'очищаем статус-бар от значений после выполнения Application.StatusBar = False End Sub
[/vba] взял тут, там достаточно много вариантов и с ЮзерФорм тоже
Добрый день. Я тоже пользуюсь статусбаром, вот этот больше всего нравится [vba]
Код
Sub StatusBar3() Dim lr As Long Dim lAllCnt As Long 'кол-во итераций Const lMaxQuad As Long = 20 'сколько квадратов выводить lAllCnt = 10000
For lr = 1 To lAllCnt Application.StatusBar = "Выполнено: " & Int(100 * lr / lAllCnt) & "%" & String(CLng(lMaxQuad * lr / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * lr / lAllCnt), ChrW(9633)) DoEvents Next 'очищаем статус-бар от значений после выполнения Application.StatusBar = False End Sub
[/vba] взял тут, там достаточно много вариантов и с ЮзерФорм тожеsboy
так ScreenUpdating, и DisplayStatusBar - это разные вещи. Конечно если вы его спрятали, то и не увидите.: Вот см так: [vba]
Код
Public Sub d() Application.ScreenUpdating = 0 Application.StatusBar = "111111: " ': DoEvents Application.ScreenUpdating = 1 Application.StatusBar = False End Sub
так ScreenUpdating, и DisplayStatusBar - это разные вещи. Конечно если вы его спрятали, то и не увидите.: Вот см так: [vba]
Код
Public Sub d() Application.ScreenUpdating = 0 Application.StatusBar = "111111: " ': DoEvents Application.ScreenUpdating = 1 Application.StatusBar = False End Sub
SLAVICK, по Вашему примеру создал макрос, который работает в простом примере. Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL". Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается. [vba]
'задаем путь к данным Dim myPath As String myPath = GetFolderPath 'Задаем часть имени файла - номер месяца Dim Month As String Month = Application.InputBox("Введите номер месяца", Type:=2) 'Задаем имя отчета Dim Gorod As Excel.Workbook Set Gorod = ThisWorkbook
'Вставляем таблицу 1 Dim filenameTEMP As String filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"
n = n + 1 / 2: p = 2 * n Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents
Application.ScreenUpdating = True Application.CutCopyMode = True Application.DisplayAlerts = True End Sub
Function GetFolderPath(Optional ByVal title As String = "Выберите папку", Optional ByVal initialPath As String = "P:\ФинДир\ОтделКонсолидации\Бюджет") As String Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right(initialPath, 1) = PS Then initialPath = initialPath & PS .ButtonName = "Выбрать": .title = title: .InitialFileName = initialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function
[/vba]
SLAVICK, по Вашему примеру создал макрос, который работает в простом примере. Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL". Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается. [vba]
'задаем путь к данным Dim myPath As String myPath = GetFolderPath 'Задаем часть имени файла - номер месяца Dim Month As String Month = Application.InputBox("Введите номер месяца", Type:=2) 'Задаем имя отчета Dim Gorod As Excel.Workbook Set Gorod = ThisWorkbook
'Вставляем таблицу 1 Dim filenameTEMP As String filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"
n = n + 1 / 2: p = 2 * n Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents
Application.ScreenUpdating = True Application.CutCopyMode = True Application.DisplayAlerts = True End Sub
Function GetFolderPath(Optional ByVal title As String = "Выберите папку", Optional ByVal initialPath As String = "P:\ФинДир\ОтделКонсолидации\Бюджет") As String Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right(initialPath, 1) = PS Then initialPath = initialPath & PS .ButtonName = "Выбрать": .title = title: .InitialFileName = initialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function