Проблемы
При выполнении кода, использующего автоматизацию для управления Microsoft Excel, может возникнуть одна из следующих ошибок: В Microsoft Excel 97 и более поздних версиях Excel появляется одно из следующих сообщений об ошибке:
Сообщение об ошибке 1
Ошибка времени выполнения "1004": Сбой метода "<имя метода>" объекта "_Global"
Сообщение об ошибке 2
Ошибка, определяемая приложением или объектом
В Microsoft Excel 95 появляется одно из следующих сообщений об ошибке:
Сообщение об ошибке 1
Ошибка времени выполнения "-2147023174" Ошибка OLE Automation
Сообщение об ошибке 2
Ошибка времени выполнения "462": Удаленный сервер не существует или недоступен.
Причина
Visual Basic установил ссылку на Excel из-за строки кода, которая вызывает объект, метод или свойство Excel без указания элемента с помощью объектной переменной Excel. Visual Basic не выпускает эту ссылку до завершения программы. Эта неправданная ссылка вмешивается в код автоматизации, когда код выполняется более одного раза.
Решение
Чтобы устранить эту проблему, измените код таким образом, чтобы каждый вызов объекта, метода или свойства Excel был квалифицирован с помощью соответствующей объектной переменной.
Статус
Такое поведение является особенностью данного продукта.
Дополнительная информация
Чтобы автоматизировать Microsoft Excel, необходимо установить переменную объекта, которая обычно ссылается на объект Excel Application или excel Workbook. Затем можно задать другие переменные объекта для ссылки на лист, диапазон или другие объекты в объектной модели Microsoft Excel. При написании кода для использования объекта, метода или свойства Excel необходимо всегда перед вызовом использовать соответствующую переменную объекта. В противном случае Visual Basic устанавливает собственную ссылку на Excel. Эта ссылка может вызвать проблемы при попытке выполнить код автоматизации несколько раз. Обратите внимание, что даже если строка кода начинается с объектной переменной, можно вызвать объект Excel, метод или свойство в середине строки кода, перед которым не стоит переменная объекта.Ниже показано, как воспроизвести эту проблему и как ее устранить.
Действия по воспроизведению поведения
-
Запустите новый проект EXE уровня "Стандартный" в Visual Basic. Форма Form1 создается по умолчанию.
-
В меню Проект выберите ссылки, а затем проверка библиотеку объектов для версии Excel, которую вы планируете автоматизировать.
-
Поместите элемент управления CommandButton в Form1.
-
Скопируйте следующий пример кода в окно кода Формы 1.
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub -
В меню Выполнить щелкните Пуск или нажмите клавишу F5, чтобы запустить программу.
-
Щелкните элемент управления CommandButton . Ошибка не возникает. Однако ссылка на Excel создана и не выпущена.
-
Снова щелкните элемент управления CommandButton . Обратите внимание, что вы получаете одно из сообщений об ошибке, которые рассматриваются в разделе "Симптомы".Примечание. Сообщение об ошибке возникает из-за того, что код ссылается на метод ячейки, не предшествующий вызову с помощью Переменная объекта xlSheet.
-
Остановите проект и измените следующую строку кода:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Измените строку кода на следующую строку кода.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Запустите программу еще раз. Обратите внимание, что код можно выполнить несколько раз, не получая сообщения об ошибке.
Ссылки
189618 При запуске кода Visual Basic, использующего автоматизацию для управления Word, может появиться сообщение об ошибке "-2147023174" (800706ba)" или сообщение об ошибке времени выполнения "462".