Произошло исключение. Microsoft Excel не может получить открытое свойство рабочих книг класса

Обновлено: 06.07.2024

Я получаю следующую ошибку при тестировании сервера PerCalculation.

Система связывается с сервером предварительных расчетов PRETEST

Найден сервер предварительных расчетов

Сервер предварительного расчета запущен

Загрузить книгу OARFYZFJBSUNH4SKT0QAORX3S

Обновлена ​​очередь сервера предварительного расчета: параметр PRETEST сервера A9FE01E861A44EBA1AA3051400000000

Начать предварительный расчет на сервере предварительного расчета "PREC_PRETEST" для настройки "TEST_2"

Неразрешенное исключение возникло на сервере предварительного расчета

, Object[] args, String[] paramnames, Boolean[] Co

ng MemberName, Object[] Arguments, String[] Argume

ntNames, Type[] TypeArguments, Boolean[] CopyBack)

в com.sap.bi.et.precalculation.BexExcelPrecDll l.InitConnection(String iSysno, String iUser, Stri

g iGWService, String IGWHost, String iSessionid, S String iNewVersion, String& eMessage, Boolean iWit

в com.sap.bi.et.precalculation.BExPreCalcRFCSe erverImpl.RS_PREC_LAUNCH_EXCEL(String GWHOST, Stri

g GWSERVICE, строка JOBNAME, строка NEWVERSION, строка SESSIONID строки, строка SYSNO, строка USER, BICS_P

Не удалось получить свойство Open книг c

, Object[] args, String[] paramnames, Boolean[] Co

ng MemberName, Object[] Arguments, String[] Argume

ntNames, Type[] TypeArguments, Boolean[] CopyBack)

в com.sap.bi.et.precalculation.BexExcelPrecDll l.InitConnection(String iSysno, String iUser, Stri

g iGWService, String IGWHost, String iSessionid, S String iNewVersion, String& eMessage, Boolean iWit

в com.sap.bi.et.precalculation.BExPreCalcRFCSe erverImpl.RS_PREC_LAUNCH_EXCEL(String GWHOST, Stri

g GWSERVICE, строка JOBNAME, строка NEWVERSION, строка SESSIONID строки, строка SYSNO, строка USER, BICS_P

Соединение не пройдено

Пакеты обрабатываются на сервере 17-. Оставшиеся пакеты:

Обновлена ​​очередь сервера предварительного расчета: параметр PRETEST сервера A9FE01E861A44EBA1AA3051400000000

Не удалось получить свойство Open класса Workbooks

У меня есть эта функция, которая работает в других скриптах, но с этим
возникают проблемы. Вот функция.
Функция WorkbookOpen(ByRef WorkBookName, LastUpdate, ReadOnly)

If IsObject(WorkBookName) = True Then
If Not WorkBookName Is Nothing Then
Set WorkbookOpen = objExcel.Workbooks(WorkBookName)
End If
Else
Dim fso, f1: Установите fso = CreateObject("Scripting.FileSystemObject")
Если не fso.FileExists(WorkBookName), то
Установите WorkbookOpen = Nothing
Subject = "Данные не скопированы".
Сообщение = WorkbookName & "Не найдено."
Вызовите SendMsg(objScript, Owner, "", Subject, Message)
Еще
Установите f1 = fso.GetFile(WorkBookName)
If LastUpdate = "" Then
If ReadOnly = "" Then
Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName)
Else
Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName,,xlReadOnly)
End If
Еще
Если DateValue(f1.DateLastModified)

в вашем операторе dim указано
Dim objExcel as Object, WorkbookOpen as Object
или это
Dim objExcel as Excel.Application, WorkbookOpen as Excel.Workbook

Я думаю, что если у вас есть первый, это может вызвать проблемы при использовании методов,
уникальных для объектной модели Excel. Лучше явно определить,
каковы объекты ваших переменных.

«Дин Хинсон» написал:

> Привет,
>
> У меня есть эта функция, которая работает в других скриптах, но для этого кажется
> иметь проблемы. Вот функция.
> Function WorkbookOpen(ByRef WorkBookName, LastUpdate, ReadOnly)
>
> If IsObject(WorkBookName) = True Then
> If Not WorkBookName Is Nothing Then
> Set WorkbookOpen = objExcel.Workbooks(WorkBookName)
> End If
> Else
> Dim fso, f1: Set fso = CreateObject("Scripting.FileSystemObject")
> If Not fso .FileExists(WorkBookName) Затем
> Установить WorkbookOpen = Ничего
> Тема = "Данные не скопированы".
> Сообщение = WorkbookName & "Не найдено."
> Вызов SendMsg(objScript, Owner, "", Subject, Message)
> Else
> Set f1 = fso.GetFile(WorkBookName)
> If LastUpdate = "" Then
> If ReadOnly = "" Then
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName)
> Else
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName,, xlReadOnly)
> End If
> Else
> If DateValue(f1.DateLastModified) Set WorkbookOpen = Nothing
> Subject = "Данные не скопированы".
> Сообщение = WorkbookName & "Не обновлено с момента последнего обновления."
> Вызовите SendMsg(objScript, Владелец, "", Тема, Сообщение)
> Иначе
> Если Только для чтения = "" Тогда
> Установите WorkbookOpen = objExcel.Workbooks.Open (WorkBookName)
> Else
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName,,xlReadOnly)
> End If
> End If
> End If
> End If
> End If
>
> Установить fso = Ничего
> Установить f1 = Ничего
>
> Завершить функцию < br />>
> Когда он доходит до Set WorkbookOpen = objExcel.Workbooks.Open
> (WorkBookName), я получаю сообщение об ошибке 1004 — Невозможно получить свойство Open для
> Workbooks сорт. Но, как вы можете видеть в функции, я уже проверяю, что
> рабочая книга существует через FSO. У кого-нибудь была такая беда? Я могу
> открыть книгу вручную с помощью Excel, поэтому я не думаю, что книга
> повреждена. Может ли в книге быть параметр, вызывающий этот симптом?
>
> Заранее благодарим Вас за любую помощь.
>
> С уважением, Дин.

