Excel VBA Ошибка времени выполнения «424»: объект Обязательный при попытке копирования TextBox

Я пытаюсь скопировать содержимое текстового поля из одной workbook в другую. У меня нет проблем с копированием значений ячеек из первой workbook во вторую, но я получаю ошибку, object required когда я пытаюсь скопировать текстовое поле. Этот macro запускается из книги, содержащей данные, которые я хочу скопировать. Использование кода Excel 2007 :

 Sub UploadData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") xlo.Worksheets(1).Cells(2, 1) = Range("d4").Value 'Copy cell content (this works fine) xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 'This gives me the object required error xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub 

Спасибо за любую помощь.

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

 Sub UploadData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Dim myWb as Excel.Workbook Set myWb = ActiveWorkbook Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") xlo.Worksheets(1).Cells(2, 1) = myWb.ActiveSheet.Range("d4").Value xlo.Worksheets(1).Cells(2, 2) = myWb.ActiveSheet.TextBox1.Text xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub 

Если вы предпочитаете, вы также можете использовать myWb.Activate чтобы вернуть свою основную книгу как активную. Он также будет работать, если вы сделаете это с помощью объекта Worksheet . Использование того или другого в основном зависит от того, что вы хотите сделать (если имеется несколько листов и т. Д.).

Я думаю, причина, по которой это происходит, может заключаться в том, что TextBox1 модуль VBA и связанный с ним лист, а Range – в «Активный лист».

РЕДАКТИРОВАТЬ

Похоже, вы можете использовать функцию GetObject, чтобы вытащить текстовое поле из книги.

Проблема связана с этой строкой

  xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 

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

Следовательно, замените это на

  xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text 
  • Обработчик Vba 'error' не работает
  • excel, но приводит к ошибке времени выполнения «32809», определяемой приложением или объектной ошибкой
  • Ошибка времени выполнения VBA 13: несоответствие типов
  • Ошибка Visual Basic-Runtime 1004
  • Назначить макрос кнопке, созданной во время выполнения VBA
  • Код Excel VBA: ошибка компиляции в версии x64 (требуется атрибут «PtrSafe»)
  • Excel VBA Время выполнения 1004 Ms Excel не может вставлять данные
  • Как конвертировать VBA Now () в секунды, чтобы определить общую продолжительность выполнения программы
  • Ошибка 1004 времени выполнения при копировании / вклеивании ячеек в один и тот же активный лист
  • Открыть Excel из приложения Java
  • Что вызывает ошибку времени выполнения MS VB -2147417848 (80010108) в Excel Macro
  • Давайте будем гением компьютера.