день добрый. есть рабочий макрос - разбивает таблицу на балансы (по столбцу -Балансы) и сохраняет новыми книгами делал не сам (по заказу), все устраивает но хочется подправить - 1. в новые файлы чтоб вставлялись не все столбцы а до столбца - AJ (остальные столбцы вспомогательные и не нужны в тех файлах) 2. в новых файлах над шапкой таблицы что бы вставлялись не все данные, только из диапазона A7:D11
макрос запускается кнопкой -Разбить первый файл в котором макрос второй то что получается
день добрый. есть рабочий макрос - разбивает таблицу на балансы (по столбцу -Балансы) и сохраняет новыми книгами делал не сам (по заказу), все устраивает но хочется подправить - 1. в новые файлы чтоб вставлялись не все столбцы а до столбца - AJ (остальные столбцы вспомогательные и не нужны в тех файлах) 2. в новых файлах над шапкой таблицы что бы вставлялись не все данные, только из диапазона A7:D11
макрос запускается кнопкой -Разбить первый файл в котором макрос второй то что получаетсяmicholap_denis
Знатоки посмотрите пожалуйста, не пойму почему макрос не пашет...и как подправить свои хотелки.. то ошибка 400 то при выполнении останавливается на строке [vba]
Sub РазбитьнаБалансы() If expired Then Exit Sub SUBP = Application.ScreenUpdating CABP = Application.Calculation Application.ScreenUpdating = False Application.Calculation = xlCalculationManual If Val(Application.Version) >= 12 Then appfileformat = ".xlsx" Else appfileformat = ".xls" End If Set newrqstbk = onewsbk ThisWorkbook.Worksheets("ФБ").Copy before:=newrqstbk.Worksheets(1) ActiveWorkbook.Worksheets("ФБ").AutoFilter.ShowAllData ActiveWorkbook.Worksheets("ФБ").ListObjects("Баланс1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("ФБ").ListObjects("Баланс1").Sort.SortFields.Add key _ :=Range("Баланс[Баланс]"), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal ActiveWorkbook.Worksheets("ФБ").ListObjects("Баланс1").Sort.SortFields.Add key _ :=Range("Баланс[Дата платежа]"), SortOn:=xlSortOnValues, Order:= _ xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("ФБ").ListObjects("Баланс1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWorkbook.Worksheets("ФБ").UsedRange.Copy ActiveWorkbook.Worksheets("ФБ").UsedRange.Select Selection.PasteSpecial Paste:=xlPasteValues driver_col = "T" savepath = ThisWorkbook.Path + "\" + "Балансы\" If Not ExistDir(savepath) Then MkDir (savepath) Dim namearr() Dim fnamearr() li = 12 ti = 13 splitcol = driver_col Set newrqst = newrqstbk.Worksheets(1) lr = newrqst.UsedRange.Row + newrqst.UsedRange.Rows.Count For i = 13 To lr If i = lr Or newrqst.Cells(i, splitcol) <> newrqst.Cells(i + 1, splitcol) Then Set tempbk = onewsbk newrqst.Rows("7:12").Copy tempbk.Activate tempbk.Worksheets(1).Activate tempbk.Worksheets(1).Rows(1).Select Selection.PasteSpecial Paste:=xlPasteValues Selection.PasteSpecial Paste:=xlPasteFormats Selection.PasteSpecial Paste:=xlPasteColumnWidths Range("D2:D5").FormulaR1C1 = "=SUMPRODUCT(SUBTOTAL(3,OFFSET(R7C4,ROW(INDIRECT(""1:""&ROWS(R7C4:R" + CStr(lr) + "C4)))-1,))*R7C4:R" + CStr(lr) + "C4*(R7C34:R" + CStr(lr) + "C34=RC3))" Range("A5").FormulaR1C1 = "=COUNT(R7C1:R1048576C1)" Rows(6).Select Selection.AutoFilter newrqst.Rows(CStr(li + 1) + ":" + CStr(i)).Copy tempbk.Worksheets(1).Cells(7, 1).Select ActiveSheet.Paste tname = Mysaveas2(tempbk, savepath, "Баланс " + CStr(newrqst.Cells(i, splitcol)), appfileformat, getpass(newrqst.Cells(i, splitcol))) Workbooks(tname).Close True li = i End If Next i Application.ScreenUpdating = SUBP Application.Calculation = CABP Call MsgBox("end") End Sub
[/vba] сам не разберусь, знания поверхностные, все методом научного тыка)
Знатоки посмотрите пожалуйста, не пойму почему макрос не пашет...и как подправить свои хотелки.. то ошибка 400 то при выполнении останавливается на строке [vba]
В приложенном файле даже вручную не удаётся скопировать этот лист в новую книгу. Возможно, что-то сломалось) Попробуйте перенести данные в другую книгу
В приложенном файле даже вручную не удаётся скопировать этот лист в новую книгу. Возможно, что-то сломалось) Попробуйте перенести данные в другую книгуPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Pelena, посмотрите пожалуйста как подправить макрос с моими хотелками... 1. в новые файлы чтоб вставлялись не все столбцы а до столбца - AJ (остальные столбцы вспомогательные и не нужны в тех файлах) 2. в новых файлах над шапкой таблицы что бы вставлялись не все данные, только из диапазона A7:D11
Pelena, посмотрите пожалуйста как подправить макрос с моими хотелками... 1. в новые файлы чтоб вставлялись не все столбцы а до столбца - AJ (остальные столбцы вспомогательные и не нужны в тех файлах) 2. в новых файлах над шапкой таблицы что бы вставлялись не все данные, только из диапазона A7:D11micholap_denis
Проще всего скопировать лист целиком, потом удалить ненужное. [p.s.]Саму разбивку не исправляла, хотя думаю, что можно найти более оптимальный способ[/p.s.]
Проще всего скопировать лист целиком, потом удалить ненужное. [p.s.]Саму разбивку не исправляла, хотя думаю, что можно найти более оптимальный способ[/p.s.]Pelena
Pelena, в примере все отлично пашет, а в оригинальном файле при копировании листа сохраняются макросы из файла и реагируют на [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[/vba]
как подправить чтоб при копировании листа (с которого потом разбиваются на балансы) макросы не копировались или на это событие не реагировали
Pelena, в примере все отлично пашет, а в оригинальном файле при копировании листа сохраняются макросы из файла и реагируют на [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[/vba]
как подправить чтоб при копировании листа (с которого потом разбиваются на балансы) макросы не копировались или на это событие не реагировалиmicholap_denis
Sub d() Dim wb As Workbook, iVBComponent Sheets("ФБ").Copy
Set wb = ActiveWorkbook For Each iVBComponent In wb.VBProject.VBComponents With iVBComponent Select Case .Type Case 1 To 3: .Collection.Remove iVBComponent Case 100: .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End Select End With Next End Sub
Sub d() Dim wb As Workbook, iVBComponent Sheets("ФБ").Copy
Set wb = ActiveWorkbook For Each iVBComponent In wb.VBProject.VBComponents With iVBComponent Select Case .Type Case 1 To 3: .Collection.Remove iVBComponent Case 100: .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End Select End With Next End Sub
[/vba][sub] че то не пашет ... реально не знаю синтаксиса в VBA...нет времени разбираться, все чисто для себя методом тыка и ваших подсказок помощи делаю....
Pelena, подскажите пожалуйста,а как в строчке макроса [vba]
[/vba][sub] че то не пашет ... реально не знаю синтаксиса в VBA...нет времени разбираться, все чисто для себя методом тыка и ваших подсказок помощи делаю....micholap_denis
К колонкам можно адресоваться: * либо по одиночному буквенному обозначению * либо по одиночному числовому индексу * либо по одному буквенному диапазону (буквы через двоеточие) [vba]
[/vba] У диапазона же может быть составной адрес из нескольких буквенных диапазонов, перечисленных через запятую внутри кавычек. Итоговый диапазон в этом случае представляет собой объединение диапазонов, перчисленных через запятую. [vba]
Код
? Range("AK:AM,AQ:AS").Address $AK:$AM,$AQ:$AS
[/vba]Либо возможно пересечение диапазонов - через пробел, например, указанных строк и столбцов: [vba]
Код
? Range("AK:AM 2:4").Address $AK$2:$AM$4
[/vba]
К колонкам можно адресоваться: * либо по одиночному буквенному обозначению * либо по одиночному числовому индексу * либо по одному буквенному диапазону (буквы через двоеточие) [vba]
[/vba] У диапазона же может быть составной адрес из нескольких буквенных диапазонов, перечисленных через запятую внутри кавычек. Итоговый диапазон в этом случае представляет собой объединение диапазонов, перчисленных через запятую. [vba]
Код
? Range("AK:AM,AQ:AS").Address $AK:$AM,$AQ:$AS
[/vba]Либо возможно пересечение диапазонов - через пробел, например, указанных строк и столбцов: [vba]