Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ExecuteExcel4Macro Error 2023 VBA

8.8K
13 апреля 2005 года
Olenenok
10 / / 13.04.2005
Помогите, пожалуйста. За 2 дня уже начала биться головой и не могу сдвинуться с мертвой точки. Программа должна доставать данные из книг Экселя (соответственно из ячеек), они закреплены в одной строке, нужна сумма. Как поняла, самый простой способ и быстрее чем открытие-доставание-закрытие - это ExecuteExcel4Macro. Не могу с ним справиться, Ошибка вида 2023 #Ref.


Function GetValueFromClosed(temp, temp2)
Dim arg, temp6 As String
Dim r As Byte
Worksheets("bd").Activate
m = m + 2
temp6 = Cells(m, 1).Value
Application.ScreenUpdating = False
For r = 1 To 9
a = Cells(r, 1).Address
arg = "'" & temp & "\[MIS." & temp6 & "." & temp2 & ".xls]Teller1'!" & _
Range(a).Range("A1").Address(, , xlR1C1)
GetValueFromClosed = ExecuteExcel4Macro(arg) 'Error2023
Next r
End Function
425
14 апреля 2005 года
sq_deep
498 / / 18.02.2005
А не выдаёт ли сама макрокоманда, которую вы вызываете, Err.Raise 2023?
405
14 апреля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by Olenenok
Помогите, пожалуйста. За 2 дня ...



Никакие мои манипуляции с Вашим кодом не заставили Excel выдать сообщение об ошибке с указанным номером (экспериментировал с Excel 2000). Макрос работает. В связи с этим хотелось бы увидеть текст сообщения об ошибке и узнать версию Вашего офиса.
Поиск по базе Microsoft тоже не дал ничего утешительного: описание ошибки с таким кодом нашлось для Visual FoxPro, но не для VBA. Впрочем, ошибка с таким же кодом характерна и для Windows. Так что может быть не офис виноват, а именно ОС.
Мои советы:
- упростите имя файла-донора (ошибка FoxPro, например, связана с невозможностью сопоставить расширение файла какому-либо приложению, а у Вас в имени файла целых 3 точки);
- попробуйте макрос на другой машине и/или другом офисе.

Кроме того, предлагаю некоторые сображения по поводу кода макроса:
1. Dim r As Byte заменил бы на Dim r As Integer;
2. Выражение Range(a).Range("A1").Address(, , xlR1C1) явно избыточно. Судя по контексту нужно Range(a).Address(, , xlR1C1).
3. Если значения расположены в одной строке, то Cells(r, 1) нужно заменить на Cells(1, r).
4. Если нужна сумма значений, то GetValueFromClosed = ExecuteExcel4Macro(arg) надо заменить на GetValueFromClosed = GetValueFromClosed + ExecuteExcel4Macro(arg). В противном случае функция вернёт только последнее значение, а не сумму.

8.8K
14 апреля 2005 года
Olenenok
10 / / 13.04.2005
Цитата:
Originally posted by Dmitrii
Никакие мои манипуляции с Вашим кодом не заставили Excel выдать сообщение об ошибке с указанным номером (экспериментировал с Excel 2000). Макрос работает. В связи с этим хотелось бы увидеть текст сообщения об ошибке и узнать версию Вашего офиса.
Поиск по базе Microsoft тоже не дал ничего утешительного: описание ошибки с таким кодом нашлось для Visual FoxPro, но не для VBA. Впрочем, ошибка с таким же кодом характерна и для Windows. Так что может быть не офис виноват, а именно ОС.
Мои советы:
- упростите имя файла-донора (ошибка FoxPro, например, связана с невозможностью сопоставить расширение файла какому-либо приложению, а у Вас в имени файла целых 3 точки);
- попробуйте макрос на другой машине и/или другом офисе.

Кроме того, предлагаю некоторые сображения по поводу кода макроса:
1. Dim r As Byte заменил бы на Dim r As Integer;
2. Выражение Range(a).Range("A1").Address(, , xlR1C1) явно избыточно. Судя по контексту нужно Range(a).Address(, , xlR1C1).
3. Если значения расположены в одной строке, то Cells(r, 1) нужно заменить на Cells(1, r).
4. Если нужна сумма значений, то GetValueFromClosed = ExecuteExcel4Macro(arg) надо заменить на GetValueFromClosed = GetValueFromClosed + ExecuteExcel4Macro(arg). В противном случае функция вернёт только последнее значение, а не сумму.



Операционная система - Windows 2000, Офис тот же. К сожалению, версию поменять не могу, здесь все такие =)
Пробовала с точками, без точек - не помогает. С помощью Watches увидела, что значение переменной GetValueFromClosed = Error 2023, а в соответствующей ячейке высвечивается #Ref.Не ссумировала, GetValueFromClosed = GetValueFromClosed + ExecuteExcel4Macro(arg), выскакивает ошибка Type mismatch, а потому пыталась вначале хоть какое-то значение получить.

275
14 апреля 2005 года
pashulka
985 / / 19.09.2004
На самом деле всё просто и ответ уже частично заключён в самом вопросе. У Вас в извлекаемых ячейках находятся значения ошибки, и Вы сами это подтвердили в последнем посте.

Вот список ошибок и их коды :
#ПУСТО! - 2000
#ДЕЛ/0! -2007
#ЗНАЧ! - 2015
#ССЫЛКА! - 2023
#ИМЯ! - 2029
#ЧИСЛО! - 2036
#Н/Д! - 2042

Однако если в некоторых ячейках всё же находятся числовые значения, то Вы можете воспользоваться нижеприведённым кодом :

 
Код:
arg = "'" & temp & "\[MIS." & temp6 & "." & temp2 & ".xls]Teller1'!" & _
Range(a).Address(, , xlR1C1)

iTemp = ExecuteExcel4Macro(arg)

If Not IsError(iTemp) Then
   If IsNumeric(iTemp) Then
      GetValueFromClosed = GetValueFromClosed + iTemp
   End If
End If


Советы :
1) Уберите из Вашей пользовательской функции метод Activate. А вместо активации рабочего листа используйте инструкцию With или создайте об'ектную переменную с помощью инструкции Set
2) В начале программы поместите инструкцию On Error Resume Next

Примечание :
Я бы ещё добавил, что вот эта часть кода, довольно странная, так как в Вашем случае при запуске функции m всегда будет равно 2, во всяком случае если исходить из текста Вашей пользовательской функции. Конечно можно предположить, что переменная m у Вас об'явлена на уровне модуля, но повторюсь, ничто в коде на это не указывает.

m = m + 2
temp6 = Cells(m, 1).Value
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог