Registriert seit: 08.07.2016
Version(en): 2016
wow o.k., so klappt es:
Code:
Shell "c:\windows\system32\notepad.exe", vbNormalNoFocus
wenn ich es so mache:
Code:
Sub Exestart()
Dim Dateiname As String
Dim Exepfad As String
Dim TaskID As Long
Exepfad = Worksheets("Rech").Range("A32")
If Worksheets("Rech").Range("A32") = "NA" Then
MsgBox "Kein Pfad vorhanden"
Exit Sub
Else: Shell "Exepfad, vbMaximizedFocus"
End If
End Sub
klappt es nicht. So aber wiederum schon:
Code:
Sub Exestart()
Dim Dateiname As String
Dim Exepfad As String
Dim TaskID As Long
Exepfad = Worksheets("Rech").Range("A32")
If Worksheets("Rech").Range("A32") = "NA" Then
MsgBox "Dateipfad nicht vorhanden"
Exit Sub
Else: TaskID = Shell(Exepfad, vbMaximizedFocus)
End If
End Sub
Warum klappt die 1. Variante nicht? Dort wird dann ja TaskID zwingend benötigt.
Registriert seit: 11.03.2015
Version(en): mittlerweile meistens 2019
Zitat:Else: Shell "Exepfad, vbMaximizedFocus"
Wenn Du etwas in Anführungsstriche setzt, dann wird es zu einer normalen Zeichenkette (String). Damit ist es nicht mehr die Variable Exepfad und die Konstante vbMaximizedFocus, sondern die Zeichenkette "Exepfad, vbMaximizedFocus".
Daher musst Du die Anführungsstriche weglassen. Wenn Du den Inhalt des Strings in Anführungsstriche setzen willst oder musst, dann musst Du die Anführungsstriche extra zum String hinzufügen. Das geht, wenn man diese doppelt verwendet, z. B. so:
Code:
Stringvariable = "Das nächste Wort steht in Anführungszeichen ""Wort"""
Das ganze kann man auch entsprechend verketten, in Deinem Beispiel so
Code:
Exepfad = """" & Worksheets("Rech").Range("A32") & """"
oder
Code:
Else: Shell """" & Exepfad & """", vbMaximizedFocus
Wenn Du die Anführungsstriche nicht brauchst (z. B. wenn im Pafd kein Leerzeichen enthalten ist), dann kannst Du sie auch weglassen:
Code:
Else: Shell Exepfad, vbMaximizedFocus
Gruß
Michael
Registriert seit: 08.07.2016
Version(en): 2016
15.12.2017, 14:16
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2017, 14:16 von o0Julia0o.)
Ist das nicht etwas übertrieben(es funktioniert jedenfalls nicht)?
(15.12.2017, 09:37)Der Steuerfuzzi schrieb: Code:
Exepfad = """" & Worksheets("Rech").Range("A32") & """"
So sollte es doch reichen:
Code:
Exepfad = """ & Worksheets("Rech").Range("A32") & """
denn dann wäre das mittlere " eingerahmt durch 2 " jeweils an den Enden als Textmarkierung. Wenn ich jetzt die Zahl 1 vorne und hinten haben würde, wäre das dann so:
Code:
Exepfad = "1" & Worksheets("Rech").Range("A32") & "1"
und nicht so:
Code:
Exepfad = 1 & Worksheets("Rech").Range("A32") & 1
Aber es funktioniert nicht. Aber so funktioniert es:
Code:
Exepfad = "" & Worksheets("Rech").Range("A32") & ""
Aber wie auch immer, ich muss dieses Task-ID dazuschreiben, sonst funktioniert es bei keiner der Varianten - also so:
Code:
Sub Exestart()
Dim Dateiname As String
Dim Exepfad As String
Dim TaskID As Long
Exepfad = "" & Worksheets("Rech").Range("A32") & ""
If Worksheets("Rech").Range("A32") = "NA" Then
MsgBox "Dateipfad nicht vorhanden"
Exit Sub
Else: TaskID = Shell(Exepfad, vbMaximizedFocus)
End If
End Sub
Registriert seit: 11.03.2015
Version(en): mittlerweile meistens 2019
(15.12.2017, 14:16)o0Julia0o schrieb: So sollte es doch reichen:
Code:
Exepfad = """ & Worksheets("Rech").Range("A32") & """
Der Teil """ & Worksheets(" wäre ein String. Alles was danach kommt würde als Befehl interpretiert, was dann aber zu einem Fehler führt, da er mit Rech nichts anfangen kann!
(15.12.2017, 14:16)o0Julia0o schrieb: Code:
Exepfad = 1 & Worksheets("Rech").Range("A32") & 1
Das würde genauso gehen, da Excel die Zahlen in einen String umwandelt.
(15.12.2017, 14:16)o0Julia0o schrieb: Aber so funktioniert es:
Code:
Exepfad = "" & Worksheets("Rech").Range("A32") & ""
Das ist das gleiche wie:
Code:
Exepfad = Worksheets("Rech").Range("A32")
Du fügst lediglich zwei Leerstrings hinzu, was aber keine Änderung bringt.
Ich weiß ja nicht, was Du machst, aber bei mir läuft das:
Code:
Sub Exestart2()
Dim Dateiname As String
Dim Exepfad As String
Dim TaskID As Long
Exepfad = Worksheets("Rech").Range("A32")
If Worksheets("Rech").Range("A32") = "NA" Then
MsgBox "Dateipfad nicht vorhanden"
Exit Sub
Else
Shell Exepfad, vbMaximizedFocus
End If
Gruß
Michael
Registriert seit: 08.07.2016
Version(en): 2016
ja o.k., so funktioniert das, danke. Ich dachte erst du meintest es so:
Code:
Exepfad = """" & Worksheets("Rech").Range("A32") & """"
Registriert seit: 08.07.2016
Version(en): 2016
19.06.2018, 12:55
(Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2018, 12:55 von o0Julia0o.)
.thx.
Exe vs. Exe vs. ExeIch verwende immer den identische code - nur den Inhalt von Feld A36 ändere ich ab. Also es liegt an den Exe-Dateien. Manche können über ein und denselben Code nicht gestartet werden:
Exe-Version 1:Also noetpad.exe kann ich so starten:
Code:
Dim Dateipfad As String
Dateipfad = Worksheets("Rech").Range("A36")
Call Shell(Dateipfad, vbMaximizedFocus)
End Sub
A36 = C:\Windows\notepad.exe
Exe-Version 2:Aber manche exen nicht. Dann passiert beim Ausführen vom VBA-Code nichts. Auch kein Fehler wird angezeigt. Die Exe-Datei aber auch nicht gestartet.
Wenn ich diese exen explorer doppelklicke, wird das jeweilie Programm ganz normal gestartet. Genauso als wenn ich die notepad.exe im Explorer doppelt klicke. Kann man solche Exe-Dateien denn auch irgendwie über Excel zum Start bewegen?
Exe-Version 3:Bei anderen Exen sagt er folgendes:
Das wird gelb markiert: Call Shell(Dateipfad, vbMaximizedFocus)
A36=D:\Nero\NeroExpressPortable.exe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
zu 2. solltest Du noch beschreiben, um welche exe'n es geht. Mal 2 Hinweise:
- schaue mal in den Taskmanager, ob die exe nicht doch gestartet wurde
- manche exe'n muss man mit cmd /s starten
zu 3. - stimmt eventuell der Pfad nicht?
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 29.09.2015
Version(en): 2030,5
23.06.2018, 22:24
(Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2018, 22:25 von snb.)
Du benützt das Forum als Privatkurs mit Privatlehrern ?
Dazu gibt es bessere Alternative.