Промежуточные итоги могут не вставляться, например, по следующим причинам:
- нет столбцов "Статус" или "Изменена"
- таблица занимает все строки 1048576 на листе , для промежуточных итогов не осталось места
| Код |
|---|
Option Explicit 'В модуле обязательно объявлять переменные. Да, да, оказывается в VBA можно не объявлять переменные.
Sub Таблица_поумничай() 'Название макроса
CloseEmptyWb 'Вызов вспомогательной процедуры для закрытия "пустых" книг.
ActiveSheet.Copy 'Копируем активный лист в новую книгу.
Dim xx As Long, colName As Variant
For xx = ActiveSheet.UsedRange.Columns.Count To ActiveSheet.UsedRange.Column Step -1 'Перебираем столбцы с последнего до первого
For Each colName In Array("Приоритет", "Осталось на выполнение", "Категории") 'Перебираем названия столбцов для удаления
If Cells(1, xx).Value = colName Then 'Если значение в первой строке равно названию для удаления
Columns(xx).EntireColumn.Delete 'удаляем весь столбец
End If
Next
Next
If ActiveSheet.Shapes.Count > 0 Then ActiveSheet.Shapes(1).Delete 'Удаляем кнопку, которая скопировалась вместе с листом.
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Таблица1" 'Создаём умную таблицу.
Dim tb As ListObject
Set tb = ActiveSheet.ListObjects(ActiveSheet.ListObjects.Count)
tb.TableStyle = "TableStyleLight13" 'Задаём стиль умной таблицы
On Error Resume Next
tb.ShowTotals = True 'Отображаем строку итогов.
tb.ListColumns("Статус").TotalsCalculation = xlTotalsCalculationCount 'В строке итогов в столбце Статус ставим формулу подсчёта значений
tb.ListColumns("Изменена").TotalsCalculation = xlTotalsCalculationNone 'В строке итогов в столбце Изменена ставим формулу подсчёта значений
On Error GoTo 0
tb.Range.Select 'Выделяем диапазон умной таблицы.
End Sub
Private Sub CloseEmptyWb() 'Вспомогательная процедура для закрытия "пустых" книг.
Dim wb As Workbook
For Each wb In Application.Workbooks 'Перебираем книги в приложении
If wb.Path = "" Then wb.Close False 'Если книга не была ни разу сохранена, закрыть без сохранения.
Next
End Sub
|