Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 15:24   #1
Eddi
 
Регистрация: 01.05.2010
Сообщений: 5
По умолчанию Ошибка 1004 в макросе excel 2010

Добрый день,

Пытаюсь сделать макрос который переносит данные с одного листа на другой, при этом группируя данные и вставляя промежуточные итоги.

При выполнении возникает ошибка "run time error 1004: Application-defined or object-define error" в строке:
Код:
Worksheets(1).Cells(i + shapka + 1, NEx).FormulaLocal = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[" & -i + kBase - 1 & "]C:R[-1]C"
Сам макрос:
Код:
Sub formating()

Dim i, j, WidEx, NQu, NEx, kLine, kBase, x, s, shapka As Integer
Dim fileXLT, first, second As String

WidEx = 130

shapka = 8 'высота шапки
kLine = 0
kBase = 0
i = 0
 
 Do
        
        ' Первый уровень аналитики
        If Worksheets(1).Cells(i + shapka + 1, 2) <> Worksheets(1).Cells(i + shapka, 2) Then
        Worksheets(2).Range(Worksheets(2).Cells(i - kLine + 2, 1), Worksheets(2).Cells(i - kLine + 2, WidEx)).Copy
        Worksheets(1).Range(Worksheets(1).Cells(i + shapka + 1, 1), Worksheets(1).Cells(i + shapka + 1, WidEx)).Insert shift:=xlDown
        i = i + 1
        Excel.Application.Range(Worksheets(1).Cells(kLine + shapka, 1), Worksheets(1).Cells(i - 1 + shapka, 1)).EntireRow.Group
        'Worksheets(1).Cells(i + shapka, 2) = i - kLine + 2
        Worksheets(1).Cells(i + shapka, 2) = Worksheets(1).Cells(i + shapka - 1, 2)
        kLine = i + 1
        ' второй уровень аналитики
              If Worksheets(1).Cells(i + shapka + 1, 1) <> Worksheets(1).Cells(i + shapka - 1, 1) Then
              Worksheets(2).Range(Worksheets(2).Cells(57, 1), Worksheets(2).Cells(57, WidEx)).Copy
              Worksheets(1).Range(Worksheets(1).Cells(i + shapka + 1, 1), Worksheets(1).Cells(i + shapka + 1, WidEx)).Insert shift:=xlDown
              NEx = 5 'вставляем промежуточные итоги
                     Do
                      If NEx = 11 Or NEx = 15 Or NEx = 18 Or NEx = 32 Or NEx = 34 Or NEx = 40 Or NEx = 44 Or NEx = 47 Or NEx = 61 Or NEx = 63 Then NEx = NEx + 1
                      If NEx = 28 Or NEx = 57 Then NEx = NEx + 3
                      If NEx = 64 Then NEx = NEx + 21
                      If NEx = 96 Then NEx = NEx + 20
                      Worksheets(1).Cells(i + shapka + 1, NEx).FormulaLocal = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[" & -i + kBase - 1 & "]C:R[-1]C"
                      NEx = NEx + 1
                     Loop Until NEx > WidEx
              i = i + 1
              Worksheets(1).Cells(i + shapka, 1) = Worksheets(1).Cells(i + shapka - 2, 1)
              kBase = i + 1
              kLine = kLine + 1
              End If
        End If
 i = i + 1
 Loop Until Worksheets(1).Cells(i + shapka, 2) = 0
 
 
 'FINAL TOTAL
 Worksheets(2).Range(Worksheets(2).Cells(56, 1), Worksheets(2).Cells(56, WidEx)).Copy
 Worksheets(1).Range(Worksheets(1).Cells(i + shapka + 1, 1), Worksheets(1).Cells(i + shapka + 1, WidEx)).Insert shift:=xlDown
                   NEx = 5
                     Do
                     If NEx = 11 Or NEx = 15 Or NEx = 18 Or NEx = 32 Or NEx = 34 Or NEx = 40 Or NEx = 44 Or NEx = 47 Or NEx = 61 Or NEx = 63 Then NEx = NEx + 1
                      If NEx = 28 Or NEx = 57 Then NEx = NEx + 3
                      If NEx = 64 Then NEx = NEx + 21
                      If NEx = 96 Then NEx = NEx + 20
                      Worksheets(1).Cells(i + shapka + 1, NEx).FormulaLocal = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[" & -i - 1 & "]C:R[-1]C"
                      NEx = NEx + 1
                     Loop Until NEx > WidEx
 

