Привет всем кодерам на VBA! Возник несколько необычный вопрос (поиск по Интернету ничего не дал): В процессе написания программы столкнулся со следующей проблемой - во время работы необходимо несколько раз вызвать диалог открытия файлов Application.FileDialog(msoFileDialogOpen). После выбора файла(ов) окно диалога закрывается и продолжается работа. Пока не приходит момент выбора других файлов. Вот тут-то и начинается странное. Диалог не открывается, а просто открывает те же файлы, что были открыт в первый раз. Как можно очистить выбор файлов (или как правильно сказать)? Вот кусок программы, открывающий файлы. [vba]
Код
Dim N_Cnt As Integer Dim Fd_O As FileDialog Dim VSI As Variant
' Диалог открытия файла Set Fd_O = Application.FileDialog(msoFileDialogOpen)
' Сброс счётчика открытых файлов N_Cnt = 0
With Fd_O ' Только файлы EXCEL .Filters.Add "Только файлы Excel", "*.xls*" ' Задание начальной папки .InitialFileName = PS_Path Do For Each VSI In .SelectedItems ' Открытие файла для последующей обработки Workbooks.Open Filename:=VSI, Origin:=xlWindows ' Имя открытого файла S_Nam = ActiveWorkbook.Name ' Приращение счётчика открытых файлов N_Cnt = N_Cnt + 1 ' Копирование активного листа в книгу XXXXXXX ActiveSheet.Copy After:=Workbooks("XXXXXXX.xlsm").Sheets(N_Cnt) ' Закрытие активного файла Workbooks(S_Nam).Close False ' Переименование активного листа ActiveSheet.Name = "ФАЙЛ " & N_Cnt Next VSI Loop While .Show <> 0 End With
[/vba] На всякий случай поясняю, что PS_Path - общая переменная пути к файлу. Может я чего и накосячил, прошу строго не судить...
Привет всем кодерам на VBA! Возник несколько необычный вопрос (поиск по Интернету ничего не дал): В процессе написания программы столкнулся со следующей проблемой - во время работы необходимо несколько раз вызвать диалог открытия файлов Application.FileDialog(msoFileDialogOpen). После выбора файла(ов) окно диалога закрывается и продолжается работа. Пока не приходит момент выбора других файлов. Вот тут-то и начинается странное. Диалог не открывается, а просто открывает те же файлы, что были открыт в первый раз. Как можно очистить выбор файлов (или как правильно сказать)? Вот кусок программы, открывающий файлы. [vba]
Код
Dim N_Cnt As Integer Dim Fd_O As FileDialog Dim VSI As Variant
' Диалог открытия файла Set Fd_O = Application.FileDialog(msoFileDialogOpen)
' Сброс счётчика открытых файлов N_Cnt = 0
With Fd_O ' Только файлы EXCEL .Filters.Add "Только файлы Excel", "*.xls*" ' Задание начальной папки .InitialFileName = PS_Path Do For Each VSI In .SelectedItems ' Открытие файла для последующей обработки Workbooks.Open Filename:=VSI, Origin:=xlWindows ' Имя открытого файла S_Nam = ActiveWorkbook.Name ' Приращение счётчика открытых файлов N_Cnt = N_Cnt + 1 ' Копирование активного листа в книгу XXXXXXX ActiveSheet.Copy After:=Workbooks("XXXXXXX.xlsm").Sheets(N_Cnt) ' Закрытие активного файла Workbooks(S_Nam).Close False ' Переименование активного листа ActiveSheet.Name = "ФАЙЛ " & N_Cnt Next VSI Loop While .Show <> 0 End With
[/vba] На всякий случай поясняю, что PS_Path - общая переменная пути к файлу. Может я чего и накосячил, прошу строго не судить... Homo_Faber
Сообщение отредактировал Homo_Faber - Понедельник, 26.02.2024, 15:11
_Boroda_, Практически весь код выложил (касательно открытия файлов). После End with вставлял Set Fd_O = Nothing. Что с обманкой, что без обманки... [vba]
Код
Public Sub OtkrFile()
Dim N_Cnt As Integer Dim Fd_O As FileDialog Dim VSI As Variant
' Диалог открытия файла Set Fd_O = Application.FileDialog(msoFileDialogOpen)
' Сброс счётчика открытых файлов N_Cnt = 0
With Fd_O ' Только файлы EXCEL .Filters.Add "Только файлы Excel", "*.xls*" ' Задание начальной папки .InitialFileName = PS_Path Do For Each VSI In .SelectedItems ' Открытие файла для последующей обработки Workbooks.Open Filename:=VSI, Origin:=xlWindows
' Имя открытого файла S_Nam = ActiveWorkbook.Name ' Приращение счётчика открытых файлов N_Cnt = N_Cnt + 1 ' Копирование активного листа в книгу XXXXXXX ActiveSheet.Copy After:=Workbooks("XXXXXXX.xlsm").Sheets(N_Cnt) ' Закрытие активного файла Workbooks(S_Nam).Close False ' Переименование активного листа ActiveSheet.Name = "ФАЙЛ " & N_Cnt Next VSI Loop While .Show <> 0 End With
Set Fd_O = Nothing
End Sub
[/vba]
_Boroda_, Практически весь код выложил (касательно открытия файлов). После End with вставлял Set Fd_O = Nothing. Что с обманкой, что без обманки... [vba]
Код
Public Sub OtkrFile()
Dim N_Cnt As Integer Dim Fd_O As FileDialog Dim VSI As Variant
' Диалог открытия файла Set Fd_O = Application.FileDialog(msoFileDialogOpen)
' Сброс счётчика открытых файлов N_Cnt = 0
With Fd_O ' Только файлы EXCEL .Filters.Add "Только файлы Excel", "*.xls*" ' Задание начальной папки .InitialFileName = PS_Path Do For Each VSI In .SelectedItems ' Открытие файла для последующей обработки Workbooks.Open Filename:=VSI, Origin:=xlWindows
' Имя открытого файла S_Nam = ActiveWorkbook.Name ' Приращение счётчика открытых файлов N_Cnt = N_Cnt + 1 ' Копирование активного листа в книгу XXXXXXX ActiveSheet.Copy After:=Workbooks("XXXXXXX.xlsm").Sheets(N_Cnt) ' Закрытие активного файла Workbooks(S_Nam).Close False ' Переименование активного листа ActiveSheet.Name = "ФАЙЛ " & N_Cnt Next VSI Loop While .Show <> 0 End With
Homo_Faber, Application.FileDialog(msoFileDialogOpen).Show должен идти до обработки выбранных файлов, а не после. Попробуйте While .Show <> 0 записать после Do, а не после Loop.
Homo_Faber, Application.FileDialog(msoFileDialogOpen).Show должен идти до обработки выбранных файлов, а не после. Попробуйте While .Show <> 0 записать после Do, а не после Loop.Апострофф