enno
Goto Top

Excel 2007 - VBA Aufruf einer externen Prozedur klappt nur als ADMIN zu 100 Prozent

Hallo Gemeinde,

ich habe da ein großes, mir nicht zu erklärendes Problem.

Und zwar habe ich ein Makro, welches aus einem Tabellenblatt im Export eine TXT-Datei erstellt.
Das funktioniert wunderbar.
Dann soll via Shell eine Batchdatei ausgeführt werden.
Auch das funktioniert.

Jetzt kommt das mir nicht zu erklärende "ABER".

Die Batchdatei, welche ja schon nichts mehr mit dem eigentlichen EXCEL-Sheet zutun hat, ruft ein Programm mit diversen Parametern auf, welches sich aus dem oben erwähnten Export bedient.
Und zwar werden über das externe Programm sog. GS1-/NVE-Etiketten erzeugt.

Diese beinhalten ganz viel Text und EAN128-Barcodes.

Und da ist mein Problem.

Die GS1-Labels haben alle keinen vollständigen Barcode im Ausdruck sondern nur 6 Stellen.

Das Export-File ist korrekt und wenn ich die Batch nicht per Excel sondern per Hand ausführe, dann klappt es alles.

Wenn ich jetzt sage, dass Excel als Admin gestartet wird (also ausführen als...) dann läuft auch das komplette Makro inkl. Batchaufruf wie es sein soll.

Hilfe ich komme hier nicht weiter zumal Excel ja nur sagt, dass die Batch-Datei ausgeführt wird und mehr nicht.

Content-Key: 318372

Url: https://administrator.de/contentid/318372

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: emeriks
emeriks 19.10.2016 um 08:52:42 Uhr
Goto Top
Hi,
Hilfe ich komme hier nicht weiter zumal Excel ja nur sagt, dass die Batch-Datei ausgeführt wird und mehr nicht.
Excel sagt das? Wie?
Ich gehe davon aus, dass das eine Sache der VBA-Prozedur ist.

Das Export-File ist korrekt und wenn ich die Batch nicht per Excel sondern per Hand ausführe, dann klappt es alles.
Wenn ich jetzt sage, dass Excel als Admin gestartet wird (also ausführen als...) dann läuft auch das komplette Makro inkl. Batchaufruf wie es sein
Was ist wenn Du die Batsch außerhalb von Excel ausführst? Musst Du sie dann auch "als Admin" starten damit sie funktioniert? Wo ist sie denn gespeichert? Und wo die Text-Datei?

E.
Mitglied: enno
enno 19.10.2016 um 09:05:47 Uhr
Goto Top
Zu erst einmal vielen lieben Dank für dein Mitwirken.

Also die Dateien, das Excel (XLSM)-Sheet, die Exportdatei und alles was dazu gehört liegen in einem Netzwerkordner worauf jeder Zugriff (ob schreibend oder lesend) hat.

Nein das Batch-File kann ich ganz einfach so ausführen ohne Admin und den ganzen Zermon.

Das ist ja das komische.

Denn an sich läuft das Batch ja auch ohne Fehler.
Nur das Endprodukt ist, naja gelinde gesagt, unbenutzbar.
Mitglied: emeriks
emeriks 19.10.2016 um 09:14:22 Uhr
Goto Top
Das müsstest Du dann einfach mal im VBA debuggen.
Mitglied: enno
enno 19.10.2016 um 09:20:26 Uhr
Goto Top
Hallo,

das ist doch das komische.

IM VBA läuft alles reibungslos und die Exportdatei wird auch so erzeugt wie ich diese haben muss.
Danach erst wird einfach eine BATCH via "SHELL" ausgeführt die den Rest macht.
Da bin ich doch schon gar nicht mehr in Excel /VBA etc.
Mitglied: emeriks
emeriks 19.10.2016 um 09:22:53 Uhr
Goto Top
Na dann debugge in der CMD. Bau Abfragen rein. Leite die Ausgaben in Textdateien um. Oder rufe die Kommandos der CMD der Reihe nach direkt aus VBA auf.
Mitglied: emeriks
emeriks 19.10.2016 um 09:23:30 Uhr
Goto Top
Wie sieht denn die geheimnisvolle CMD aus? Und der geheimnisvolle Aufruf aus dem VBA?
Mitglied: enno
enno 19.10.2016 um 10:21:28 Uhr
Goto Top
Weiß nicht ob du jetzt viel damit anfangen kannst:

Private Declare Function GetModuleHandle Lib "kernel32" _
Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long '()

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function IsWow64Process Lib "kernel32" _
(ByVal hProcess As Long, ByRef Wow64Process As Long) As Long

Sub Batch_Druck()

Dim Transeti As String 'Programm Transportetiketten
Dim Its64 As Long '64Bit ja/nein
Dim handle As Long
Dim strCommand As String 'Endkommando
Dim pJob As String 'Drucktyp
Dim pFile As String 'Parameterdatei der Druckausgabe

handle = GetProcAddress(GetModuleHandle("kernel32"), _
"IsWow64Process")

If handle > 0 Then ' IsWow64Process function exists
' Now use the function to determine if
' we are running under Wow64

IsWow64Process GetCurrentProcess(), Its64
End If
If Its64 = 1 Then
Transeti = """C:\Program Files (X86)\Will Software\Transportetiketten\Transeti.exe""" 'ausführbares Programm
Else: Transeti = """C:\Program Files\Will Software\Transportetiketten\Transeti.exe""" 'ausführbares Programm
End If

pJob = "FilePrint"
pFile = """\\file-server\Datenaustausch\Intern\GS1 - Transportetiketten\GS1-Etikettendruck.txt"""

strCommand = Transeti & pJob & pFile

Shell strCommand, 0

End Sub
Mitglied: emeriks
emeriks 19.10.2016 um 10:25:14 Uhr
Goto Top
  1. Bitte Code-Tags benutzen
  2. führst Du keine Batch-Datei aus sondern direkt die EXE
  3. hast Du die Leerzeichen vergessen
strCommand = Transeti & " " & pJob & " " & pFile  
Mitglied: emeriks
emeriks 19.10.2016 um 10:30:35 Uhr
Goto Top
Weiterhin:
Ändere mal den Aufruf in
strCommand = "cmd.exe /k " & Transeti & " " & pJob & " " & pFile  
und starte diesen sichtbar
Shell strCommand, 1
Mitglied: enno
enno 21.10.2016 um 09:26:20 Uhr
Goto Top
Hi zuasmmen und vielen Dank für die Hilfen.

So also das Problem an der ganzen komischen Geschichte war schlichtweg mein Rechner.
Fragt mich nicht warum.
Habe die Prozedur an anderen Rechnern ausprobiert und da funktioniert es tadellos.

Sorry für das Durcheinander.

Aber darauf kommt doch keiner.

Oder ?