Hallo zusammen
Ich möchte einen Button in einem Formular haben, dass wenn ich diesen Anklicke, er mir eine bestimmte Excel Datei öffnet, aber das gelingt mir nicht. Die Excel Datei befindet sich im gleichen Ordner wie die Datenbank von Access, es sollte einfach automatisiert ablaufen, ohne dass man in Windows selbst Excel öffnet dann die Datei öffnet, sondern per Klick auf den Button soll Excel sich öffnen mitsamt der gewünschten Datei. Hat hier jemand vielleicht eine Idee wie das zu programmieren wäre, ein Makro dafür gibt es ja sowieso nicht.
Moin,
Private Sub Excel_ausfuehren_Click()
Dim Pfad As String
Dim Excel_Datei As String
On Error GoTo Fehler
Pfad = Application.CurrentProject.Path
Excel_Datei = "test.xls"
Application.FollowHyperlink Pfad & "\" & Excel_Datei, , True
Exit Sub
Fehler:
MsgBox Err.Number & " " & Err.Description
Exit Sub
End Sub
Beispiel im Anhang.
Harald
[Anhang gelöscht durch Administrator]
Hallo
Danke für das Skript ich bekommen allerdings die Fehlermeldung die angegebene Datei konnte nicht gefunden werden. Nun ist es so, daß sowohl die Accessdatenbank als auch die Excel Datei im selben Ordner sind, allerdings auf einem Laufwerk auf dem Server, der die Bezeichnung Z hat. Ändert sich da vielleicht noch was in der Schreibweise des Pfades?
Private Sub BefehlPreisliste_Click()
Dim Pfad As String
Dim Excel_Datei As String
On Error GoTo Fehler
Pfad = Application.CurrentProject.Path
Excel_Datei = "Preisliste Atelier.xlsx"
Application.FollowHyperlink Pfad & "Z:\Accesdatenbank" & Excel_Datei, , True
Exit Sub
Fehler:
MsgBox Err.Number & " " & Err.Description
Exit Sub
End Sub
Mfg
Hi
probier mal:
Zitat von: wuffwuff2003 am Mai 01, 2013, 12:09:43
Application.FollowHyperlink "Z:\Accesdatenbank" & "\" & Excel_Datei, , True
Pfad fällt weg unter der Voraussetzung dass Z:\... die korrekte Adresse ist.
Harald
Hi,
Vielen Dank jetzt hat's funktioniert :) Ist es auch möglich in VBA festzulegen, dass Excel im Vollbildmodus gestartet werden soll?
Mfg
Hi,
Zitat von: wuffwuff2003 am Mai 01, 2013, 14:27:39
Ist es auch möglich in VBA festzulegen, dass Excel im Vollbildmodus gestartet werden soll?
Die Antwort lautet nicht "42" sondern "Ja". ;D
Zu den zuvor aufgeführten Zeilen beim Click-Ereignis ist eine weitere hinzugekommen (siehe Anhang).
In dieser wird eine sub aufgerufen, die Excel maximiert.
Die sub steht im Modul. dessen Inhalt größtenteils aus der access-Hilfe stammt.
Harald
[Anhang gelöscht durch Administrator]
Hi
Also wenn ich diese hinzugewonnene Zeile:
Call GetExcel(Pfad & "\" & Excel_Datei)
unter den Application.FollowHyperlink setze bekomme ich eine Fehlermeldung beim kompilieren : Sub oder Function nicht definiert
hmmm
der Fehler erscheint im Modul in der Zeile Detect Excel
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
DetectExcel
' Objektvariable so festlegen, daß sie auf die gewünschte Datei verweist.
Set XL1 = GetObject(Pfad_Datei)
Hi,
Zitat von: wuffwuff2003 am Mai 01, 2013, 15:41:40
der Fehler erscheint im Modul in der Zeile Detect Excel
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
DetectExcel
ist "Private Sub DetectExcel()" im Modul vorhanden?
Ist überprüfbar durch:
Curcor auf DetectExcel setzen
rechte Maus klicke
im Kontextmenü Definition anklicken
Harald
Hallo ich kriege dann als Antwort : Bezeichner nicht gefunden.
Hier mal das komplette Modul:
Option Compare Database
Option Explicit
Public Sub GetExcel(Pfad_Datei As String)
Const WM_SYSCOMMAND = &H112
Const SC_MAXIMIZE = &HF030&
Dim hWnd As Long
Dim XL1 As Object ' Variable für Verweis auf Microsoft Excel.
Dim ExcelLiefNicht As Boolean ' Attribut für Freigabe am Ende.
' Überprüfen, ob eine Kopie von Microsoft Excel bereits
' ausgeführt wird.
On Error Resume Next ' Fehlerbehandlung zurückstellen.
' GetObject-Funktionsaufruf ohne erstes Argument gibt einen Verweis auf
' eine Instanz der Anwendung zurück. Wenn die Anwendung nicht
' ausgeführt wird, tritt ein Fehler auf.
Set XL1 = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelLiefNicht = True
Err.Clear ' Err-Objekt im Fehlerfall löschen.
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
DetectExcel
' Objektvariable so festlegen, daß sie auf die gewünschte Datei verweist.
Set XL1 = GetObject(Pfad_Datei)
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden.
' Fenster mit der Datei unter Verwendung der Windows-Auflistung des
' XL1-Objektverweises anzeigen.
XL1.Application.Visible = True
XL1.Parent.Windows(1).Visible = True
hWnd = FindWindow("XLMAIN", 0)
SendMessage hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0
Set XL1 = Nothing ' Verweis auf Anwendung und
' Tabelle freigeben.
End Sub
Moin,
der "komplette" Code im Modul lautet:
Option Compare Database
Option Explicit
' Deklarieren der nötigen API-Routinen:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Sub DetectExcel()
' Diese Prozedur erkennt, ob Excel ausgeführt wird, und registriert dies.
Const WM_USER = 1024
Dim hWnd As Long
' Wenn Excel ausgeführt wird, wird durch Ausführen dieses
' API-Aufrufs die zugehörige Zugriffsnummer zurückgegeben.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 bedeutet, daß Excel nicht ausgeführt wird.
Exit Sub
Else
' Excel wird ausgeführt. Verwenden der API-Funktion
' SendMessage, um Excel in der Tabelle ausgeführter
' Objekte einzutragen.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
Public Sub GetExcel(Pfad_Datei As String)
Const WM_SYSCOMMAND = &H112
Const SC_MAXIMIZE = &HF030&
Dim hWnd As Long
Dim XL1 As Object ' Variable für Verweis auf Microsoft Excel.
Dim ExcelLiefNicht As Boolean ' Attribut für Freigabe am Ende.
' Überprüfen, ob eine Kopie von Microsoft Excel bereits
' ausgeführt wird.
On Error Resume Next ' Fehlerbehandlung zurückstellen.
' GetObject-Funktionsaufruf ohne erstes Argument gibt einen Verweis auf
' eine Instanz der Anwendung zurück. Wenn die Anwendung nicht
' ausgeführt wird, tritt ein Fehler auf.
Set XL1 = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelLiefNicht = True
Err.Clear ' Err-Objekt im Fehlerfall löschen.
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
DetectExcel
' Objektvariable so festlegen, daß sie auf die gewünschte Datei verweist.
Set XL1 = GetObject(Pfad_Datei)
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden.
' Fenster mit der Datei unter Verwendung der Windows-Auflistung des
' XL1-Objektverweises anzeigen.
XL1.Application.Visible = True
XL1.Parent.Windows(1).Visible = True
hWnd = FindWindow("XLMAIN", 0)
SendMessage hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0
Set XL1 = Nothing ' Verweis auf Anwendung und
' Tabelle freigeben.
End Sub
Bitte auch die roten Stellen verwenden.
Harald
Hallo,
Diesen Teil wurde von Access ausgeblendet, nachdem ich das nochmals eingefügt habe bekomme ich folgende Fehlermeldung: Fehler beim Kompilieren, Der Code in diesem Projekt muss für die Verwendung auf 64-Bit Systemen aktualisiert werden. Überarbeiten und aktualisieren Sie Declare-Anweisungen, und markieren Sie sie mit dem PtrSafe-Attribut.
Da liegt das Problem, ohjee :-X
Hi,
eventuell hilft der Hinweis: Just change the "user32" to "user64" {gelesen auf: http://www.forbiddencheats.net/forum/visual-basics/5509-vbulletin-net-changing-codes-32-bit-64-bit.html}
Harald
Hallo,
Nein das hatte ich bereits versucht, den user32 umzubenennen, oder die Ziffer ganz wegzunehmen, damit kam ich nicht weiter weder mit user, noch mit user64 bin da noch am rätseln und suchen.
Mfg
Hallo
evtl so:
public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
etc
Hallo
So funktioniert es, vielen lieben Dank :) Ihr seid einfach spitze :)