Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заставить работать макрос в 2007 версии excel - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заставить работать макрос в 2007 версии excel (Макросы/Sub)
Заставить работать макрос в 2007 версии excel
Rakhot Дата: Четверг, 03.03.2016, 16:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я писал макрос для "автоматизации" анализа в лаборатории - выдергивания данных из файлов отчетов *.rtf и заполнение определенной таблицы в excel с последующим расчетом различных параметров. Дома на excel 2013 все прекрасно работает, на работе на 2007 версии выдает ошибку "Run-time error '1004': Aplication-defined or object-defined error" - модуль 3, 398 строка в примере. Вот кусок кода, в котором возникает ошибка:
[vba]
Код

For Each Sht In ActiveWorkbook.Worksheets
    flag = 0
      For k = 1 To 16
        If Sht.Name = Sh(1, k) Then
          LastRow = Sht.Cells(Rows.Count, 3).End(xlUp).Row
          If k < 9 Then kk = k + 10
          If k > 8 Then kk = k - 6
            For j = 0 To m - 1
                Sht.Cells(LastRow + 1 + j, 2) = DateValue(Now)
                Sht.Cells(LastRow + 1 + j, 3) = rab(0, j)
                Sht.Cells(LastRow + 1 + j, 4) = rab(kk, j)
                Sht.Cells(LastRow + 1 + j, 5) = lab(kk, j)
                Sht.Cells(LastRow + 1 + j, 6).FormulaR1C1Local = "=(RC4+RC5)/2"
                Sht.Cells(LastRow + 1 + j, 7).FormulaR1C1Local = "=RC4-RC5"
                Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1Local = Sh(2, k)
                Sht.Cells(LastRow + 1 + j, 8).FormulaR1C1Local = "=(RC6*RC9)/100"
                Sht.Cells(LastRow + 1 + j, 10).FormulaR1C1Local = "=ЕСЛИ((ABS(RC7))<=RC8;""удовл."";""неудовл."")"
            Next j                
          flag = 1
          If flag = 1 Then Exit For
        End If
      Next k
    Next Sht

[/vba]
Конкретно ругается на строку
[vba]
Код
Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1Local = Sh(2, k)
[/vba]
Массив Sh - массив такого тиа:
[vba]
Код
Sh(1, 1) = "Аммоний": Sh(2, 1) = "=ЕСЛИ(RC6<=0.05;34;ЕСЛИ(RC6<=0.25;25;ЕСЛИ(RC6<=2;17;ЕСЛИ(RC6<=10;14;ЕСЛИ(RC6<=5000;11;""не уст."")))))"
[/vba]
К сообщению приложен файл: __.xlsm(68Kb)
 
Ответить
СообщениеЯ писал макрос для "автоматизации" анализа в лаборатории - выдергивания данных из файлов отчетов *.rtf и заполнение определенной таблицы в excel с последующим расчетом различных параметров. Дома на excel 2013 все прекрасно работает, на работе на 2007 версии выдает ошибку "Run-time error '1004': Aplication-defined or object-defined error" - модуль 3, 398 строка в примере. Вот кусок кода, в котором возникает ошибка:
[vba]
Код

For Each Sht In ActiveWorkbook.Worksheets
    flag = 0
      For k = 1 To 16
        If Sht.Name = Sh(1, k) Then
          LastRow = Sht.Cells(Rows.Count, 3).End(xlUp).Row
          If k < 9 Then kk = k + 10
          If k > 8 Then kk = k - 6
            For j = 0 To m - 1
                Sht.Cells(LastRow + 1 + j, 2) = DateValue(Now)
                Sht.Cells(LastRow + 1 + j, 3) = rab(0, j)
                Sht.Cells(LastRow + 1 + j, 4) = rab(kk, j)
                Sht.Cells(LastRow + 1 + j, 5) = lab(kk, j)
                Sht.Cells(LastRow + 1 + j, 6).FormulaR1C1Local = "=(RC4+RC5)/2"
                Sht.Cells(LastRow + 1 + j, 7).FormulaR1C1Local = "=RC4-RC5"
                Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1Local = Sh(2, k)
                Sht.Cells(LastRow + 1 + j, 8).FormulaR1C1Local = "=(RC6*RC9)/100"
                Sht.Cells(LastRow + 1 + j, 10).FormulaR1C1Local = "=ЕСЛИ((ABS(RC7))<=RC8;""удовл."";""неудовл."")"
            Next j                
          flag = 1
          If flag = 1 Then Exit For
        End If
      Next k
    Next Sht

[/vba]
Конкретно ругается на строку
[vba]
Код
Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1Local = Sh(2, k)
[/vba]
Массив Sh - массив такого тиа:
[vba]
Код
Sh(1, 1) = "Аммоний": Sh(2, 1) = "=ЕСЛИ(RC6<=0.05;34;ЕСЛИ(RC6<=0.25;25;ЕСЛИ(RC6<=2;17;ЕСЛИ(RC6<=10;14;ЕСЛИ(RC6<=5000;11;""не уст."")))))"
[/vba]

