подсистема доступа запускается один раз, затем ошибка «91»: объектная переменная не установлена

Спасибо за любую помощь заранее,

У меня есть база данных Access, которая содержит следующий код. Он настроен на открытие определенного файла Excel, поиск последней строки и добавление 1 к значению этой строки в следующей строке ниже, сохранение и т. д. Это происходит в первый раз, если вы запустите его снова, я получаю «Ошибка '91': переменная объекта или переменная блока не установлена". однако, если я нажму кнопку «Стоп» (сброс) в окне VBA или кнопку «Конец» в сообщении об ошибке, а затем снова запущу ее, она сработает. Я пробовал много вещей, и я в недоумении.

Какие-либо предложения?

Private Sub quoteNew1_Click()

    Dim app As New Excel.Application
    app.Visible = True

    Dim book As Excel.Workbook
    Set book = app.Workbooks.Add("C:\Desktop\Test_Quotes.xlsx") 

    nextEmptyRow  'find last row and add new value to next row colum a

    book.Close savechanges:=True

    app.Quit
    Set app = Nothing

End Sub


Sub nextEmptyRow()
    Dim emptyRow As Long

    emptyRow = ActiveSheet.UsedRange.Rows.Count

    MsgBox emptyRow

    Cells(emptyRow + 1, 1).Value = Cells(emptyRow, 1).Value + 1

End Sub

С уважением,


person nitrojunk-e    schedule 14.05.2015    source источник
comment
Вы получаете ошибку 91 где?   -  person Matteo NNZ    schedule 15.05.2015
comment
если бы я должен был угадать, я бы удалил или изменил установленное приложение = Ничего, если оно работает в первый раз, у меня создается впечатление, что это утверждение сработало, и блокирует следующую попытку. ошибка 91 может быть вызвана попыткой использовать объектную переменную, для которой установлено значение Nothing.   -  person n34_panda    schedule 15.05.2015
comment
Возможно, вы не полностью убираете за собой: вы установили app на Ничего, но не book. Сделайте это после .Close и до Set app = Nothing.   -  person Mark Wickett    schedule 15.05.2015
comment
Маттео, Ошибка 91 выделяет emptyRow = ActiveSheet.UsedRange.Rows.Count   -  person nitrojunk-e    schedule 15.05.2015
comment
n34, я удалил app = Nothing и все равно получил ошибку.   -  person nitrojunk-e    schedule 15.05.2015
comment
Марк, я добавил book = Nothing, чтобы помочь убрать за собой. Спасибо за совет, я согласен, что я не лучший в уборке.   -  person nitrojunk-e    schedule 15.05.2015


Ответы (1)


Workbooks.Add требует шаблон в качестве аргумента. Вы захотите использовать приведенный ниже формат для добавления новой книги в первый раз. После этого вам нужно будет открыть существующую книгу. Следующий код работает для меня и, похоже, соответствует вашему требованию добавлять новую строку каждый раз с увеличенным значением.

Private Sub quoteNew1_Click()

Dim app As New Excel.Application
app.Visible = True

Dim book As Excel.Workbook

'If workbook exists open it, otherwise create it
If Len(Dir("C:\temparea\Test_Quotes.xlsx")) = 0 Then
    'File doesn't exist, create it
    Set book = Workbooks.Add
    app.DisplayAlerts = False
    book.SaveAs FileName:="C:\temparea\Test_Quotes.xlsx"
    app.DisplayAlerts = False
Else
    'Open existing file
    Set book = Workbooks.Open("C:\temparea\Test_Quotes.xlsx")
End If

nextEmptyRow  'find last row and add new value to next row colum a

book.Close savechanges:=True

app.Quit
Set app = Nothing
End Sub

Sub nextEmptyRow()
Dim emptyRow As Long

emptyRow = ActiveSheet.UsedRange.Rows.Count

If Cells(emptyRow, 1).Value = 0 Then
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value + 1
Else
    Cells(emptyRow + 1, 1).Value = Cells(emptyRow, 1).Value + 1
End If

End Sub
person pghcpa    schedule 16.05.2015
comment
pghcpa, это действительно решило мою проблему, я все еще использовал свой исходный код, но ваш помог мне определить, что не так с моим, сравнив их, я использовал Set book = app.workbooks.add , который, как вы указали, нуждался в дополнительном аргументе, когда мне нужно было использовать только workbooks.open это устранило мою ошибку. Я очень ценю все вклады от всех! - person nitrojunk-e; 19.05.2015