2014-12-10 3 views
2

Я пытаюсь получить этот бит кода, работающий в течение 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 

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

+0

Для того, чтобы изолировать проблему, я хотел бы предложить вам сократить немного кода (если вы говорите, что ошибка происходит, когда вы добавляете диаграмму, то, возможно, оставить из всего кода, который приходит после того, как и выделить конкретные строка, где возникает проблема) и сообщите точное сообщение об ошибке + строка, пожалуйста. –

+0

Спасибо за ваше предложение, я достал много кода и имел только голые минимумы. – Catsrules

+0

Вы пробовали 'xlApp.Quit'? – chancea

ответ

2

Я считаю, что вам нужен и 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 
+0

Да, это была моя проблема, Мужчина 3 дня, работая над этим, все пропустили 1 строку. Полагаю, что так получается. Большое спасибо за помощь – Catsrules