Итак, имея эту структуру (начиная с A1 — показать фрагмент > запустить):
table {
border-color: #BBB;
border-width: 0px 0px 1px 1px;
border-style: dotted;
}
body {
font: 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #333;
}
td {
border-color: #BBB;
border-width: 1px 1px 0px 0px;
border-style: dotted;
padding: 3px;
}
<table>
<tbody>
<tr>
<th></th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
<tr>
<td>1</td>
<td>Title 1</td>
<td>Title 2</td>
<td>Title 3</td>
<td>Title 4</td>
</tr>
<tr>
<td>2</td>
<td>GH</td>
<td>1</td>
<td>434</td>
<td>4</td>
</tr>
<tr>
<td>3</td>
<td>TH</td>
<td>3</td>
<td>435</td>
<td>5</td>
</tr>
<tr>
<td>4</td>
<td>TH</td>
<td>4</td>
<td>4</td>
<td>6</td>
</tr>
<tr>
<td>5</td>
<td>LH</td>
<td>2</td>
<td>0</td>
<td>3</td>
</tr>
<tr>
<td>6</td>
<td>EH</td>
<td>2</td>
<td>5</td>
<td>36</td>
</tr>
</tbody>
</table>
Я написал некоторый код для преобразования этого диапазона (A1: D6) в ListObject, добавил 4 новых столбца и промежуточные итоги:
Function test()
Dim objLO As ListObject
Set objLO = ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$6"), , xlYes)
objLO.Name = "Recap"
objLO.TableStyle = "TableStyleMedium2"
objLO.ListColumns.Add (objLO.ListColumns.Count + 1)
objLO.HeaderRowRange(objLO.ListColumns.Count) = "Tot1"
objLO.ListColumns.Add (objLO.ListColumns.Count + 1)
objLO.HeaderRowRange(objLO.ListColumns.Count) = "Tot2"
objLO.ListColumns.Add (objLO.ListColumns.Count + 1)
objLO.HeaderRowRange(objLO.ListColumns.Count) = "Tot3"
objLO.ListColumns.Add (objLO.ListColumns.Count + 1)
objLO.HeaderRowRange(objLO.ListColumns.Count) = "Tot4"
objLO.ShowTotals = True
objLO.ListColumns("Tot1").TotalsCalculation = xlTotalsCalculationSum
objLO.ListColumns("Tot2").TotalsCalculation = xlTotalsCalculationSum
objLO.ListColumns("Tot3").TotalsCalculation = xlTotalsCalculationSum
objLO.ListColumns("Tot4").TotalsCalculation = xlTotalsCalculationSum
End Function
Теперь, если вы перейдете к любой ячейке новых столбцов и напишите несколько чисел, странно то, что ИТОГО (промежуточный итог) не обновляется; но если вы сохраните файл и снова откроете его, он будет работать, и итоги будут обновлены. Что мне не хватает?
Я уже пробовал перемещать ShowTotals после TotalCalculation, но поведение остается прежним.
Если мы теперь перестроим лист с нуля и добавим этот фрагмент кода для промежуточных итогов для столбцов b, c и d после применения стиля в предыдущем коде:
objLO.ListColumns("b").TotalsCalculation = xlTotalsCalculationSum
objLO.ListColumns("c").TotalsCalculation = xlTotalsCalculationSum
objLO.ListColumns("d").TotalsCalculation = xlTotalsCalculationSum
Я заметил, что промежуточные итоги для b, c и d работают, но не для Tot1, Tot2 и т. д.
Кажется, что единственным обходным путем является создание необработанной таблицы перед добавлением объекта ListObject со ссылками для его создания. Кто-нибудь знает лучшее решение?
Заранее спасибо :)