Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Excel-Prozess aus anderem Programm start

Betrifft: Excel-Prozess aus anderem Programm start von: Dominik
Geschrieben am: 10.08.2020 15:45:51

Hallo euch allen,


ich habe mittels recherche versucht mein Problem zu lösen bin jedoch bisher nicht wirklich weitergekommen. Mein Problem ist, dass ich die Prozesse und Funktion die in einer Excel-Datei hinterlegt sind in einem anderen Programm [SolidWorks] (nicht Excel) starten möchte. In SolidWorks kann man ebenfalls Makros mittels VBA programmieren. Ich muss nun noch folgende Dinge tun:


1.) Wenn die Excel-Datei, die unter einem bekannten Pfad liegt, nicht bereits offen ist möchte _

ich diese öffnen. Ich habe hierzu bereits folgenden Code geschreiben. Damit öffnet sich aber _

immer die Excel-Datei und falls diese offen ist öffne ich eine weitere "Schreibgeschütze _
Abreitsmappe". Wie kann ich dafür sorgen, dass dies nur passiert wenn diese nicht bereits offen _ ist?




Sub main()

Dim MyExcel As Object                   'Excel-Datei

strNameExcel = "01-Steuerungsexcel.xlsm"     
strNameExcel2 = "'01-Steuerungsexcel.xlsm'"   'wird nur benötigt für Application.Run

Set MyExcel = CreateObject("Excel.Application")
MyExcel.Workbooks.Open "C:\" & strNameExcel
MyExcel.Visible = True

intStartZeile = MyExcel.Application.Run(strNameExcel2 & "!ErsteZeile")

Set MyExcel = Nothing

End Sub


2.) Ich habe es bereits geschafft, dass die Prozesse und Funktionen der Excel-Datei mittels:
_
_


intStartZeile = MyExcel.Application.Run(strNameExcel2 & "!ErsteZeile")


aus SolidWorks heraus ausgeführt werden. Wie kann ich dies aber schaffen wenn die Excel-Datei bereits geöffnet ist. Ich muss dann ja die Excel-Datei irgendwie in das Objekt MyExcel bekommen.


Ich weiß dies ist alles etwas abstrakt aber ich hoffe Ihr könnt mir trotzdem weiterhelfen.


Gruß


Dominik

Betrifft: AW: Excel-Prozess aus anderem Programm start
von: peterk
Geschrieben am: 10.08.2020 15:58:14

Hallo

In etwa so:

    On Error Resume Next
    Set MyExcel = GetObject(, "Excel.Application")
    If MyExcel Is Nothing Then
        Set MyExcel = CreateObject("Excel.Application")
    End If
    On Error GoTo 0



Betrifft: AW: Excel-Prozess aus anderem Programm start
von: volti
Geschrieben am: 10.08.2020 16:06:43

Hallo Dominik,

versuch es mal so (ungetestet):
Code in die Zwischenablage
Sub main() Dim MyExcel As Object 'Excel-Datei Dim MyFile As Object strNameExcel = "01-Steuerungsexcel.xlsm" strNameExcel2 = "'01-Steuerungsexcel.xlsm'" 'wird nur benötigt für Application.Run Set MyFile = GetObject(PathName:="C:\" & strNameExcel) Set MyExcel = MyFile.Parent MyExcel.Visible = True intStartZeile = MyExcel.Application.Run(strNameExcel2 & "!ErsteZeile") Set MyExcel = Nothing End Sub
 
viele Grüße aus Freigericht
Karl-Heinz


Betrifft: AW: Excel-Prozess aus anderem Programm start
von: Dominik
Geschrieben am: 11.08.2020 08:52:18

Guten Morgen volti,

dein Vorschlag hat super funktioniert. Leider ist mir der Umgang mit Objekten noch nicht so ganz klar. Wenn ich deinen Code richtig versteh, dann bekommst du die Excel-Datei mittels GetObject in MyFile richtig?

Im nächsten Schritt ordnest du MyFile dem Objekt MyExcel zu oder? Für was benötigt man hier .Parent?

Außerdem hätte ich noch zwei Dinge:

1.) Wenn ich die Datei nicht bereits offen habe wird durch MyExcel.Visible = True nicht die Datei angezeigt sondern nur ein leeres Fenster. Wie kann ich realisieren, dass die Excel-Datei auch wirklich geöffnet und angezeigt wird?

2.) Wie kann ich dann z. B. auf Zelleninhalte aus dieser Excel-Datei zugreifen. Ich hatte gehofft dies geht mittels (siehe unten). Dies funktioniert aber leider nicht.
MyExcel.Tabelle2.Cells(1, 1).Value
Wie lautet denn die "vollständige" Bezeichnung einer Zelle (inkl. Pfad, Workbook-Name,...). Ich konnte hierzu leider nichts finden. Solange sich der Code ja in dem richtigen Workbook befindet spielt kann man die Bezeichnung abkürzen. Da ich aber mit zwei Programmen arbeite brauche ich diese Bezeichnung oder?

Vielen Dank.

Gruß

Dominik

Betrifft: AW: Excel-Prozess aus anderem Programm start
von: peterk
Geschrieben am: 11.08.2020 10:23:43

Hallo

Nochmal ein Beispiel. Zuerst wird kontrolliert ob Excel läuft, dann ob auch das Workbook bereits geladen ist. Im Kommentar ein Zugriff auf eine bestimmte Zelle.


Sub test()

    Dim myExcel As Object
    Dim myWKB As Workbook
    Dim strNameExcel As String
    Dim fileLoaded As Boolean
    
    fileLoaded = False
    strNameExcel = "01-Steuerungsexcel.xlsm"

    On Error Resume Next
    Set myExcel = GetObject(, "Excel.Application")
    On Error GoTo 0
    
    If myExcel Is Nothing Then  ' Excel läuft nicht
        Set myExcel = CreateObject("Excel.Application")
        myExcel.Workbooks.Open "C:\" & strNameExcel
    End If
    
    For Each myWKB In myExcel.Workbooks
        If myWKB.Name = strNameExcel Then
            fileLoaded = True
            myWKB.Activate
            Exit For
        End If
    Next myWKB
    
    If Not fileLoaded Then
        Set myWKB = myExcel.Workbooks.Open("C:\" & strNameExcel)
    Else
        ' myWKB wurde durch die For Schleife gesetzt
    End If
    
    myExcel.WindowState = xlMinimized
    myExcel.Visible = True
    myExcel.WindowState = xlNormal
    
    ' Zugriff auf die Zelle A1 in Tabelle 2
    ' myWKB.Worksheets("Tabelle2").Cells(1, 1).Value = 1


End Sub




Betrifft: AW: Excel-Prozess aus anderem Programm start
von: volti
Geschrieben am: 11.08.2020 10:37:45

Hallo Dominik,

falls Du nur ein Makro in der Datei laufen lassen willst oder Werte benötigst, ohne die Datei unbedingt zu sehen, kannst Du nachfolgenden Code dazu testen.
Falls Du die Datei auch sehen musst,: Ich kriege sie mit diesem Code gerade nicht sichtbar geschaltet.
Dann versuche es mit Peters Variante.

Code in die Zwischenablage[+][-]
Sub main() Dim oExcel As Object, oFile As Object 'Excel-Application, Dateiobject Dim sDateiname As String, sPfadname As String sPfadname = "C:\Users\voltm\Desktop\" '"C:\" sDateiname = "01-Steuerungsexcel.xlsm" sDateiname = "Makro_Sende E-Mail.xlsb" 'Datei holen wenn schon offen oder noch zu Set oFile = GetObject(PathName:=sPfadname & sDateiname) If Not oFile Is Nothing Then Set oExcel = oFile.Parent 'Elternfenster hier die Excel-Application setzen oExcel.Visible = True 'Application sichtbar schalten oFile.Activate 'Beispiel Zugriff auf eine Zelle MsgBox oFile.Sheets(1).Range("A1").value On Error Resume Next intStartZeile = oExcel.Run("'" & sDateiname & "'!ErsteZeile") oFile.Close savechanges:=False End If Set oExcel = Nothing Set oFile = Nothing End Sub
viele Grüße aus Freigericht
Karl-Heinz


Betrifft: AW: Excel-Prozess aus anderem Programm start
von: volti
Geschrieben am: 11.08.2020 10:58:34

Sorry,
falsche Hierarchie.
Aber ihr wisst ja, wer gemeint ist :-)

VG KH

Beiträge aus dem Excel-Forum zum Thema "Excel-Prozess aus anderem Programm start"