Excel starten wenn ...

  • #1
C

Condor2007

Guest
Hallo.

Ich habe eien Frage zu Excel.

Ich habe eine Datei datser.exe und die conwer.xls.

Die conwer.xls, soll nur gestartet werden, wenn die Datei datser.exe bereits aktiv ist. Ansonsten soll die conwer.xls nicht gestartet werden.

Begründung:
Durch die datser.exe werden Daten auf dem PC eingespielt, die die Datei conwer.xls verarbeiten soll. Wenn die conwer.xls ohne das die datser.exe gestartet wurde, gestartet wird, dann meckert Excel, da die Quelldaten nicht vorhanden sind.

Wer kann mir helfen?

Ich bedanke mich bei allen und wünsche ein paar ganz ganz besondere Tage.

Condor 2007
 
  • #2
Hallo Condor2007,

also man könnte folgendermassen prüfen, ob datser.exe bereits läuft.
(Unter findet sich die Einbindung der notwendigen Windows-API's)

In deiner conwer.xls in einem Modul sollte folgender Code liegen:
Code:
Option Explicit
Option Private Module

'======================================================
'Ursprung: [url]http://www.vbarchiv.net/archiv/tipp_572.html[/url]
'======================================================

' zunächst die benötigten API-Deklarationen
Private Declare Function CreateToolhelpSnapshot Lib _
 Kernel32 Alias CreateToolhelp32Snapshot ( _
 ByVal lFlgas As Long, ByVal lProcessID As Long) _
 As Long
 
Private Declare Function ProcessFirst Lib Kernel32 _
 Alias Process32First (ByVal hSnapshot As Long, _
 uProcess As PROCESSENTRY32) As Long
 
Private Declare Function ProcessNext Lib Kernel32 _
 Alias Process32Next (ByVal hSnapshot As Long, _
 uProcess As PROCESSENTRY32) As Long
 
Private Declare Sub CloseHandle Lib Kernel32 ( _
 ByVal hPass As Long)

Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const MAX_PATH As Long = 260
 
Private Type PROCESSENTRY32
 dwSize As Long
 cntUsage As Long
 th32ProcessID As Long
 th32DefaultHeapID As Long
 th32ModuleID As Long
 cntThreads As Long
 th32ParentProcessID As Long
 pcPriClassBase As Long
 dwflags As Long
 szexeFile As String * MAX_PATH
End Type
' Prüft, ob eine EXE-Datei bereits ausgeführt wird
Function IsEXERunning(ByVal sFilename As String) As Long
 
 Dim lSnapshot As Long, uProcess As PROCESSENTRY32, nResult As Long
 
-> Snapshot des aktuellen Prozess ermitteln
 lSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
 If lSnapshot <> 0 Then
  uProcess.dwSize = Len(uProcess)
  
 -> Ersten Prozess ermitteln
  nResult = ProcessFirst(lSnapshot, uProcess)
  
  Do Until nResult = 0
  -> Prozessliste durchlaufen
   If InStr(LCase$(uProcess.szexeFile), LCase$(sFilename)) > 0 Then IsEXERunning = True: Exit Do
   nResult = ProcessNext(lSnapshot, uProcess)
  Loop
  CloseHandle lSnapshot
 End If
End Function

In der Code-Seite der Mappe(DieseArbeitsmappe) sollte dann folgender Code liegen:
Code:
Private Sub Workbook_Open()
 Dim sDietrich As String
 sDietrich = ThisWorkbook.Path & Application.PathSeparator & OeffneMich.txt
 If Dir(sDietrich, vbNormal) <>  Then Exit Sub
 If Not IsEXERunning(datser.exe) Then
  MsgBox Mappe wird geschlossen, weil datser.exe nicht läuft.
  ThisWorkbook.Close SaveChanges:=False
 End If
End Sub

Wie du siehst, hab ich dir noch einen Dietrich eingefügt:
Liegt im Verzeichnios der Mappe eine Text-Datei names OeffneMich.txt, dann öffnet sich die Datei, auch wenn die datser.exe nicht läuft. So kannst immer an die Datei / Makros kommen.

Gruß Matjes :)
 
  • #3
Danke ! ! !

Das Problem ist gelößt.

Gruß, Condor.
 
Thema:

Excel starten wenn ...

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben