Добрый день. В книге два листа "Выгрузка" и "Регистр12". Есть вшитый в лист "Выгрузка" фильтр скрывающий строки листа "Регистр12": [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("Регистр12").Range("G3:G23").AutoFilter Field:=1, Criteria1:="<>0", VisibleDropDown:=0 End Sub
[/vba]
Есть код в книге сохраняющий лист "Регистр12" на рабочий стол:
[vba]
Код
Sub Save_list() ' Сохранение листа Sheets("Регистр12").Select ActiveSheet.Buttons.Delete Sheets("Регистр12").Copy Set wbReg = ActiveWorkbook Dim rRng As Range, rArea As Range Dim i As Integer i = 5 While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":E" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Selection.SpecialCells(12).Count > 0 Then Set rRng = Selection.SpecialCells(12) For Each rArea In rRng.Areas rArea.Value = rArea.Value Next rArea End If i = i + 1 Wend wbReg.SaveAs Filename:="d:\Users\user-zuk\Desktop\" & "Регистр12 " & Date & ".xlsx" wbReg.Close ActiveSheet.Buttons.Add(15.75, 6.75, 255, 25.5).Select Selection.OnAction = "ЭтаКнига.Save_list" Selection.Characters.Text = "Сохранить на рабочий стол" Range("F1").Select End Sub
[/vba]
Вопрос: Как удалить скрытые строки при сохранении листа в новую книгу. В иходной книге скрытые не трогать.
Добрый день. В книге два листа "Выгрузка" и "Регистр12". Есть вшитый в лист "Выгрузка" фильтр скрывающий строки листа "Регистр12": [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Sheets("Регистр12").Range("G3:G23").AutoFilter Field:=1, Criteria1:="<>0", VisibleDropDown:=0 End Sub
[/vba]
Есть код в книге сохраняющий лист "Регистр12" на рабочий стол:
[vba]
Код
Sub Save_list() ' Сохранение листа Sheets("Регистр12").Select ActiveSheet.Buttons.Delete Sheets("Регистр12").Copy Set wbReg = ActiveWorkbook Dim rRng As Range, rArea As Range Dim i As Integer i = 5 While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":E" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Selection.SpecialCells(12).Count > 0 Then Set rRng = Selection.SpecialCells(12) For Each rArea In rRng.Areas rArea.Value = rArea.Value Next rArea End If i = i + 1 Wend wbReg.SaveAs Filename:="d:\Users\user-zuk\Desktop\" & "Регистр12 " & Date & ".xlsx" wbReg.Close ActiveSheet.Buttons.Add(15.75, 6.75, 255, 25.5).Select Selection.OnAction = "ЭтаКнига.Save_list" Selection.Characters.Text = "Сохранить на рабочий стол" Range("F1").Select End Sub
[/vba]
Вопрос: Как удалить скрытые строки при сохранении листа в новую книгу. В иходной книге скрытые не трогать.mihalix
Пожалуйста, на счет скрытых строк, что-то у меня не получается их удалять, наверное потому что они скрыты автофильтром. Сделала так: выключила автофильтр и удалила строки, в которых итоговые значения = 0
[vba]
Код
Selection.AutoFilter While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":F" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) <> 0 Then For Each cell In Selection cell.Value = cell.Value Next cell ElseIf Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) = 0 Then Rows(i & ":" & i).Delete i = i - 1 End If i = i + 1 Wend
[/vba]
Кнопку удалила из созданной книги так: [vba]
Код
wbReg.Sheets(1).Buttons.Delete
[/vba]
Пожалуйста, на счет скрытых строк, что-то у меня не получается их удалять, наверное потому что они скрыты автофильтром. Сделала так: выключила автофильтр и удалила строки, в которых итоговые значения = 0
[vba]
Код
Selection.AutoFilter While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":F" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) <> 0 Then For Each cell In Selection cell.Value = cell.Value Next cell ElseIf Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) = 0 Then Rows(i & ":" & i).Delete i = i - 1 End If i = i + 1 Wend
Работает!, но один недочет если вдруг один из блоков весь окажется нулевым, строчки нулевых значений удаляются, и итоговая строка по блоку остается и значение выскакивает "#ссылка!". Можно как-то видоизменить, чтоб строка удалялась, если в столбце G стоит 0. (столбец G скрыт)
Работает!, но один недочет если вдруг один из блоков весь окажется нулевым, строчки нулевых значений удаляются, и итоговая строка по блоку остается и значение выскакивает "#ссылка!". Можно как-то видоизменить, чтоб строка удалялась, если в столбце G стоит 0. (столбец G скрыт)mihalix
ElseIf Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) = 0 Then
[/vba] Она расшифровывается так: Если в книге wbReg ячейка первого столбца в i-й строчке не содержит текст "Выручка" (т.е. не является итоговой) И сумма ранга D:F в i-й строчке = 0, тогда... и далее идет удаление i-й строчки.
Соответственно, если Вам нужно, чтобы итоговые строчки тоже удалялись, если сумма по ним = 0, то нужно убрать проверку на итоговую строчку из кода: [vba]
Код
ElseIf Application.Sum(Range("D" & i & ":F" & i)) = 0 Then
[/vba] ну, или ориентируясь на Ваш столбец G [vba]
Код
ElseIf Range("G" & i) = 0 Then
[/vba]
Найдите в коде строчку [vba]
Код
ElseIf Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) = 0 Then
[/vba] Она расшифровывается так: Если в книге wbReg ячейка первого столбца в i-й строчке не содержит текст "Выручка" (т.е. не является итоговой) И сумма ранга D:F в i-й строчке = 0, тогда... и далее идет удаление i-й строчки.
Соответственно, если Вам нужно, чтобы итоговые строчки тоже удалялись, если сумма по ним = 0, то нужно убрать проверку на итоговую строчку из кода: [vba]
Код
ElseIf Application.Sum(Range("D" & i & ":F" & i)) = 0 Then
[/vba] ну, или ориентируясь на Ваш столбец G [vba]
While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":E" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) <> 0 Then For Each cell In Selection cell.Value = cell.Value Next cell ElseIf Range("G" & i) = 0 Then Rows(i & ":" & i).Delete i = i - 1 End If i = i + 1 Wend
[/vba]
Но все равно ссылка выпадает. Что я сделал не так?
Вставил [vba]
Код
ElseIf Range("G" & i) = 0 Then
[/vba] :
[vba]
Код
While Range("A" & i) <> "" wbReg.Sheets(1).Range("D" & i & ":E" & i).Select On Error Resume Next If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" And Application.Sum(Range("D" & i & ":F" & i)) <> 0 Then For Each cell In Selection cell.Value = cell.Value Next cell ElseIf Range("G" & i) = 0 Then Rows(i & ":" & i).Delete i = i - 1 End If i = i + 1 Wend
[/vba]
Но все равно ссылка выпадает. Что я сделал не так?mihalix
Потому что я не углядела, что ошибка появляется раньше проверки)) Заменила все ячейки с ошибкой на "0", и вынесла цикл удаления строк отдельно. Файл прилагаю, проверяйте правильно ли.
Потому что я не углядела, что ошибка появляется раньше проверки)) Заменила все ячейки с ошибкой на "0", и вынесла цикл удаления строк отдельно. Файл прилагаю, проверяйте правильно ли.Manyasha
Manyasha, спасибо работает. Но вылез еще один нюанс, при адаптировании макроса к основной таблице выяснилось, что не во всех итоговых строках есть слово Выручка.
Если в книге wbReg ячейка первого столбца в i-й строчке не содержит текст "Выручка" (т.е. не является итоговой) И сумма ранга D:F в i-й строчке = 0, тогда... и далее идет замена формул на значение.
Как заменить на : Если значение в столбец B по i -ой строке не пустое,( то есть любое число или текст) , тогда... и далее идет замена формул на значение.
Manyasha, спасибо работает. Но вылез еще один нюанс, при адаптировании макроса к основной таблице выяснилось, что не во всех итоговых строках есть слово Выручка.
Если в книге wbReg ячейка первого столбца в i-й строчке не содержит текст "Выручка" (т.е. не является итоговой) И сумма ранга D:F в i-й строчке = 0, тогда... и далее идет замена формул на значение.
Как заменить на : Если значение в столбец B по i -ой строке не пустое,( то есть любое число или текст) , тогда... и далее идет замена формул на значение.mihalix
mihalix, ну Вы что-то совсем не хотите подумать, вопрос ведь совсем легкий. У Вас было условие: [vba]
Код
If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" ... Then
[/vba] Проверяется столбец А на содержание текста "Выручка". Теперь у Вас должен проверяться столбец В на отсутствие текста. Пустая ячейка в VBA обозначается так: "" Попробуйте поменять условие самостоятельно, если не получится - тогда помогу.
Я в Вас верю!)
[p.s.]Извините, увидела Ваше сообщение только после отправки своего. Вы МОЛОДЕЦ!
mihalix, ну Вы что-то совсем не хотите подумать, вопрос ведь совсем легкий. У Вас было условие: [vba]
Код
If Left(wbReg.Sheets(1).Range("A" & i), 7) <> "Выручка" ... Then
[/vba] Проверяется столбец А на содержание текста "Выручка". Теперь у Вас должен проверяться столбец В на отсутствие текста. Пустая ячейка в VBA обозначается так: "" Попробуйте поменять условие самостоятельно, если не получится - тогда помогу.
Я в Вас верю!)
[p.s.]Извините, увидела Ваше сообщение только после отправки своего. Вы МОЛОДЕЦ!Manyasha
ЯД: 410013299366744 WM: R193491431804
Сообщение отредактировал Manyasha - Среда, 04.02.2015, 11:43
Manyasha, надеюсь еще раз на Вашу помощь. Бывает идет несколько итоговых строк подряд первая остатся, вторая удаляется. На примере удаляется красная строка. Каким образом сделать чтоб она оставалась?
Manyasha, надеюсь еще раз на Вашу помощь. Бывает идет несколько итоговых строк подряд первая остатся, вторая удаляется. На примере удаляется красная строка. Каким образом сделать чтоб она оставалась?mihalix
И что? Строка-то на месте. Где про формулу упоминалось? [p.s.]И, кстати, о птичках. Не нужно мозги пудрить. В красной строке остается та-же самая формула.[/p.s.]
И что? Строка-то на месте. Где про формулу упоминалось? [p.s.]И, кстати, о птичках. Не нужно мозги пудрить. В красной строке остается та-же самая формула.[/p.s.]RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Четверг, 05.02.2015, 16:42
RAN, а без изменения формулы для красной строки никак не получится? Ибо для кого предназначен выгруженный отчет - долго будет осозновывать эту формулу.
RAN, а без изменения формулы для красной строки никак не получится? Ибо для кого предназначен выгруженный отчет - долго будет осозновывать эту формулу.mihalix
Формула в красной строке ссумирует итоги отдельных блоков, после выгрузки она слетает и уже суммирует не итоги по блоком, а какие то непонятные строки в блоках.
Цитата
тоже работает. Чем он Вам не понравился?)
Формула в красной строке ссумирует итоги отдельных блоков, после выгрузки она слетает и уже суммирует не итоги по блоком, а какие то непонятные строки в блоках.mihalix
Сообщение отредактировал mihalix - Пятница, 06.02.2015, 09:01