Создание прогресс-бара выполнения макроса
Viper25
Дата: Понедельник, 26.12.2016, 11:25 |
Сообщение № 21
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация:
4
±
Замечаний:
20% ±
Excel 2007
Разобрался. Работает.
Ответить
Сообщение Разобрался. Работает. Автор - Viper25 Дата добавления - 26.12.2016 в 11:25
Viper25
Дата: Понедельник, 26.12.2016, 14:11 |
Сообщение № 22
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация:
4
±
Замечаний:
20% ±
Excel 2007
Ругается: "Compile error: Variable not defined"
Option Explicit
Sub CreateFact()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False
'***Копируем данные из входящих БДР***
'задаем путь к входящим БДР
Dim myPath As String
myPath = GetFolderPath
'Задаем часть имени файла - номер месяца
Dim Month As String
Month = Application.InputBox("Введите номер месяца" , Type:=2 )
'Задаем имя отчета о префакте
Dim BDR_f As Excel.Workbook
Set BDR_f = ThisWorkbook
'***********************************
'Вставляем БДР АСК
Dim filenameASK As String
filenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx"
n = n + 1 / 2 : p = 2 * n
Application.StatusBar = "Выполнено: " & n * 100 & "% " & String (p, ChrW (8700 )): DoEvents
Workbooks.Open Filename:=filenameASK, UpdateLinks:=False
Workbooks(Month + "_БДР_f_АСК.xlsx" ).Worksheets("ФДР(USD)" ).Range("G9:WT253" ).Copy
BDR_f.Worksheets("АСК" ).Range("G10:WT254" ).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False , Transpose:=False
Workbooks(Month + "_БДР_f_АСК.xlsx" ).Close
'Вставляем БДР КРМ
Dim filenameKRM As String
filenameKRM = myPath + "\" + Month + "_БДР_f_КРМ.xlsx"
n = n + 1 / 2 : p = 2 * n
Application.StatusBar = "Выполнено: " & n * 100 & "% " & String (p, ChrW (8700 )): DoEvents
Workbooks.Open Filename:=filenameKRM, UpdateLinks:=False
Workbooks(Month + "_БДР_f_КРМ.xlsx" ).Worksheets("ФДР(USD)" ).Range("G9:WT253" ).Copy
BDR_f.Worksheets("КРМ" ).Range("G10:WT254" ).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False , Transpose:=False
Workbooks(Month + "_БДР_f_КРМ.xlsx" ).Close
Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True
End Sub
Function GetFolderPath(Optional ByVal title As String = "Выберите папку" , Optional ByVal initialPath As String = "c:\1\" ) 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
Ругается: "Compile error: Variable not defined"
Option Explicit
Sub CreateFact()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False
'***Копируем данные из входящих БДР***
'задаем путь к входящим БДР
Dim myPath As String
myPath = GetFolderPath
'Задаем часть имени файла - номер месяца
Dim Month As String
Month = Application.InputBox("Введите номер месяца" , Type:=2 )
'Задаем имя отчета о префакте
Dim BDR_f As Excel.Workbook
Set BDR_f = ThisWorkbook
'***********************************
'Вставляем БДР АСК
Dim filenameASK As String
filenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx"
n = n + 1 / 2 : p = 2 * n
Application.StatusBar = "Выполнено: " & n * 100 & "% " & String (p, ChrW (8700 )): DoEvents
Workbooks.Open Filename:=filenameASK, UpdateLinks:=False
Workbooks(Month + "_БДР_f_АСК.xlsx" ).Worksheets("ФДР(USD)" ).Range("G9:WT253" ).Copy
BDR_f.Worksheets("АСК" ).Range("G10:WT254" ).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False , Transpose:=False
Workbooks(Month + "_БДР_f_АСК.xlsx" ).Close
'Вставляем БДР КРМ
Dim filenameKRM As String
filenameKRM = myPath + "\" + Month + "_БДР_f_КРМ.xlsx"
n = n + 1 / 2 : p = 2 * n
Application.StatusBar = "Выполнено: " & n * 100 & "% " & String (p, ChrW (8700 )): DoEvents
Workbooks.Open Filename:=filenameKRM, UpdateLinks:=False
Workbooks(Month + "_БДР_f_КРМ.xlsx" ).Worksheets("ФДР(USD)" ).Range("G9:WT253" ).Copy
BDR_f.Worksheets("КРМ" ).Range("G10:WT254" ).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False , Transpose:=False
Workbooks(Month + "_БДР_f_КРМ.xlsx" ).Close
Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True
End Sub
Function GetFolderPath(Optional ByVal title As String = "Выберите папку" , Optional ByVal initialPath As String = "c:\1\" ) 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
Viper25
Сообщение отредактировал Viper25 - Понедельник, 26.12.2016, 15:22
Ответить
Сообщение Ругается: "Compile error: Variable not defined" [vba]
Option ExplicitSub CreateFact()Application.ScreenUpdating = FalseApplication.CutCopyMode = FalseApplication.DisplayAlerts = False'***Копируем данные из входящих БДР ***'задаем путь к входящим БДРDim myPath As StringmyPath = GetFolderPath 'Задаем часть имени файла - номер месяцаDim Month As StringMonth = Application.InputBox("Введите номер месяца"; Type :=2)'Задаем имя отчета о префактеDim BDR_f As Excel.WorkbookSet BDR_f = ThisWorkbook '***********************************'Вставляем БДР АСКDim filenameASK As StringfilenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx" n = n + 1 / 2: p = 2 * n Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p ; ChrW(8700)): DoEventsWorkbooks.Open Filename :=filenameASK ; UpdateLinks :=FalseWorkbooks(Month + "_БДР_f_АСК.xlsx").Worksheets("ФДР(USD)").Range("G9:WT253").CopyBDR_f.Worksheets("АСК").Range("G10:WT254").PasteSpecial Paste :=xlPasteValues ; Operation :=xlNone ; SkipBlanks _ :=False; Transpose :=FalseWorkbooks(Month + "_БДР_f_АСК.xlsx").Close 'Вставляем БДР КРМDim filenameKRM As StringfilenameKRM = myPath + "\" + Month + "_БДР_f_КРМ.xlsx" n = n + 1 / 2: p = 2 * n Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p ; ChrW(8700)): DoEventsWorkbooks.Open Filename :=filenameKRM ; UpdateLinks :=FalseWorkbooks(Month + "_БДР_f_КРМ.xlsx").Worksheets("ФДР(USD)").Range("G9:WT253").CopyBDR_f.Worksheets("КРМ").Range("G10:WT254").PasteSpecial Paste :=xlPasteValues ; Operation :=xlNone ; SkipBlanks _ :=False; Transpose :=FalseWorkbooks(Month + "_БДР_f_КРМ.xlsx").CloseApplication.ScreenUpdating = ТrueApplication.CutCopyMode = ТrueApplication.DisplayAlerts = ТrueEnd SubFunction GetFolderPath(Optional ByVal title As String = "Выберите папку"; Optional ByVal initialPath As String = "c:\1\") As StringDim 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 WithEnd Function
[/vba] Автор - Viper25 Дата добавления - 26.12.2016 в 14:11
Alex_ST
Дата: Понедельник, 26.12.2016, 14:32 |
Сообщение № 23
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
Ну, естественно. Ведь после объявления
Dim filenameQQQ As String
в следующей строке Вы устанавливаете не его, а
filenameFlot = myPath + "\" + Month + "_f_Товары.xlsx"
поэтому filenameQQQ остаётся = "" и поэтому
Workbooks.Open Filename:=filenameQQQ
даёт ошибку. Внимательнее надо быть, когда переменные переименовываете.
Ну, естественно. Ведь после объявления
Dim filenameQQQ As String
в следующей строке Вы устанавливаете не его, а
filenameFlot = myPath + "\" + Month + "_f_Товары.xlsx"
поэтому filenameQQQ остаётся = "" и поэтому
Workbooks.Open Filename:=filenameQQQ
даёт ошибку. Внимательнее надо быть, когда переменные переименовываете. Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Ответить
Сообщение Ну, естественно. Ведь после объявления [vba]
Dim filenameQQQ As String
[/vba] в следующей строке Вы устанавливаете не его, а [vba]
filenameFlot = myPath + "\" + Month + "_f_Товары.xlsx"
[/vba] поэтому filenameQQQ остаётся = "" и поэтому [vba]
Workbooks.Open Filename :=filenameQQQ
[/vba] даёт ошибку. Внимательнее надо быть, когда переменные переименовываете. Автор - Alex_ST Дата добавления - 26.12.2016 в 14:32
Alex_ST
Дата: Понедельник, 26.12.2016, 14:35 |
Сообщение № 24
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
И, к стати, посты с содержанием "разобрался" абсолютно не несут никакой информации для других, читающих топик. Если уж задали вопрос и на него начали Вам отвечать либо по таймауту не можете свой вопрос скорректировать, то в правилах хорошего тона - писать, в чём была ошибка. Дабы другим понятно было и они не наступали на те же грабли.
И, к стати, посты с содержанием "разобрался" абсолютно не несут никакой информации для других, читающих топик. Если уж задали вопрос и на него начали Вам отвечать либо по таймауту не можете свой вопрос скорректировать, то в правилах хорошего тона - писать, в чём была ошибка. Дабы другим понятно было и они не наступали на те же грабли. Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Ответить
Сообщение И, к стати, посты с содержанием "разобрался" абсолютно не несут никакой информации для других, читающих топик. Если уж задали вопрос и на него начали Вам отвечать либо по таймауту не можете свой вопрос скорректировать, то в правилах хорошего тона - писать, в чём была ошибка. Дабы другим понятно было и они не наступали на те же грабли. Автор - Alex_ST Дата добавления - 26.12.2016 в 14:35
Viper25
Дата: Понедельник, 26.12.2016, 15:12 |
Сообщение № 25
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация:
4
±
Замечаний:
20% ±
Excel 2007
Alex_ST , я ни в коем случае не хочу никого обидеть. Наоборот, спасибо за подсказки. Отредактировал свой предыдущий пост. По данному коду ругается на параметр "n".
Alex_ST , я ни в коем случае не хочу никого обидеть. Наоборот, спасибо за подсказки. Отредактировал свой предыдущий пост. По данному коду ругается на параметр "n".Viper25
Ответить
Сообщение Alex_ST , я ни в коем случае не хочу никого обидеть. Наоборот, спасибо за подсказки. Отредактировал свой предыдущий пост. По данному коду ругается на параметр "n".Автор - Viper25 Дата добавления - 26.12.2016 в 15:12
Alex_ST
Дата: Понедельник, 26.12.2016, 15:47 |
Сообщение № 26
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
Да не в обиде дело, а в читателях, которые не могут понять, в чём была засада. Ну а уж если компилятор Вам прямо говорит, что не определена переменная n (а ещё, к стати и p) то задайте их в конце-концов
Dim n As Single , p As Single
Да не в обиде дело, а в читателях, которые не могут понять, в чём была засада. Ну а уж если компилятор Вам прямо говорит, что не определена переменная n (а ещё, к стати и p) то задайте их в конце-концов
Dim n As Single , p As Single
Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Ответить
Сообщение Да не в обиде дело, а в читателях, которые не могут понять, в чём была засада. Ну а уж если компилятор Вам прямо говорит, что не определена переменная n (а ещё, к стати и p) то задайте их в конце-концов [vba]
Dim n As Single , p As Single
[/vba] Автор - Alex_ST Дата добавления - 26.12.2016 в 15:47
Alex_ST
Дата: Понедельник, 26.12.2016, 16:04 |
Сообщение № 27
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
Блин! Терпеть не могу чужие коды без комментариев разбирать, тем более, когда они слеплены из кусков процедур, написанных разными авторами и для применения в других модулях! Да ещё и не видя файла с обрабатываемыми данными и не зная, что нужно получить Ну Вы хотя бы в пошаговом режиме пробегитесь по процедуре самостоятельно! После задания Dim n As Single, p As Single компилятор ругаться перестаёт. Но после выполнения строки
filenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx"
видно, что слэш там лишний, т.к. он уже добавлен функцией GetFolderPath в конец задаваемого пользователем пути ххххххххххххххххххххххххххххххххххххх И кто Вас учил конкатенацию делать то через амперсанд, то через + ?
Блин! Терпеть не могу чужие коды без комментариев разбирать, тем более, когда они слеплены из кусков процедур, написанных разными авторами и для применения в других модулях! Да ещё и не видя файла с обрабатываемыми данными и не зная, что нужно получить Ну Вы хотя бы в пошаговом режиме пробегитесь по процедуре самостоятельно! После задания Dim n As Single, p As Single компилятор ругаться перестаёт. Но после выполнения строки
filenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx"
видно, что слэш там лишний, т.к. он уже добавлен функцией GetFolderPath в конец задаваемого пользователем пути ххххххххххххххххххххххххххххххххххххх И кто Вас учил конкатенацию делать то через амперсанд, то через + ? Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 26.12.2016, 16:07
Ответить
Сообщение Блин! Терпеть не могу чужие коды без комментариев разбирать, тем более, когда они слеплены из кусков процедур, написанных разными авторами и для применения в других модулях! Да ещё и не видя файла с обрабатываемыми данными и не зная, что нужно получить Ну Вы хотя бы в пошаговом режиме пробегитесь по процедуре самостоятельно! После задания Dim n As Single, p As Single компилятор ругаться перестаёт. Но после выполнения строки [vba]
filenameASK = myPath + "\" + Month + "_БДР_f_АСК.xlsx"
[/vba] видно, что слэш там лишний, т.к. он уже добавлен функцией GetFolderPath в конец задаваемого пользователем пути ххххххххххххххххххххххххххххххххххххх И кто Вас учил конкатенацию делать то через амперсанд, то через + ? Автор - Alex_ST Дата добавления - 26.12.2016 в 16:04
Viper25
Дата: Вторник, 27.12.2016, 17:09 |
Сообщение № 28
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация:
4
±
Замечаний:
20% ±
Excel 2007
кто Вас учил конкатенацию делать то через амперсанд, то через +
Сотрудник, написавший код, уволился. Теперь я пытаюсь код улучшить. А поскольку нормальный материал по макросам в инете не нашел, пытаюсь сам разобраться. Спасибо форумчанам за поддержку.
кто Вас учил конкатенацию делать то через амперсанд, то через +
Сотрудник, написавший код, уволился. Теперь я пытаюсь код улучшить. А поскольку нормальный материал по макросам в инете не нашел, пытаюсь сам разобраться. Спасибо форумчанам за поддержку.Viper25
Ответить
Сообщение кто Вас учил конкатенацию делать то через амперсанд, то через +
Сотрудник, написавший код, уволился. Теперь я пытаюсь код улучшить. А поскольку нормальный материал по макросам в инете не нашел, пытаюсь сам разобраться. Спасибо форумчанам за поддержку.Автор - Viper25 Дата добавления - 27.12.2016 в 17:09
Alex_ST
Дата: Вторник, 27.12.2016, 21:11 |
Сообщение № 29
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация:
622
±
Замечаний:
0% ±
2003
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 28.12.2016, 16:22
Ответить
Viper25
Дата: Среда, 28.12.2016, 16:06 |
Сообщение № 30
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация:
4
±
Замечаний:
20% ±
Excel 2007
Alex_ST , спасибо. Буду заглядывать.
Alex_ST , спасибо. Буду заглядывать.Viper25
Ответить
Сообщение Alex_ST , спасибо. Буду заглядывать.Автор - Viper25 Дата добавления - 28.12.2016 в 16:06