либо:
есть место, где я его не ожидаю.
попробуйте:
Set WorkbookOpen = objExcel.Workbooks.Open(WorkBookName)

или:
вы используете константу xlReadOnly iso, ее значение равно 3.

Вы где-то определили эту константу
или у вас есть ссылка на библиотеку объектов Excel?


Дин Хинсон написал:

> Привет,
>
> У меня есть эта функция, которая работает в других сценариях, но для этого она
> похоже, проблемы. Вот функция.
> Function WorkbookOpen(ByRef WorkBookName, LastUpdate, ReadOnly)
>
> If IsObject(WorkBookName) = True Then
> If Not WorkBookName Is Nothing Then
> Set WorkbookOpen = objExcel.Workbooks(WorkBookName)
> End If
> Else
> Dim fso, f1: Set fso = CreateObject("Scripting.FileSystemObject")
> If Not fso .FileExists(WorkBookName) Затем
> Установить WorkbookOpen = Ничего
> Тема = "Данные не скопированы".
> Сообщение = WorkbookName & "Не найдено."
> Вызов SendMsg(objScript, Owner, "", Subject, Message)
> Else
> Set f1 = fso.GetFile(WorkBookName)
> If LastUpdate = "" Then
> If ReadOnly = "" Then
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName)
> Else
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName,, xlReadOnly)
> End If
> Else
> If DateValue(f1.DateLastModified) Set WorkbookOpen = Nothing
> Subject = "Данные не скопированы".
> Сообщение = WorkbookName & "Не обновлено с момента последнего обновления."
> Вызов SendMsg(objScript, Owner, "", Subject, Message)
> Else
> If ReadOnly = "" Then
> Set WorkbookOpen = objExcel.Workbooks.Open ( WorkBookName)
> Else
> Set WorkbookOpen = objExcel.Workbooks.Open (WorkBookName,,xlReadOnly)
> End If
> End If
> End If
> End If
> End If
>
> Установить fso = Ничего
> Установить f1 = Ничего
>
> Завершить функцию
>
> Когда дело доходит до Set WorkbookOpen = objExcel.Workbooks.Open
> (WorkBookName), я получаю сообщение об ошибке 1004: невозможно получить свойство Open
> класса Workbooks. Но, как вы можете видеть в функции, я уже
> проверяю, существует ли рабочая книга через FSO. У кого-нибудь была такая
> беда? Я могу открыть книгу вручную с помощью Excel, поэтому
> не думаю, что книга повреждена. Может ли в рабочей книге
> быть настройка, вызывающая этот симптом?
>
> Заранее благодарим Вас за любую помощь.
>
> С уважением, Дин.

Я использую сценарий VB, и objExcel определен следующим образом.
Set objExcel = CreateObject("Excel.Application")
Кроме того, WorkbookOpen — это функция, которую я создал в сценарии, а не метод
Excel.

Этот код работает с другими сценариями и книгами, но по какой-то причине этот
является исключением.

 Димитриос

У меня есть сценарий, в котором я загружаю файл Excel. Иногда файл не загружается, и отображается следующая ошибка:

Что мне кажется странным, так это то, что если я снова запускаю скрипт, файл загружается нормально, без каких-либо изменений в коде. В чем может быть проблема? Заранее спасибо

8 комментариев

 Дуэйн Бургойн

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

Я столкнулся с этой ошибкой при запуске R2015a на компьютере с Windows 7 Pro. Код без проблем работал на компьютере с Windows 7 Home.

 Элоди Гаррек

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

 Лейла Иньиго де ла Крус

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

У меня была та же проблема, но кажется, что если вы читаете из Excel, когда он закрыт, с первого раза, это не сработает. Выключите Matlab и снова откройте его, открыв документ Excel, и снова запустите свой скрипт. У меня сработало!

 алессандро аньелло

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

