2015-06-11 5 views
1

Помощь. Это сводит меня с ума. У меня есть следующий код:excel vba 2013 ошибка времени выполнения 424 требуется объект

private sub anything() 
    ' 30 lines of code that work perfectly 
    MsgBox myNotesFile.sheets("NotesReport").Cells(3, 6) '1 
    fixLongLines 
end sub 

Private Sub fixLongLines() 
    MsgBox "" '2 
    MsgBox myNotesFile.sheets("NotesReport").Cells(3, 6) '3 
    MsgBox ThisWorkbook.sheets("bindata").Range("A1") '4 
end sub 

Первый msgbox (1) отлично работает. В sub первый msgbox (2) работает отлично, но второй (3) (который точно такой же, как тот, который находится в исходном суб), дает мне ошибку 424.

Если я прокомментирую оскорбительную линию, то третий msgbox (4) работает отлично. «myNotesFile» ссылается без каких-либо проблем до кода, который я здесь показал. И этот субмастер отлично работает в другом модуле.
Любые предложения относительно того, почему я получаю эту ошибку в этом одном месте в моем коде?

+0

Что такое myNotesFile? –

+0

Ваш второй юг не может понять, к чему относится переменная ** myNotesFile **. Где он объявлен и установлен? – Jeeped

+0

Les, я вижу, вы новичок на сайте. Если вы примете ответ, вы получите очки репутации. Здесь считается хорошей формой, чтобы принимать и голосовать ответы, которые работают на вас, поэтому другие, кто видит это, могут знать, каково ваше решение. –

ответ

0

Как сказано в одном из комментариев, fixLongLines не знает, что такое myNotesFile. Вы можете передать свой рабочий лист или только один лист, хотя параметр fixLongLines. Вот как будет проходить только один лист:

Sub anything() 
    ' 30 lines of code that work perfectly 
    MsgBox myNotesFile.Sheets("NotesReport").Cells(3, 6) '1 
    Dim nr As Worksheet 
    Set nr = myNotesFile.Sheets("NotesReport") 
    Call fixLongLines(nr) 
End Sub 

Private Sub fixLongLines(mySheet As Worksheet) 
    MsgBox "" '2 
    MsgBox mySheet.Cells(3, 6) '3 
    MsgBox ThisWorkbook.Sheets("bindata").Range("A1") '4 
End Sub 

Если вы не хотите, чтобы передать параметр, другой обходной путь может быть, чтобы сделать ваш звонок в fixLongLines, как это:

MsgBox Workbooks("myNotesFile.xls").Sheets("NotesReport").Cells(3, 6) 

Конечно, вам нужно будет изменить расширение, если ваш файл не является файлом .xls.

+0

myNotesFile - это книга, которая, как я полагаю, была объявлена ​​и открыта и использовалась много раз без инцидентов до этой ошибки в той же подпрограмме. Я попробую некоторые из предложений и дам вам знать, что происходит. Расстраивающей частью является то, что я использую этот метод кодирования во всех моих модулях, и это первый случай, когда я столкнулся с этой проблемой. Раньше это никогда не было проблемой. –

0

Я использовал предложение Тони L о том, чтобы объявить nr и передать его к югу. Оно работало завораживающе. Спасибо всем за вашу помощь.

+0

Я добавил еще одно возможное решение в моем ответе, которое может сработать и для вас. Поскольку ответ работает на вас, не могли бы вы принять его? Существует флажок, чтобы щелкнуть ниже области голосования слева. –

+0

Еще одно возможное решение, если вы не хотите передавать объект или переменные вокруг, - это «Размыть их за пределами модуля вверху модуля», что делает его доступным для всех подпрограмм в этом модуле. –

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