Автор - Rakhot
Дата добавления - 03.03.2016 в 16:46
KuklP Дата: Четверг, 03.03.2016, 16:59 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2006
Репутация: 436 ±
Замечаний: 20% ±

Для начала проверьте missing библиотеки, как на картинке и снимите галки.

Еще в формулах можно попробовать поменять точки с запятыми на запятые.
К сообщению приложен файл: 2674191.gif(41Kb)


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 03.03.2016, 17:02
 
Ответить
СообщениеДля начала проверьте missing библиотеки, как на картинке и снимите галки.

Еще в формулах можно попробовать поменять точки с запятыми на запятые.

Автор - KuklP
Дата добавления - 03.03.2016 в 16:59
devilkurs Дата: Четверг, 03.03.2016, 17:04 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 38 ±
Замечаний: 0% ±

Excel 2007, 2010
Согласен.
в английском варианте формул аргументы функции идут через запятую, при этом при вставке в ячейку формула автоматом переходит на региональные настройки (в русском разделитель ";")

У меня был случай что не хотел FormulaR1C1Local вставлять длинную формулу, пока не уменьшил ее длину.




Сообщение отредактировал devilkurs - Четверг, 03.03.2016, 17:06
 
Ответить
СообщениеСогласен.
в английском варианте формул аргументы функции идут через запятую, при этом при вставке в ячейку формула автоматом переходит на региональные настройки (в русском разделитель ";")

У меня был случай что не хотел FormulaR1C1Local вставлять длинную формулу, пока не уменьшил ее длину.

Автор - devilkurs
Дата добавления - 03.03.2016 в 17:04
Rakhot Дата: Четверг, 03.03.2016, 18:02 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Библиотеку для Word сразу подключил, дело не в этом. Запятые/точки завтра проверю, хотя вроде специально дома региональные настройки выставлял такие же, как и на работе...
 
Ответить
СообщениеБиблиотеку для Word сразу подключил, дело не в этом. Запятые/точки завтра проверю, хотя вроде специально дома региональные настройки выставлял такие же, как и на работе...

Автор - Rakhot
Дата добавления - 03.03.2016 в 18:02
Manyasha Дата: Пятница, 04.03.2016, 10:15 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 1587
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
Rakhot, вариант с точками будет работать только на тех компьютерах, где разделитель целой и дробной части точка. С запятыми аналогично-только там, где разделитель запятая. Чтобы работала везде, можно переписать так:
[vba]
Код
Sh(2, 1) = "=IF(RC6<=0.05,34,IF(RC6<=0.25,25,IF(RC6<=2,17,IF(RC6<=10,14,IF(RC6<=5000,11,""не уст."")))))"
'...
Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1 = Sh(2, k)
[/vba]
UPD
Поправила формулу


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804


Сообщение отредактировал Manyasha - Пятница, 04.03.2016, 15:25
 
Ответить
СообщениеRakhot, вариант с точками будет работать только на тех компьютерах, где разделитель целой и дробной части точка. С запятыми аналогично-только там, где разделитель запятая. Чтобы работала везде, можно переписать так:
[vba]
Код
Sh(2, 1) = "=IF(RC6<=0.05,34,IF(RC6<=0.25,25,IF(RC6<=2,17,IF(RC6<=10,14,IF(RC6<=5000,11,""не уст."")))))"
'...
Sht.Cells(LastRow + 1 + j, 9).FormulaR1C1 = Sh(2, k)
[/vba]
UPD
Поправила формулу

Автор - Manyasha
Дата добавления - 04.03.2016 в 10:15
Rakhot Дата: Пятница, 04.03.2016, 15:10 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо всем большое, помогло, дело было действительно в точках :) Я так понимаю, судя по примеру, чтобы вариант с точками работал везде, достаточно первый "если" заменить на "If"?
 
Ответить
СообщениеСпасибо всем большое, помогло, дело было действительно в точках :) Я так понимаю, судя по примеру, чтобы вариант с точками работал везде, достаточно первый "если" заменить на "If"?

Автор - Rakhot
Дата добавления - 04.03.2016 в 15:10
Manyasha Дата: Пятница, 04.03.2016, 15:27 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 1587
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
Rakhot, нет, это я так невнимательно написала. Лучше заменить все функции на английские.
Формулу выше поправила.


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеRakhot, нет, это я так невнимательно написала. Лучше заменить все функции на английские.
Формулу выше поправила.

Автор - Manyasha
Дата добавления - 04.03.2016 в 15:27
StoTisteg Дата: Суббота, 05.03.2016, 21:44 | Сообщение № 8
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
поменять точки с запятыми на запятые

Или просто добавить строку
[vba]
Код
    Application.DecimalSeparator = "."
[/vba]
Ибо неисповедимы пути юзеровы...


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
Сообщение
поменять точки с запятыми на запятые

Или просто добавить строку
[vba]
Код
    Application.DecimalSeparator = "."
[/vba]
Ибо неисповедимы пути юзеровы...

Автор - StoTisteg
Дата добавления - 05.03.2016 в 21:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заставить работать макрос в 2007 версии excel (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!