Эта ошибка возникает при попытке открыть файл xml, расположенный в сетевой папке. Когда я копирую xml на свой локальный диск, он работает хорошо. Есть идеи?

 Армандо Рафаэль Фрейтес Родригес

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

 Ранджит Мадхана Гопал

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

Я пробовал разные методы, но проблема была довольно тривиальной. - имя файла excel, которое я пытался прочитать, было слишком длинным. Поэтому, как только я изменил имя файла Excel, код заработал нормально.

 Аналитик изображений

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

Последний раз, когда я проверял, длина имени файла в Excel (папка + имя базового файла) была ограничена 218 символами.

 Ранджит Мадхана Гопал

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

Так что да, максимальное количество символов для имени файла Excel составляет 218 символов, но оно также включает путь. Поэтому попробуйте следующее ниже, и ваш проводник Excel/Windows не позволит вам добавить больше символов в имя файла. Например, присутствует только половина имени файла, и это не позволит мне написать даже длину, не говоря уже о том, чтобы закончить остальную часть имени файла.

D:\Research\2021\Май\25 и 26 мая\26 мая - Субъект 1 - Левая\Данные\Левая рука\Указатель и большой палец\Диапазон движения\Сгибание-разгибание\Вверх\Испытания расчета длины\Испытания 8 – указатель и большой палец\Real_hand_left_Index_Thumb_Leng

В нем 220 символов. (Кроме того, я вижу, вы упомянули имя папки) Я предоставил пример, чтобы у кого-то с похожей проблемой могла быть ссылка.

Ответы (5)

 Аналитик изображений

Прямая ссылка на этот ответ

Прямая ссылка на этот ответ

Открыта ли Excel уже для этой книги, когда вы пытаетесь это сделать? Прежде чем вызывать xlsread, введите (если вы работаете в Windows) control-shift-Esc и посмотрите, видите ли вы Excel в списке процессов.

0 комментариев

 САГАР СИНГХ РАТОР

Прямая ссылка на этот ответ

Прямая ссылка на этот ответ

1 комментарий

 Хирал Панчал

Прямая ссылка на этот комментарий

Прямая ссылка на этот комментарий

 Джефф

Прямая ссылка на этот ответ

Прямая ссылка на этот ответ

В настоящее время я получаю ту же ошибку, когда просто пытаюсь использовать xlsread для файла .xlsx, и, похоже, это не связано с каким-либо другим запущенным экземпляром Excel.

В настоящее время я использую Matlab версии 2015a, но при тестировании на 2014a тот же файл работает без вышеуказанной ошибки. Будем признательны за любую помощь.

0 комментариев

 Чиен-Хань Су

Прямая ссылка на этот ответ

Прямая ссылка на этот ответ

Затем я попытался напрямую открыть свой исходный файл .xls и обнаружил, что он был открыт в режиме защищенного просмотра в Office 2010 Excel на моем компьютере, а моя проверка подлинности Office 2010 просрочена.

Я предполагаю, что xlsread() может дать сбой, если файл находится в режиме защищенного просмотра, хотя я не уверен, какая связь между matlab readxls() и MS Office. В любом случае, после повторной аутентификации моего Office 2010 и проверки того, что я могу напрямую открыть файл .xls с помощью Excel, не входя в режим защищенного просмотра, теперь мой Matlab может снова выполнить xlsread().

Ошибка VBA 438 возникает при попытке использовать свойство или метод, который не поддерживается этим объектом. как вы знаете, все объекты имеют некоторые свойства и методы, которые вы можете использовать, но может возникнуть ситуация, когда вы используете свойство или метод, который не применяется к конкретному объекту.

Давайте рассмотрим пример, чтобы понять это: с объектом рабочего листа появляется метод для выбора рабочего листа.


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


Поэтому, когда вы попытаетесь использовать этот метод с объектом рабочей книги, вы получите ошибку выполнения 438. Даже вы можете видеть, что этого метода нет в списке свойств и методов объекта рабочей книги.


Теперь вы понимаете, что это может быть ошибка со стороны человека, который пишет код, и это может быть совершено, даже если вы хорошо владеете VBA.

Примечание. Если вы написали код в последней версии Microsoft Excel, а теперь пытаетесь запустить его в более старой версии, может быть вероятность, что в этой версии нет метода или свойства для объекта. вы используете.

Как исправить, что объект не поддерживает это свойство или метод

Чтобы справиться с этой ошибкой 438 (объект не поддерживает это свойство или метод), лучше всего знать свойства и методы, поддерживаемые используемым вами объектом.

Когда вы определяете объект, вы можете увидеть список всех свойств и методов, набрав точку (.).


Этот список может помочь вам решить, нет ли там того метода, который вы хотите использовать. А если его нет, вам нужно найти другой способ написать код для задачи, которую вы хотите выполнить. В противном случае вы также можете открыть обозреватель объектов (F2), чтобы просмотреть свойства и методы, имеющиеся у вас с объектом.

Читайте также: