Приложение Excel нельзя использовать после программы VBA - PullRequest
0 голосов
/ 09 июня 2018

У меня есть программа VBA в MS Project , которая открывает приложение Excel и электронную таблицу, слегка настраивает электронную таблицу и затем сохраняет ее как новый файл, чтобы ее можно было импортировать в проект MS.

Код работает отлично, он корректирует файл Excel, как я хочу, но после запуска кода я открываю Excel, и он больше не используется, это просто пустое приложение.

Сначала я не закрывал приложение и не делал его снова видимым (targetApp.Quit и targetApp.Visible=True), что, возможно, и вызывало проблему, но добавление обеих этих строк кода не помоглоэта проблема.Спасибо за любую помощь или направление, спасибо.

Код и снимок экрана пустой приложения Excel ниже:

Private Sub processExportExcelSheet()
    If Not ErrorMessage = "" Then Exit Sub

    Dim targetApp As New Excel.Application
    Dim targetWorkBook As Excel.Workbook
    Dim targetSheet As Excel.Worksheet

    targetApp.Visible = False
    targetApp.DisplayAlerts = False
    targetApp.ScreenUpdating = False

    Set targetWorkBook = targetApp.Workbooks.Open("C:\Exports\Data.xls")
    Set targetSheet = targetWorkBook.Worksheets(1)

    Dim rowCount, columnCount As Integer

    For rowCount = 1 To 10
        For columnCount = 1 To 10
            If targetSheet.Cells(rowCount, columnCount) = "P" _
                Then GoTo exitLoop
        Next columnCount
    Next rowCount

    ErrorMessage = "The data is corrupt"
    GoTo corruptData

exitLoop:
    rowCount = rowCount - 1
    columnCount = columnCount - 1

    If Not rowCount = 0 Then targetSheet.Range(targetSheet.Rows(1), _
        targetSheet.Rows(rowCount)).Delete Shift:=x1Up
    If Not columnCount = 0 Then targetSheet.Range(targetSheet.Columns(1), _
        targetSheet.Columns(columnCount)).Delete Shift:=x1ToLeft

    Dim count, deleteCount As Integer
    count = 1
    deleteCount = 0

    Do While deleteCount < 5
        If targetSheet.Cells(1, count) = "" Then
            targetSheet.Columns(count).Delete Shift:=x1ToLeft
            deleteCount = deleteCount + 1
        Else
            targetSheet.Cells(1, count) = "Title" & count
            count = count + 1
            deleteCount = 0
        End If
    Loop

    count = 2
    deleteCount = 0

    Do While deleteCount < 5
        If targetSheet.Cells(count, 1) = "" Then
            targetSheet.Rows(count).Delete Shift:=x1Up
            deleteCount = deleteCount + 1
        Else
            count = count + 1
            deleteCount = 0
        End If
    Loop
    targetWorkBook.SaveAs Filename:="C:\Exports\Data.xlsx", FileFormat:=51

corruptData:
    targetWorkBook.Close
    Kill ("C:\Exports\Data.xls")

    targetApp.ScreenUpdating = True
    targetApp.DisplayAlerts = True
    targetApp.Visible = True
    targetApp.Quit

End Sub

screenshot

1 Ответ

0 голосов
/ 09 июня 2018

Проверьте диспетчер задач и убедитесь, что экземпляр Excel не был запущен и не был закрыт должным образом.

Если вы не закрыли открытый экземпляр VBA Excel с .Quit, он останется активным- но скрытые - и любые диалоговые окна, сгенерированные вашим экземпляром, будут останавливать попытки открыть новые экземпляры

...