Добрый день. Нашел на этом сайте макрос по своду нескольких таблиц из нескольких листов в одну общую. Но при увеличении числа листов она начинает выдавать ошибку. Вот сам код макроса с моей кастомизацией
У меня выходит от 30 до 40 листов в книге по 1 500 - 2 000 строк в каждом листе. Ошибка выдается из серии
Run-time error '-2147467259 *(800004005)'
Недопустимое имя '13$'. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным
Вроде бы везде увеличил диапазоны переменных чтоб они прожевывали такие большие таблицы. Поэтому не понимаю что в коде не так. Помогите пожалуйста
Код |
---|
Sub New_Multi_Table_Pivot() Dim i As Variant Dim arSQL() As Variant Dim objPivotCache As PivotCache Dim objRS As Variant Dim ResultSheetName As Variant Dim SheetsNames As Variant 'имя листа, куда будет выводиться результирующая сводная ResultSheetName = "Сводная" Dim s As Variant 'Ввод массива имен листов с исходными таблицами s = InputBox("Имена листов через запятую") s = Replace(s, ", ", ",") 'удаляем возможные пробелы после запятой SheetsNames = Split(s, ",") 'формируем кэш по таблицам с листов из SheetsNames With ActiveWorkbook ReDim arSQL(1 To (UBound(SheetsNames) + 1)) For i = LBound(SheetsNames) To UBound(SheetsNames) arSQL(i + 1) = "SELECT * FROM [" & SheetsNames(i) & "$]" Next i Set objRS = CreateObject("ADODB.Recordset") objRS.Open Join$(arSQL, " UNION ALL "), _ Join$(Array("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=", _ .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString) End With 'создаем заново лист для вывода результирующей сводной таблицы On Error Resume Next Application.DisplayAlerts = False Worksheets(ResultSheetName).Delete Set wsPivot = Worksheets.Add wsPivot.Name = ResultSheetName 'выводим на этот лист сводную по сформированному кэшу Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal) Set objPivotCache.Recordset = objRS Set objRS = Nothing With wsPivot objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3") Set objPivotCache = Nothing Range("A3").Select End With End Sub |
Run-time error '-2147467259 *(800004005)'
Недопустимое имя '13$'. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным
Вроде бы везде увеличил диапазоны переменных чтоб они прожевывали такие большие таблицы. Поэтому не понимаю что в коде не так. Помогите пожалуйста