2017-01-25 7 views
3

У меня есть код VBA, который отлично работает в Excel за рабочим столом, но дома он крах. Оказывается, все, что я должен был сделать изменитьРазница между Excel.ThisWorkbook и просто ThisWorkbook?

Set shtObj = ThisWorkbook.Sheets(1) 

в

Set shtObj = Excel.ThisWorkbook.Sheets(1) 

Кто-нибудь знает почему? Наша организация только что перешла на платформу SharePoint, которая, как я подозреваю, вызывает всевозможные вуду, но я просто догадываюсь.

+0

Была ли миграция на SharePoint также сопровождаемой миграцией в Office 365? – Comintern

+0

Как вы определили квалификационный 'ThisWorkbook', это исправит? –

+0

Спасибо, ребята - Да, переход на SharePoint (на самом деле OneDrive) был выполнен с переходом на Office 365. С тех пор я попробовал это с версией электронной таблицы, которая была просто на нашем сетевом диске (НЕ SharePoint), и сравнил ее с один, который использовался в SharePoint.Код SharePoint дал ошибку (при удалении «Excel.»), Но файл с сетевого диска не дал ошибку. Возможно, это не связано с местоположением, но SharePoint, похоже, является преступником. –

ответ

2

ThisWorkbook - объект глобального масштаба Workbook, который вы можете использовать для ссылки на экземпляр рабочей книги, содержащий самый код VBA, на который вы смотрите.

Так в теории, неквалифицированный ThisWorkbook является точно тот же объект Excel.ThisWorkbook или Application.ThisWorkbook.

Доказательство:

Sub Test() 
    Debug.Print ObjPtr(ThisWorkbook), _ 
       ObjPtr(Excel.ThisWorkbook), _ 
       ObjPtr(Application.ThisWorkbook) 
End Sub 

выходы 3 раза и тот же адрес указателя.

Excel.ThisWorkbook является членом (Property Get) скрытого Excel._Global модуля, и Application.ThisWorkbook является членом (Property Get) из Excel.Application класса.

Не уверены, что с вашим файлом, но не должен быть любой разницы между ними.

+1

Спасибо, кучка. Я пробовал ваш тест (в ближайшем окне после того, как ошибка произошла в режиме разрыва). «ThisWorkbook» генерирует ту же ошибку, что и раньше (ошибка автоматизации - катастрофический сбой »-2147418113, fwiw). Остальные два - с префиксом« Excel »или« Приложение »работают нормально. –

4

Работает ли оно, если вы его меняете назад до ThisWorkbook?

Я подозреваю, что это произойдет, и причина в том, что VBA перекомпилировал себя (и не скомпилировался должным образом в первый раз - следовательно, склонность к сбою).

Перекомпиляция происходит, когда информация о версии, встроенная в файл, отличается от используемой версии Office/VBA или происходит с 32 до 64 бит Office. Редактирования строки достаточно, чтобы перекомпилировать строку, поэтому добавления Excel. до ThisWorkbook было достаточно, чтобы перекомпилировать ее. Удаление Excel. до ThisWorkbook должно заставить его снова перекомпилировать.

Единственная другая вещь, которая может быть, это если есть переменная с именем ThisWorkbook, но тогда я ожидаю, что вы получите ошибку 91, «Объектная переменная или С заблокированной переменной блока» или какая-либо другая ошибка, но не авария.

+0

Спасибо за это. удалив Excel и снова получив ту же ошибку («Ошибка автоматизации - катастрофический сбой» -2147418113, fwiw). У меня также проблема с работой сейчас, поэтому местоположение не похоже на нее. –

+0

UPDATE: Я просто обнаружил, что проблема вообще уходит, когда я перемещаю книгу, содержащую код, на наш локальный сетевой диск (а не SharePoint), поэтому преступник, похоже, каким-то образом является SharePoint. –

0

Это, кажется, ошибка в моем конкретном пользователе/​​профиле. Другие теперь используют код/​​книгу без сообщений о проблемах. Ура!!?

Смежные вопросы