Worksheets(1).PageSetup.PrintArea = "$A$1:$DZ$" & i + shapka + 1 & ""

End Sub
Прдскажите пожалуйста, как это исправить?
Eddi вне форума Ответить с цитированием
Старый 16.05.2014, 01:56   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Не подскажу, как исправить, а подскажу, как найти проблему.
Когда произойдет ошибка, выясните значение переменных в окне Locals (View - Locals Window) или просто наведя курсор на переменную i, shapka и т.д.
Можете распечатать формулу, которая создается: выделите и скопируйте фрагмент
Код:
"=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[" & -i + kBase - 1 & "]C:R[-1]C"
, перейдите в окно Immediate (Ctrl+G), нажмите ? Ctrl+V <Enter>
Проходите программу по шагам (F8).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 16.05.2014, 09:52   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А не нужно ли FormulaR1C1Local ?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.05.2014, 15:58   #4
Eddi
 
Регистрация: 01.05.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Когда произойдет ошибка, выясните значение переменных в окне Locals (View - Locals Window) или просто наведя курсор на переменную i, shapka и т.д.
Первым делом при обнаружении ошибки в режиме трассировки по коду начинаю ползать. В формуле все переменные проинициализированы, значения правильные. Проблема не в этом.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А не нужно ли FormulaR1C1Local ?
Ни какой разницы нет, по моему, другие формулы прекрасно встают и с FormulaR1C1Local и с FormulaLocal.

Во вложении пример выгружаемого отчета с макросом и то, что в итоге должно получиться.
Мне думается что я неправильно обращаюсь к ячейке, но как это сделать правильно до сих пор не понял.
Вложения
Тип файла: zip выгрузка.zip (313.1 Кб, 12 просмотров)
Тип файла: zip готовый отчет.zip (472.1 Кб, 10 просмотров)

Последний раз редактировалось Eddi; 18.05.2014 в 16:26.
Eddi вне форума Ответить с цитированием
Старый 18.05.2014, 17:12   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Ни какой разницы нет, по моему, другие формулы прекрасно встают и с FormulaR1C1Local и с FormulaLocal.
зря вы так...
используйте только FormulaR1C1Local - если у вас формулы на русском

исправьте в коде, и проверьте, будет ли ошибка


PS: гораздо быстрее формулу записывать сразу в несколько ячеек (диапазон),
а не перебирая ячейки в цикле
EducatedFool вне форума Ответить с цитированием
Старый 19.05.2014, 08:37   #6
Eddi
 
Регистрация: 01.05.2010
Сообщений: 5
По умолчанию

Ошибка остается при обоих вариантах FormulaLocal и FormulaR1C1Local.
Пробовал менять резделитель с ";" на "," также не помогло.
Eddi вне форума Ответить с цитированием
Старый 19.05.2014, 10:09   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

перед проблемной строкой добавьте строку
Код:
Debug.Print "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[" & -i - 1 & "]C:R[-1]C"
увидите в окне Immediate:
Цитата:
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[-5]C:R[-1]C
Вам не кажется, что в формуле не хватает закрывающейся скобки в конце?
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Run-time error '1004' в процедуре (Excel 2010) MDx64 Microsoft Office Excel 1 03.04.2014 14:56
ошибка "1004" в макросе при попытке обратиться к ячейке через метод End Прик Microsoft Office Excel 3 16.02.2013 13:08
Ошибка 1004 при обновлении данных из Access (VBA EXCEL) Kycaka Microsoft Office Excel 7 07.12.2012 10:30
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в Excel 2010 beta Aent Microsoft Office Excel 4 22.01.2010 17:07