Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel-Prozess aus anderem Programm start

Excel-Prozess aus anderem Programm start
10.08.2020 15:45:51
Dominik
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel-Prozess aus anderem Programm start
10.08.2020 15:58:14
peterk
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

AW: Excel-Prozess aus anderem Programm start
10.08.2020 16:06:43
volti
Hallo Dominik,
versuch es mal so (ungetestet):


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

Anzeige
AW: Excel-Prozess aus anderem Programm start
11.08.2020 08:52:18
Dominik
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
Anzeige
AW: Excel-Prozess aus anderem Programm start
11.08.2020 10:23:43
peterk
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

Anzeige
AW: Excel-Prozess aus anderem Programm start
11.08.2020 10:37:45
volti
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.
[+][-]
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

Anzeige
AW: Excel-Prozess aus anderem Programm start
11.08.2020 10:58:34
volti
Sorry,
falsche Hierarchie.
Aber ihr wisst ja, wer gemeint ist :-)
VG KH

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige