Окно не видно несмотря на работу в фоновом режиме - PullRequest
0 голосов
/ 19 июня 2019

У меня есть макрос, который я пытаюсь запустить через Access, который откроет лист Excel, выполнит некоторые действия с ним, а затем оставит лист открытым.

У меня большая часть работы работает, за исключением того, что я не могу открыть документ Excel, чтобы открыть его. Если я проверяю диспетчер задач, процесс Excel запускается в фоновом режиме, поэтому что-то происходит, просто ничего, что я физически не вижу.

Я попытался сэмплировать некоторый код, найденный через stackoverflow и другие ресурсы, и я уверен, что вы увидите это в моем текущем коде. Но я пытался около часа безрезультатно.

Private Sub Command1_Click()

Dim fd As FileDialog
Dim MySheetPath As String
Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet

On Error GoTo ErrorHandler
'allowing selection of the time
Set fd = Application.FileDialog(msoFileDialogFilePicker)

fd.AllowMultiSelect = False

If fd.Show = True Then
    If fd.SelectedItems(1) <> vbNullString Then
        MySheetPath = fd.SelectedItems(1)
    End If
Else
    End
End If

Set Xl = CreateObject("Excel.Application")
Set XlBook = GetObject(MySheetPath)

ShowaWindow (MySheetPath)

Set XlSheet = XlBook.Worksheets(1)

XlSheet.Rows(2).EntireRow.Insert
XlSheet.Range("D2") = "ABC"

Set Xl = Nothing
Set XlBook = Nothing
Set XlSheet = Nothing

Exit Sub

ErrorHandler:
Set fd = Nothing
MsgBox "Error " & Err & ": " & Error(Err)

End Sub

Sub ShowaWindow(sFileName As String)
Dim oWb As Workbook

Set oWb = GetObject(sFileName)

For Each oWb In Workbooks
    If LCase(oWb.Name) <> LCase(sFileName) Then
        oWb.Windows(1).Visible = True
        Exit For
    End If
Next

End Sub

В идеале я бы хотел, чтобы рабочий лист отображался.

Ответы [ 2 ]

1 голос
/ 19 июня 2019
Set Xl = CreateObject("Excel.Application")
Xl.Visible=True

Вам не нужно помещать его сразу после создания объекта, непосредственно перед тем, как установить для него значение Ничего.

0 голосов
/ 19 июня 2019
Set XlBook = GetObject(MySheetPath)

Это неправильно. Не используйте GetObject для открытия книги, используйте только что созданный экземпляр Excel.Application:

Set XlBook = Xl.Workbooks.Open(MySheetPath)

Позже вы перебираете все открытые книги:

 For Each oWb In Workbooks

Но это не коллекция Workbooks из экземпляра приложения Xl, а коллекция Workbooks из экземпляра, на котором в данный момент выполняется ваш код - вам нужно указать его с объектом Xl:

Private Sub ShowaWindow(ByVal app As Excel.Application, ByVal sFileName As String)
    '...
    For Each oWb In app.Workbooks

Кроме того, делает экземпляр приложения видимым после того, как вы его создали, и не забудьте вызвать XlBook.Close и Xl.Quit, чтобы правильно завершить этот процесс EXCEL.EXE, когда вы закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...