Добрый день.
Формирую реестры определенные процедурой, 1 раз запускается - выполняется, второй раз запускаешь - выдается ошибка 400. В окне выбираешь ОК - открывается лист и исходными данными (весь лист выделен), переходишь на основной лист с кнопками, пытаешься выполнить снова - выполняется.
Пытался очистить буфер обмена CutCopyMode, но не помогает = в буфере остаются сгенерированные файлы.
Формирую реестры определенные процедурой, 1 раз запускается - выполняется, второй раз запускаешь - выдается ошибка 400. В окне выбираешь ОК - открывается лист и исходными данными (весь лист выделен), переходишь на основной лист с кнопками, пытаешься выполнить снова - выполняется.
Пытался очистить буфер обмена CutCopyMode, но не помогает = в буфере остаются сгенерированные файлы.
| Код |
|---|
Public Sub BAK_BIK()
' Отключаем моргание экрана при выполнении
Application.ScreenUpdating = False Application.DisplayAlerts = False
' Очищаем буфер обмена
Application.CutCopyMode = False
' Получаем имя листа
RCVNAME = Worksheets("Макрос").Range("E2").Value
Dim lLastRow
Dim lLastCol ' Последняя строка
lLastRow = Worksheets(RCVNAME).UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
' Последний стобец
lLastCol = Worksheets(RCVNAME).UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1 Worksheets(RCVNAME).Select
Selection.AutoFilter
Worksheets(RCVNAME).Cells(lLastRow, lLastCol).AutoFilter Field:=17, Criteria1:="<>WARRANTOR"
Worksheets(RCVNAME).Cells(lLastRow, lLastCol).AutoFilter Field:=5, Criteria1:="=BAK" _
, Operator:=xlOr, Criteria2:="=BIK"
Worksheets(RCVNAME).Cells(lLastRow, lLastCol).AutoFilter Field:=7, Criteria1:="<>0"
' Создаем каталог
Dim folder
Dim folder2
Dim FilePath
FilePath = "BIK_BAK"' MkDir ThisWorkbook.Path + "\" + "BIK_BAK"
folder = ThisWorkbook.Path & "\" & FilePath ' MsgBox folder
' Если нет такого каталога, то создаем.
If CreateObject("Scripting.FileSystemObject").FolderExists(folder) = True Then
Else
MkDir folder
End If' Выбираем отфильтрованные столбцы
Worksheets(RCVNAME).Range("AS:AS,AW:AW,AX:AX,AY:AY,E:E,G:G,I:I").Copy
' Добавляем новый лист и вставляем на него скопированные данные
Sheets.Add(, Sheets(Sheets.Count)).Name = "BIK_BAK"
Worksheets("BIK_BAK").Paste
' Количество строк Dim Count_str As Integer
Dim Count_reestr As Integer
Dim Count_str_v_it As Integer Count_str = Application.WorksheetFunction.CountIfs(Sheets("BIK_BAK").Range("A:A"), "<>")
Count_reestr = Worksheets("Макрос").Range("G12").Value
Count_str_v_it = Fix((Count_str / Count_reestr)) + 1 ' fix, отбрасывает дробную часть, + 1 - когда не целое число получается
' MsgBox Count_str_v_it
Dim D_end As Integer
D_end = Count_str_v_it * Count_reestr Dim n1
n1 = 1
Dim i
For i = n1 To D_end Step Count_str_v_it
Worksheets("BIK_BAK").Range(Worksheets("BIK_BAK").Cells(i, 1), _
Worksheets("BIK_BAK").Cells(i + Count_str_v_it - 1, 7)).Copy
Sheets.Add(, Sheets(Sheets.Count)).Name = "BIK_BAK" & i
Worksheets("BIK_BAK" & i).Paste
' Подготавливаем данные для генерации файла
Dim Arr
Dim Headers
Arr = Worksheets("BIK_BAK" & i).Range("A1:G" & D_end).Value
Headers = Array("Тип", "DPD", "Регион", "ID клиента", "Имя", "Отчество", "Фамилия", "Код ручного обзвона")
SaveArray Arr, Headers, folder, "Реестр" & i ' создаём из массива Arr файл Excel с именем СКЛАД
' Отключаем уведомления
Application.DisplayAlerts = False
' Удаляем листы
Worksheets("BIK_BAK" & i).Delete
Next
' Удаляем листы
Worksheets("BIK_BAK").Delete Worksheets("Макрос").Activate
' Очищаем буфер обмена
Application.CutCopyMode = False
MsgBox ("Формирование завершено")
End Sub |