А можно ли сохранить не в этом листе таблицы, а чтоб сохранялись отдельно на каждом листе
А разве сейчас не так?
Цитата (llluckyman)
лист был назван по названию таблицы
Гвозди 345 и гвозди 123 встречаются по два раза. Двух листов с одним именем быть не может. Если одинаковых таблиц не будет, то можно код добавить строкой. После строки [vba]
Код
Cells.Borders.LineStyle = xlNone
[/vba] вставить [vba]
Код
.Name = .Range("a5")
[/vba] Можно еще код немного сократить. Вместо строк [vba]
Код
With .Range("a5:h" & last) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With
А можно ли сохранить не в этом листе таблицы, а чтоб сохранялись отдельно на каждом листе
А разве сейчас не так?
Цитата (llluckyman)
лист был назван по названию таблицы
Гвозди 345 и гвозди 123 встречаются по два раза. Двух листов с одним именем быть не может. Если одинаковых таблиц не будет, то можно код добавить строкой. После строки [vba]
Код
Cells.Borders.LineStyle = xlNone
[/vba] вставить [vba]
Код
.Name = .Range("a5")
[/vba] Можно еще код немного сократить. Вместо строк [vba]
Код
With .Range("a5:h" & last) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With
Там все верно просто я имею ввиду чтобы таблица сохранялась на другом листе не в этой книге а в новой так наверно ну создавался новый файл с именем таблицы. дюбель.xlxs ржавый.xlsx и т.д.
Там все верно просто я имею ввиду чтобы таблица сохранялась на другом листе не в этой книге а в новой так наверно ну создавался новый файл с именем таблицы. дюбель.xlxs ржавый.xlsx и т.д.llluckyman
Там все верно просто я имею ввиду чтобы таблица сохранялась на другом листе не в этой книге а в новой так наверно ну создавался новый файл с именем таблицы. дюбель.xlxs ржавый.xlsx и т.д.
Там все верно просто я имею ввиду чтобы таблица сохранялась на другом листе не в этой книге а в новой так наверно ну создавался новый файл с именем таблицы. дюбель.xlxs ржавый.xlsx и т.д.llluckyman
Sub a() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Arr Arr = Sheets("Сопоставление").Range("A1:B100") Dim LastRow As Long, i As Long, j As Long, k As Long, last As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row: k = 1 For i = 1 To LastRow If LCase(Sheets(1).Cells(i, 1).Value) Like "*сумма*" Then Workbooks.Add xlWBATWorksheet 'создание книги с одним листом With ActiveWorkbook.Sheets(1) ThisWorkbook.Sheets(1).Range("a" & k & ":h" & i - 1).Copy (.Range("a5")) ThisWorkbook.Sheets(1).Range("j" & k + 2 & ":q" & i - 1).Copy (.Range("a" & i - k + 5)) .Cells.Borders.LineStyle = xlNone .Name = .Range("a5") last = .Cells(Rows.Count, 1).End(xlUp).Row .Range("a5:h" & last).Borders.LineStyle = xlContinuous .Columns("C:C").ColumnWidth = 30 .Range("D:E").EntireColumn.Delete .Range("a5:f5").MergeCells = True .Rows("6:6").HorizontalAlignment = xlCenter .Rows("4:6").Font.Bold = True .Rows("7:" & last).Font.Size = 10 .Range("a1").Value = "Накладная" .Range("a" & last + 2).Value = "Роспись в получении" For j = 1 To UBound(Arr) If Arr(j, 1) = .Range("a5") Then .Range("E4") = Arr(j, 2) Next j ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\" & .Range("a5") & ".xls") ActiveWorkbook.Close End With k = i + 1 End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba]
Посмотрите что получилось.
[vba]
Код
Sub a() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Arr Arr = Sheets("Сопоставление").Range("A1:B100") Dim LastRow As Long, i As Long, j As Long, k As Long, last As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row: k = 1 For i = 1 To LastRow If LCase(Sheets(1).Cells(i, 1).Value) Like "*сумма*" Then Workbooks.Add xlWBATWorksheet 'создание книги с одним листом With ActiveWorkbook.Sheets(1) ThisWorkbook.Sheets(1).Range("a" & k & ":h" & i - 1).Copy (.Range("a5")) ThisWorkbook.Sheets(1).Range("j" & k + 2 & ":q" & i - 1).Copy (.Range("a" & i - k + 5)) .Cells.Borders.LineStyle = xlNone .Name = .Range("a5") last = .Cells(Rows.Count, 1).End(xlUp).Row .Range("a5:h" & last).Borders.LineStyle = xlContinuous .Columns("C:C").ColumnWidth = 30 .Range("D:E").EntireColumn.Delete .Range("a5:f5").MergeCells = True .Rows("6:6").HorizontalAlignment = xlCenter .Rows("4:6").Font.Bold = True .Rows("7:" & last).Font.Size = 10 .Range("a1").Value = "Накладная" .Range("a" & last + 2).Value = "Роспись в получении" For j = 1 To UBound(Arr) If Arr(j, 1) = .Range("a5") Then .Range("E4") = Arr(j, 2) Next j ActiveWorkbook.SaveAs (ThisWorkbook.Path & "\" & .Range("a5") & ".xls") ActiveWorkbook.Close End With k = i + 1 End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Из рекомендаций составления примера в Правилах форума. "старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу". Строка в коде
Код
.Range("D:E").EntireColumn.Delete
появилась в Сообщении №5 наверно она вам была нужна, а теперь вы пишите что слово теряется. Вообще меня немного удивляла ваша таблица. В столбце дата дробное число, в столбце количество - дата ?????
Из рекомендаций составления примера в Правилах форума. "старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу". Строка в коде
Код
.Range("D:E").EntireColumn.Delete
появилась в Сообщении №5 наверно она вам была нужна, а теперь вы пишите что слово теряется. Вообще меня немного удивляла ваша таблица. В столбце дата дробное число, в столбце количество - дата ?????AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Да не в программировании дело. Первым делом надо самому понять что хочется получить, Составить пример по правилам. И уже потом спрашивать. Ваша задача несложная, но 30!!! сообщений, несколько вариантов макроса и как мне кажется это не конец. Предлагаю еще раз подумать что хотите получить, сделать пример и написать пожелания по работе макроса.
Да не в программировании дело. Первым делом надо самому понять что хочется получить, Составить пример по правилам. И уже потом спрашивать. Ваша задача несложная, но 30!!! сообщений, несколько вариантов макроса и как мне кажется это не конец. Предлагаю еще раз подумать что хотите получить, сделать пример и написать пожелания по работе макроса.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Задачи все те же разделать таблицу по листам но вы говорите так не получится хотя может поумать ? Вариант номер 2 разделать на одном листе но появилась вводная выводить сумму в столбце сумма Вот макрос удовлетворяющий варианту 2 но нужно что бы в колонке сумма подсчитывалась сумма.
[vba]
Код
Sub a() Dim LastRow As Integer, i As Integer, k As Integer, last As Integer LastRow = Cells(Rows.Count, 1).End(xlUp).Row: k = 1 For i = 1 To LastRow If LCase(Sheets(1).Cells(i, 1).Value) Like "*итого*" Then Sheets.Add After:=Sheets(Sheets.Count) With Sheets(Sheets.Count) Sheets(1).Range("a" & k & ":h" & i - 1).Copy (.Range("a5")) Sheets(1).Range("j" & k + 2 & ":q" & i - 1).Copy (.Range("a" & i - k + 5)) Cells.Borders.LineStyle = .Name = .Range("a5") last = .Cells(Rows.Count, 1).End(xlUp).Row With .Range("a5:h" & last) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With .Columns("C:C").ColumnWidth = 10 .Range("a5:f5").MergeCells = True .Rows("6:6").HorizontalAlignment = xlCenter .Range("G4").FormulaR1C1 = "=VLOOKUP(R[1]C[-6],сопоставление!C[-6]:C[-3],2,0)" .Range("a1").Value = "Накладная" .Range("a" & last + 2).Value = "Роспись в получении" .Range("a" & last + 4).Value = "__________________________________________________________________________" .Range("a" & last + 5).Value = "__________________________________________________________________________" .Range("a" & last + 6).Value = "__________________________________________________________________________" End With k = i + 1 End If Next End Sub
[/vba]
Задачи все те же разделать таблицу по листам но вы говорите так не получится хотя может поумать ? Вариант номер 2 разделать на одном листе но появилась вводная выводить сумму в столбце сумма Вот макрос удовлетворяющий варианту 2 но нужно что бы в колонке сумма подсчитывалась сумма.
[vba]
Код
Sub a() Dim LastRow As Integer, i As Integer, k As Integer, last As Integer LastRow = Cells(Rows.Count, 1).End(xlUp).Row: k = 1 For i = 1 To LastRow If LCase(Sheets(1).Cells(i, 1).Value) Like "*итого*" Then Sheets.Add After:=Sheets(Sheets.Count) With Sheets(Sheets.Count) Sheets(1).Range("a" & k & ":h" & i - 1).Copy (.Range("a5")) Sheets(1).Range("j" & k + 2 & ":q" & i - 1).Copy (.Range("a" & i - k + 5)) Cells.Borders.LineStyle = .Name = .Range("a5") last = .Cells(Rows.Count, 1).End(xlUp).Row With .Range("a5:h" & last) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With .Columns("C:C").ColumnWidth = 10 .Range("a5:f5").MergeCells = True .Rows("6:6").HorizontalAlignment = xlCenter .Range("G4").FormulaR1C1 = "=VLOOKUP(R[1]C[-6],сопоставление!C[-6]:C[-3],2,0)" .Range("a1").Value = "Накладная" .Range("a" & last + 2).Value = "Роспись в получении" .Range("a" & last + 4).Value = "__________________________________________________________________________" .Range("a" & last + 5).Value = "__________________________________________________________________________" .Range("a" & last + 6).Value = "__________________________________________________________________________" End With k = i + 1 End If Next End Sub
Я вот тут наваял один но как его слить с основным не знаю ))). Отдельно работает а вместе нет ((.
[vba]
Код
Sub ??????1() i = 7 j = 8 Do While Cells(i, j).Value <> "" amount = 0 Do While Cells(i, j).Value <> "" amount = amount + Cells(i, j).Value i = i + 1 Loop Cells(i, j).Value = amount j = j + 1 i = 1 Loop End Sub
[/vba]
Я вот тут наваял один но как его слить с основным не знаю ))). Отдельно работает а вместе нет ((.
[vba]
Код
Sub ??????1() i = 7 j = 8 Do While Cells(i, j).Value <> "" amount = 0 Do While Cells(i, j).Value <> "" amount = amount + Cells(i, j).Value i = i + 1 Loop Cells(i, j).Value = amount j = j + 1 i = 1 Loop End Sub
С вашей таблицей работать не должен. 1. В начальном варианте таблички делились по слову "сумма", теперь должно быть "итого" Это легко исправить. 2. В сообщении №21
Цитата (AlexM)
Гвозди 345 и гвозди 123 встречаются по два раза. Двух листов с одним именем быть не может.
То же правило касается и книг. В папке не должно быть книг с одинаковыми именами. В вашей таблице получается 3 книги "Гвозди" И по две "Рубанок" и "Молоток" Короче, нужен пример файла и не просто пример, а продуманный или надо изменить задание.
С вашей таблицей работать не должен. 1. В начальном варианте таблички делились по слову "сумма", теперь должно быть "итого" Это легко исправить. 2. В сообщении №21
Цитата (AlexM)
Гвозди 345 и гвозди 123 встречаются по два раза. Двух листов с одним именем быть не может.
То же правило касается и книг. В папке не должно быть книг с одинаковыми именами. В вашей таблице получается 3 книги "Гвозди" И по две "Рубанок" и "Молоток" Короче, нужен пример файла и не просто пример, а продуманный или надо изменить задание.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.