Здравствуйте. Нужно создать прогресс-бар для наглядности работы макроса. Нашел такой пример.
Sub Progress() ' ' Progress Bar ' Dim intIndex AsInteger Dim sngPercent AsSingle Dim intMax AsInteger
intMax = 100 For intIndex = 1To intMax
sngPercent = intIndex / intMax
ProgressStyle1 sngPercent, chkPg1Value.Value DoEvents '------------------------ ' Your code would go here '------------------------
Sleep 100 Next
EndSub
Но не получается. Помогите, плиз.
Спасибо.
Здравствуйте. Нужно создать прогресс-бар для наглядности работы макроса. Нашел такой пример.
Sub Progress() ' ' Progress Bar ' Dim intIndex AsInteger Dim sngPercent AsSingle Dim intMax AsInteger
intMax = 100 For intIndex = 1To intMax
sngPercent = intIndex / intMax
ProgressStyle1 sngPercent, chkPg1Value.Value DoEvents '------------------------ ' Your code would go here '------------------------
Sleep 100 Next
Вообще-то очень удобно прогресс в статус-баре показывать. Вот у меня в заначке лежит несколько примеров:
Sub test1() For i = 1To10000
p = i \ 100
Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(8700)) DoEvents Next
Application.StatusBar = False EndSub Sub test2() For i = 1To10000
p = i \ 100
Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(10000 + p \ 2)) DoEvents Next
Application.StatusBar = False EndSub Sub test3() For i = 1To10000
p = i \ 100: S = "": For j = 10102To10102 + p \ 10: S = S & ChrW(j): Next
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub Sub test4() For i = 1To10000
p = i \ 100: S = String(p \ 10, ChrW(10152)) & String(11 - p \ 10, ChrW(8700))
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub Sub test5() For i = 1To10000
p = i \ 100: S = String(p \ 10, ChrW(9632)) & String(11 - p \ 10, ChrW(9633))
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub
Вообще-то очень удобно прогресс в статус-баре показывать. Вот у меня в заначке лежит несколько примеров:
Sub test1() For i = 1To10000
p = i \ 100
Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(8700)) DoEvents Next
Application.StatusBar = False EndSub Sub test2() For i = 1To10000
p = i \ 100
Application.StatusBar = "Выполнено: " & p & "% " & String(p \ 10 + 1, ChrW(10000 + p \ 2)) DoEvents Next
Application.StatusBar = False EndSub Sub test3() For i = 1To10000
p = i \ 100: S = "": For j = 10102To10102 + p \ 10: S = S & ChrW(j): Next
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub Sub test4() For i = 1To10000
p = i \ 100: S = String(p \ 10, ChrW(10152)) & String(11 - p \ 10, ChrW(8700))
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub Sub test5() For i = 1To10000
p = i \ 100: S = String(p \ 10, ChrW(9632)) & String(11 - p \ 10, ChrW(9633))
Application.StatusBar = "Выполнено: " & p & "% " & S: DoEvents Next
Application.StatusBar = False EndSub
Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.
Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.SLAVICK
Добрый день. Я тоже пользуюсь статусбаром, вот этот больше всего нравится
Sub StatusBar3() Dim lr AsLong Dim lAllCnt AsLong'кол-во итераций Const lMaxQuad AsLong = 20'сколько квадратов выводить
lAllCnt = 10000
For lr = 1To 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 EndSub
взял тут, там достаточно много вариантов и с ЮзерФорм тоже
Добрый день. Я тоже пользуюсь статусбаром, вот этот больше всего нравится
Sub StatusBar3() Dim lr AsLong Dim lAllCnt AsLong'кол-во итераций Const lMaxQuad AsLong = 20'сколько квадратов выводить
lAllCnt = 10000
For lr = 1To 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 EndSub
взял тут, там достаточно много вариантов и с ЮзерФорм тожеsboy
SLAVICK, по Вашему примеру создал макрос, который работает в простом примере. Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL". Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается.
'задаем путь к данным Dim myPath AsString
myPath = GetFolderPath 'Задаем часть имени файла - номер месяца DimMonthAsString Month = Application.InputBox("Введите номер месяца", Type:=2) 'Задаем имя отчета Dim Gorod As Excel.Workbook Set Gorod = ThisWorkbook
Function GetFolderPath(OptionalByVal title AsString = "Выберите папку", OptionalByVal initialPath AsString = "P:\ФинДир\ОтделКонсолидации\Бюджет") AsString Dim PS AsString: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) IfNotRight(initialPath, 1) = PS Then initialPath = initialPath & PS
.ButtonName = "Выбрать": .title = title: .InitialFileName = initialPath If .Show <> -1ThenExitFunction
GetFolderPath = .SelectedItems(1) IfNotRight(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS EndWith EndFunction
SLAVICK, по Вашему примеру создал макрос, который работает в простом примере. Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL". Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается.
'задаем путь к данным Dim myPath AsString
myPath = GetFolderPath 'Задаем часть имени файла - номер месяца DimMonthAsString Month = Application.InputBox("Введите номер месяца", Type:=2) 'Задаем имя отчета Dim Gorod As Excel.Workbook Set Gorod = ThisWorkbook