Мой код VBA работает с ListObjects в Excel 2010. Формулы в таблице представляют собой СУММЕСЛИМН, которые суммируют данные на основе значений первых нескольких столбцов (параметров).
Когда я получаю новые данные, макрос выполняет следующую процедуру:
- 1 - удаляет весь DataBodyRange таблицы
- 2-вставляет новые данные в столбцы параметров (это текстовые значения)
- 3-анализирует детализацию новых данных и составляет новые формулы
- 4 - заполняет формулы.
ПРОБЛЕМА: формулы не должны появляться до шага 3, но они выглядят так, как будто я никогда их не удалял. Это похоже на то, что у листобъекта есть какая-то кеш-память.
Кто-нибудь сталкивался с подобными проблемами?
Я сделаю пример файла, если никто не знает, что вам нужно. Кроме того, я много исследовал это здесь и в Google в целом, пока ничего не нашел.
Заранее благодарим вас за ответы!
С уважением, Лана
2 ответа
Да. Это зависит от того, как вы удаляете строки.
Если вы удалите с
ListObject.ListRows(n).Delete
Удаляются только данные, ссылки на формулы, которые на самом деле являются структурированными ссылками, в отличие от обычных формул Excel, сохраняются.
Вам нужно удалить его полностью, вы можете сделать что-то вроде
ListObject.DatabodyRange.ClearContents
ListOBject.DatabodyRange.Rows().Delete
Это должно решить вашу проблему
Он точно помнит, была ли формула в ListColumn. Я не уверен, это кеш или просто нераскрытое свойство ListColumn. Если вы явно установите для listcolumn значение vbNullString, вы можете эффективно очистить кеш.
Это ListObject из 12 столбцов, в котором в столбце 12 есть формула. Без назначения vbNullString столбец 12 заполняется формулой. Как есть, формула потеряна.
Sub TestLOFormulas()
Dim lo As ListObject
Dim arr(1 To 1, 1 To 11) As Variant
Set lo = Sheet1.ListObjects(1)
lo.DataBodyRange.EntireRow.Delete
'This line clears the 'cache'
lo.ListColumns(12).Range.Value = vbNullString
arr(1, 1) = 1
arr(1, 2) = 1
arr(1, 3) = 1
arr(1, 4) = 1
arr(1, 5) = 1
arr(1, 6) = 1
arr(1, 7) = 1
arr(1, 8) = 1
arr(1, 9) = 1
arr(1, 10) = 1
arr(1, 11) = 1
lo.InsertRowRange.Resize(1, 11).Value = arr
End Sub
Похожие вопросы
Новые вопросы
excel
Только для вопросов по программированию объектов или файлов Excel или по разработке формул. Вы можете комбинировать тег Excel с тегами и вопросами VBA, VSTO, C#, VB.NET, PowerShell, OLE и другими тегами и вопросами, связанными с программированием, если это применимо. НЕ используйте с другим программным обеспечением для работы с электронными таблицами, например [google-sheets].