PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic 6 Problem


(del)
2004-08-03, 13:21:34
Gruezi

Ich hab nen kleines Problem in Visual Basic 6.

Ausgangslage:
Ein Menü soll ein Word-Dokument in Word aufrufen. Allerdings klappt mein bisheriger Code nur mit EXE-Dateien. Verknüpfte Dateitypen ruft er nicht auf und sagt "Falscher Prozeduraufruf".

Am besten wäre es, wenn das Menü nur das DOC-Dokument aufruft. Das würde mir eine Registry-Abfrage ersparen, in der ermittelt wird, wo die Winword.exe liegt.

Allerdings wär mir das egal, wenn ihr mir ein funktionierenden Code erklären könntet.

Danke im Voraus!
Mayday

Gast
2004-08-03, 13:53:24
Das ruft eine verknüpfte Anwendung auf, wenn man versucht, das Dokument zu öffnen:

Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
lpOperation As String, ByVal lpFile As String, ByVal _
lpParameters As String, ByVal lpDirectory As String, ByVal _
nShowCmd As Long) As Long
Declare Function GetDesktopWindow Lib "user32" () As Long

Public Function OpenDok(Dateiname$) As Long

Dim lSuccess&, lWnd&

lWnd = GetDesktopWindow()
lSuccess = ShellExecute(lWnd, "open", Dateiname, _
vbNullString, "C:\", SW_SHOWNORMAL)
If lSuccess < 33 Then
MsgBox "Die angegebene Datei konnte nicht gefunden _
werden oder sie ist mit keiner Anwendung verknüpft.", _
vbExclamation + vbOKOnly, "Dateifehler"
End If

OpenDok = lSuccess

End Sub

' Aufruf mit
' x = OpenDok ("c:\eigene dateien\meintext.doc")
' startet die mit doc verknüpfte Anwendung (z.B. Winword, Openoffice)



Interessant für dich wäre vielleicht auch noch das hier:
Declare Function FindExecutable Lib "shell32.dll" _
Alias "FindExecutableA" (ByVal lpFile As String, ByVal _
lpDirectory As String, ByVal lpResult As String) As Long

Public Function FindExe(dok$, path$) As String

Dim i&
Dim exe$

exe = Space(254) + Chr(0)

i = FindExecutable(dok, path, exe)
FindExe = Left(exe, InStr(exe, Chr(0)) - 1)

End FunctionDiese Funktion gibt den Aufrufnamen der verknüpften Anwendung zurück.

Hoffe stimmt alles, habe gerade kein VB da.

(del)
2004-08-03, 14:11:21
Vielen Dank. Werd das mal ausprobieren.

(del)
2004-08-03, 14:50:42
Klappt leider nicht so ganz. Gibt ständig merkwürdigste Fehler. Ich muss dazu sagen, das ich in Visual Basic 6 nicht so ganz bewandert bin. Ich benutze es eher als WYSIWYG Fenstereditor...

Um nochmal zusammenzufassen:

1. Ich habe einen Button.
2. Ein Klick soll ein Word-Dokument öffnen

Kann mir das jemand bitte anschaulich erklären?
Ich kriegs nicht gebacken...

Gast
2004-08-04, 14:33:02
Also:

1. Füge deinem Projekt ein Modul hinzu.
2. Kopiere den Code aus dem ersten Beispiel in das Modul.
Hier nochmal in "schön":

Option Explicit

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Declare Function GetDesktopWindow Lib "user32" () As Long

Public Const SW_SHOWNORMAL As Long = 1

Public Function OpenDok(Dateiname$) As Long

Dim lSuccess&, lWnd&

lWnd = GetDesktopWindow()
lSuccess = ShellExecute(lWnd, "open", Dateiname, vbNullString, "C:\", SW_SHOWNORMAL)
If lSuccess < 33 Then
MsgBox "Die angegebene Datei konnte nicht gefunden werden oder sie ist mit keiner Anwendung verknüpft.", vbExclamation, vbOKOnly, "Dateifehler"
End If

OpenDok = lSuccess

End Function


3. Schreibe in das Click-Ereignis deines Buttons:

OpenDok ("c:\temp\readme.txt")

Statt "c:\temp\readme.txt" nimmst du natürlich das von dir gewünschte Dokument.

(del)
2004-08-04, 17:40:34
OK. Vielen Danke für deine Hilfe. :)