Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: wuffwuff2003 am April 29, 2013, 22:17:56

Titel: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am April 29, 2013, 22:17:56
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.

Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am April 30, 2013, 05:22:06
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]
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 01, 2013, 12:09:43
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am Mai 01, 2013, 12:17:21
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 01, 2013, 14:27:39
Hi,

Vielen Dank jetzt hat's funktioniert :) Ist es auch möglich in VBA festzulegen, dass Excel im Vollbildmodus gestartet werden soll?

Mfg
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am Mai 01, 2013, 15:23:09
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]
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 01, 2013, 15:41:40
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)
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am Mai 01, 2013, 16:07:42
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 01, 2013, 22:26:24
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

Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am Mai 02, 2013, 05:12:16
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 02, 2013, 09:33:28
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: bahasu am Mai 02, 2013, 09:53:47
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 02, 2013, 17:14:44
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
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: daolix am Mai 02, 2013, 19:06:59
Hallo

evtl so:
public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
etc
Titel: Re: Excel Tabelle aux Acces heraus starten
Beitrag von: wuffwuff2003 am Mai 02, 2013, 20:39:07
Hallo

So funktioniert es, vielen lieben Dank :) Ihr seid einfach spitze :)