Вы правильно определяете объекты:
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range
, но вы забыли об неявно используемом объекте Workbooks
... так как большинство ответов, которые вы найдете, делают ... что означает, что это не так " Тебя выпустят. Так что сделайте это так:
Dim SpreadsheetPath As String
Dim xlApp As Excel.Application
Dim xlBooks As Excel.Workbooks
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range
SpreadsheetPath = "C:\MyPath\MyFile.xlsx"
Set xlApp = New Excel.Application
' Set xlApp = GetObject(, "Excel.Application") ' or attach to an existing one
Set xlBooks = xlApp.Workbooks
Set xlBook = xlBooks.Open(FileName:=SpreadsheetPath) ' you can use .Add instead if someone else may have it open already
Set xlSheet = xlBook.Worksheets(1)
Set xlRange = xlSheet.Range("A1")
' do stuff with the worksheet/range
xlRange.Value = "foo"
' the order matters
' just like it does
' when you create the objects
Set xlRange = Nothing
Set xlSheet = Nothing
xlBook.Close False
Set xlBook = Nothing
Set xlBooks = Nothing
xlApp.Quit
Set xlApp = Nothing
Однако вы можете обнаружить, что он все еще не освобождается, когда вы хотите, но он будет выпущен, когда вы закроете программу, которую используете для ее создания (в ваш случай, MS-Word), как это (предположительно), когда Windows делает свою встроенную сборку мусора.
Примечание: я удалил обработку ошибок только для того, чтобы сохранить ее чистым примером, но Вы можете оставить это в