Код Excel VBA, excel.exe не будет закрыт

Я пытался получить этот кусочек кода в течение 3 дней, и я не могу понять это.

Этот код работает во внешнем приложении и вызывает библиотеку Microsoft Excel 14.

Я объединяю все файлы CSV в папку в один файл xlsx, а затем добавляю график в каждый рабочий лист, чтобы соответствовать данным, которые там находятся. Но когда я добавляю график, я не могу заставить Excel.exe закрыться, вызывая проблемы, когда я снова пытаюсь запустить код.

Я могу запустить код один раз, а затем получить ошибку времени выполнения 91 «Object Variable» или с переменной Block not Set. Если я отлаживаю код, он жалуется на ActiveSheet.Columns («A: F»). AutoFit.

Я считаю, что это потому, что Excel не закрылся должным образом. Я все еще вижу Excel.exe в диспетчере задач, который мне нужен, чтобы закончить задачу, чтобы заставить ее работать снова. Я чрезвычайно новичок в VBA, поэтому мне может не хватать надлежащего способа закрыть объект.

* Хорошо, здесь немного меньше кода.

Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") 'Setup workbooks Dim wB As Excel.Workbook Dim wBM As Excel.Workbook 'Csv files folder Dim CSVfolder As String CSVfolder = "C:\Dynamics\HistDataReport\12-10-14" 'Master Excel file path Dim mF As String mF = "C:\Dynamics\HistDataReport\NewWS.xlsx" 'Where your master file is 'open the master file Set wBM = xlApp.Workbooks.Open(mF) 'search and open the client files Dim fname As String fname = Dir(CSVfolder & "\*.csv") Do While fname <> "" 'open the client file Set wB = xlApp.Workbooks.Open(CSVfolder & "\" & fname) 'copy the first sheet from client file to master file wB.Sheets(1).Copy After:=wBM.Sheets(wBM.Sheets.Count) 'Add Graph ActiveSheet.Columns("A:F").AutoFit ActiveSheet.Range("B1:B673").Select Charts.Add ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" 'save master file wBM.Save 'close client file wB.Close False 'move to next client file fname = Dir() Loop xlApp.Visible = True Set xlApp = Nothing 

Если я прокомментирую все, что работает. Но мне не нужен мой график.

Я получил этот код здесь Код Stackoverflow

Вот оригинальный код, который я собираюсь использовать, когда выясню эту проблему

 Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") Dim xl As Excel.Application Dim wbk As Excel.Workbook Dim wsht As Excel.Worksheet Dim strFileName As String Dim lastRow As Integer Set xl = New Excel.Application xl.DisplayAlerts = False Set wbk = xl.Workbooks.Add("C:\Dynamics\HistDataReport\NewWS.xlsx") wbk.SaveAs FILEPATH & Filename2 wbk.Close Set xl = Nothing Dim wB As Excel.Workbook Dim wBM As Excel.Workbook Dim myChart, As Chart, cht As ChartObject Dim rngChart As Range, destinationSheet As String 'Csv files folder Dim CSVfolder As String CSVfolder = FILEPATH 'Master Excel file path Dim mF As String 'mF = Application.CurrentProject.path & "\Master.xlsx" 'Where your master file is mF = FILEPATH & Filename2 'open the master file Set wBM = xlApp.Workbooks.Open(mF) 'search and open the client files Dim fname, wS As String fname = Dir(CSVfolder & "\*.csv") Do While fname <> "" 'open the client file Set wB = xlApp.Workbooks.Open(CSVfolder & "\" & fname) 'copy the first sheet from client file to master file wB.Sheets(1).Copy After:=wBM.Sheets(wBM.Sheets.Count) ActiveSheet.Columns("A:F").AutoFit destinationSheet = ActiveSheet.Name Set myChart = Charts.Add Set myChart = myChart.Location(Where:=xlLocationAsObject, Name:=destinationSheet) myChart.SetSourceData Source:=ActiveSheet.Range("B1:B673"), PlotBy:=xlColumns myChart.ChartType = xlLine ActiveSheet.ChartObjects(1).Activate Set cht = ActiveChart.Parent Set rngChart = ActiveSheet.Range("H2:Q15") cht.left = rngChart.left cht.Top = rngChart.Top cht.Width = rngChart.Width cht.Height = rngChart.Height myChart.HasTitle = True myChart.ChartTitle.Text = "Week" myChart.HasLegend = False ActiveSheet.Range("A2").Select wBM.Save wB.Close False 'move to next client file fname = Dir() Loop wB.Close wBM.Close Set xlApp = Nothing 

Любая помощь будет оценена!

Я считаю, что вам нужен и xlApp.Quit И набор xlApp = Nothing.

У меня есть код, который работает со скрытыми рабочими книгами excel, и у меня есть этот кусок кода в начале, прежде чем я что-нибудь сделаю, на всякий случай, если предыдущая итерация кода все еще существует.

  'Switch off the error handling and the display alerts to avoid any error messages if the old workbook has 'never been opened and the hidden instance does not exist Application.DisplayAlerts = False On Error Resume Next book.Close SaveChanges:=False app.Quit Set app = Nothing Application.DisplayAlerts = True 
Interesting Posts

VBA Удаляет всю строку, если значение в 1 столбце больше значения в другом столбце

Количество Excel от 10 до 10

Получите n-е абсолютное значение в массиве

Медленная петля VBA – Вставить из набора записей

VBA: Нежелательные строки перезаписи

Excel VBA хочет, чтобы Userform активировала активную рабочую книгу

Применение формулы в зависимости от выбора из выпадающего меню с использованием VBA

Как объединить несколько столбцов, если они не пусты

Сравнение данных из нескольких листов Excel

Ошибка чтения для свойств CC и BCC

Добавляем текст в столбец «Истекшее время», но сохраняем его как числовое значение, поэтому его выбирают как метку данных на графике

проверка, открыта ли рабочая книга vba, сбой, если файл открыт

Разрешить только запуск субблока после запуска другого VBA

Идентифицировать ячейки без формул массива

Специальная вставка в активной ячейке с использованием VBA

Давайте будем гением компьютера.