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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заставить работать макрос в 2007 версии excel (Макросы/Sub)
Заставить работать макрос в 2007 версии excel
Rakhot Дата: Четверг, 03.03.2016, 16:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 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 (67.6 Kb)
 
Ответить
СообщениеЯ писал макрос для "автоматизации" анализа в лаборатории - выдергивания данных из файлов отчетов *.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
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

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

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


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


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

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

Автор - KuklP
Дата добавления - 03.03.2016 в 16:59
devilkurs Дата: Четверг, 03.03.2016, 17:04 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 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
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

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

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

Excel 2010, 2016
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
Поправила формулу


ЯД: 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
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

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

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

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


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

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

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

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


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
поменять точки с запятыми на запятые

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

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

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