2016-06-23 3 views
1

Я использую длинный процесс, который создает и заполняет серию «маршрутных» книг и заполняет книгу «резюме» мастера при этом.Excel VBA - Ссылка на объект не установлена ​​в экземпляр объекта

Вкратце, ошибка возникает сразу же в начале импорта данных из учебника маршрута, как только я пытаюсь использовать соответствующий лист в сводке.

При цитировании весь код будет непрактично, я скопировал оттуда, где я думаю, что «отношение» здесь:

 ' Get Route Number 
    RNum = wshCtrl.Cells(2, 2 + i).Value ' Number for routes being processed (blank if not processed) 
    RawRNum = wshCtrl.Cells(4, 2 + i).Value ' Raw Number 
    ' Get Route Direction 
    RDir = wshCtrl.Cells(9, 2 + i).Value 
    ' Get Name of Worksheet 
    NamewshRoute = "Route " & RawRNum & " - " & RDir 
    ' Check if Route Worksheet exists 
    Set wshRoute = Nothing 
    On Error Resume Next 
    Set wshRoute = Sheets(NamewshRoute) 
    On Error GoTo 0 

    ' If Route Worksheet doesn't exist and Route being processed 
    If wshRoute Is Nothing And RNum <> "" Then 
     ' Create Route Worksheet 
     ' Copy Template 
     wshTemplate.Copy After:=wshTemplate 
     ' Rename Copied Template 
     Worksheets("Template (2)").Name = NamewshRoute 
     ' Set as Route Worksheet 
     Set wshRoute = Sheets(NamewshRoute) 
     ' Enter Route Number and Direction 
     wshRoute.Cells(2, 3).Value = RNum 
     wshRoute.Cells(2, 4).Value = RDir 

    ' If Route Worksheet doesn't exist and Route isn't being processes 
    ElseIf wshRoute Is Nothing Then 
     ' Do Nothing 

    ' Else Route Worksheet already exists and Route being processed 
    Else 

     ' Update Progress Bar 
     Percent = j/(NumRoutes + 0.5) - (1/(NumRoutes + 1) * 8/8) 
     RefreshStatusBar Percent, "Processing " & NamewshRoute, "Initialising Route" 

     ' Update Date 
     wshRoute.Range("AW9").Value = Month & Year 

Ошибка возникает на одном из следующих двух линий:

wshRoute.Cells(2, 3).Value = RNum 

или

wshRoute.Range("AW9").Value = Month & Year 

в зависимости от того, существует ли таблица или нет.

Обратите внимание, что:

  1. Вариант Явная присутствует в верхней части кода.
  2. Насколько я могу судить, все переменные определены и установлены соответствующим образом.
  3. Я использовал процесс отладки, и использование «Добавить часы» подтвердило, что wshRoute установлен соответствующим образом, а также RNum, Month и Year.
  4. wshRoute.Cells (2, 3) .Value возвращает правильное значение, равно как и wshRoute.Range ("AW9").
  5. Единственное несоответствие, которое я вижу, заключается в том, что, когда я смотрю дальше на свойства wshRoute, свойства OnCalculate до «OnSheetDeactivate» имеют значение. Не уверен, что это актуально или нет.

Этот код работал нормально (я использую примерно год), пока не добавил еще один макрос в начале. Новый макрос открывает другую книгу и создает файлы данных. Он никак не взаимодействует с учебником «Резюме». Если я запустил код без дополнительного нового макроса, он снова будет работать отлично.

Любые предложения, пожалуйста, пропустите их. Это для меня высокий приоритет, поэтому я буду тестировать быстро.

Спасибо, Кэмерон

+1

'открывает другую книгу, чтобы квалифицировать ваши листы с помощью книг:' Set wshRoute = Sheets (NamewshRoute) '. – findwindow

+0

Подождите, что-то подозрительное. Вы устанавливаете 'wshRoute' что-то, а затем сразу после' If wshRoute Is Nothing' ???? – findwindow

+0

Используйте 'Set wshRoute = WorkSheets (NamewshRoute)' вместо 'Set wshRoute = Таблицы (NamewshRoute)'. – PaichengWu

ответ

-1

После немного назад и вперед ... спасибо всем тем, кто внес свой вклад.

Проблема была я пытался изменить защищенные листы

я нашел это, поместив Application.DisplayAlerts = False перед линией вызывает ошибку. Когда это произошло, оригинал «Ссылка на объект, не установленная на экземпляр объекта» Ошибка была заменена на «Ячейка или схема, которую вы пытаетесь изменить, защищены и, следовательно, доступны только для чтения». ошибка.

Я исправил это, убедившись, что все мои рабочие листы были незащищены, когда макрос работал.

На стороне записки - меня застали без квалификации мои листы с книгами.

Еще раз спасибо за все ваши предложения.

+0

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

2

Попробуйте добавить эти отладочные и посмотреть, что вы получите:

Set wshRoute = Sheets(NamewshRoute) 

Debug.Print wshRoute Is Nothing 
Debug.Print wshRoute.Name & " is in workbook " & wshRoute.Parent.Name 
Debug.Print wshRoute.Cells(2, 3) Is Nothing 
Debug.Print "RNum is type " & TypeName(RNum) 

wshRoute.Cells(2, 3).Value = RNum 
+0

Привет Тим. Результаты: ** Debug.Print wshRoute is Nothing ** = "False" ** Debug.Print wshRoute.Name & "is in workbook" & wshRoute.Parent.Name ** = "Маршрут 1 - AtoB находится в рабочей книге Февраль 2016 PT Summary.xlsm " ** Debug.Print wshRoute.Cells (2, 3) is Nothing ** =" False " ** Отладка.Печать «RNum is type» & TypeName (RNum) ** = «RNum is type String» –

+0

И вы все еще получаете эту ошибку в последней строке? Попробуйте добавить «Application.EnableEvents = False» (после этого вернется к True) непосредственно перед этой строкой, если что-то запускается событием, выпущенным обновлением рабочего листа. –

+0

Aha! Я сделал это и получил новую ошибку, указав, что лист защищен или доступен только для чтения. Хотя я не могу понять, почему, потому что на этом этапе макроса все листы были незащищенными, поэтому я МОЖЕТ изменить их как таковые ... Ошибка, которую я получаю: «Ошибка времени выполнения« 1004 »: ячейка или диаграмма, которые вы пытаются изменить, защищены и, следовательно, доступны только для чтения. Чтобы изменить защищенную ячейку ... » –

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