Я пытаюсь получить этот бит кода, работающий в течение 3 дней, и я не могу понять это.Код VBA Excel, excel.exe не будет закрыт
Этот код работает во внешнем приложении и вызывает библиотеку Microsoft Excel 14.
Я объединяю все файлы CSV в папку в один файл xlsx, а затем добавляю график на каждом листе, чтобы соответствовать данным, которые там находятся. Но когда я добавляю график, я не могу заставить Excel.exe закрыться, вызывая проблемы, когда я снова пытаюсь запустить код.
Я могу запустить код один раз, а затем получить ошибку времени выполнения 91 «Объектная переменная или с переменной блока не задана. Если я отлаживаю код, он жалуется на 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 Code
Вот исходный код, который я буду использовать, когда я выясняю эту проблему
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
Любая помощь будет оценена !!
Для того, чтобы изолировать проблему, я хотел бы предложить вам сократить немного кода (если вы говорите, что ошибка происходит, когда вы добавляете диаграмму, то, возможно, оставить из всего кода, который приходит после того, как и выделить конкретные строка, где возникает проблема) и сообщите точное сообщение об ошибке + строка, пожалуйста. –
Спасибо за ваше предложение, я достал много кода и имел только голые минимумы. – Catsrules
Вы пробовали 'xlApp.Quit'? – chancea