Excel Datei bei click öffnen

Hallo,

ich habe wieder mal folgendes Problem, ich möchte in meinem Programm eine Excel-Datei öffnen! Diese fest abgelegte Excel-Datei soll bei Click auf einen Button geöffnet werden und es sollen dann darin Ergebnisse angzeigt werden!

Wäre echt super, wenn ihr mir dabei helfen könntet.

Gruß
André

Hallo André,

wenn du Excel im Pfad hast, geht’s ganz einfach:

shell „Excel E:\test\test.xls“

Gruß
Daniel

Danke,
aber kannst du mir den Pfad erklären, denn ich verstehe nicht, was dieses Excel davor noch aussagt?

Gruß aus dem Rhein-Main Gebiet
André

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo,

den excel-pfad ermittelt man in excel über

application.path

in visual-basic bleibt nur die möglichkeit, das ganze über einen api-call aus der registry auszulesen. wenn jemand den code braucht, bitte hand heben

gruß

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

danke erst mal! Wie mache ich das jetzt in Visual Basic. Ich will doch einfach nur eine Excel-Datei öffnen.

Gruß André

Hallo Andre,

kopiere den gesamten code. mit der funktion kannst du(vorrausgesetzt du hast office2000) den excel-installationspfad aus der registry auslesen…

anschliessend benutzt du die „shell“ um excel und deine datei zu öffnen

gruß

rasta

Private Declare Function RegOpenKeyEx Lib „advapi32.dll“ Alias „RegOpenKeyExA“ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib „advapi32.dll“ Alias „RegQueryValueExA“ (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib „advapi32.dll“ (ByVal hKey As Long) As Long

'RegOpenKeyEx hKey-Konstanten
Private Const HKEY_USERS = &H80000003 'Current Users Hauptschlüssel
Private Const HKEY_PERFORMANCE_DATA = &H80000004 '(Win NT/2000) Performance Data schlüssel
Private Const HKEY_LOCAL_MACHINE = &H80000002 'Local Machine Schlüssel
Private Const HKEY_DYN_DATA = &H80000006 '(Win 95/98) Dynamisch Daten
Private Const HKEY_CURRENT_USER = &H80000001 'Current User Schlüssel
Private Const HKEY_CURRENT_CONFIG = &H80000005 'Current Config Schlüssel
Private Const HKEY_CLASSES_ROOT = &H80000000 'Classes Root Schlüssel

'RegOpenKeyEx samDesired-Konstanten
Private Const KEY_ALL_ACCESS = &HF003F 'Alle arten von Zurgiffen
Private Const KEY_CREATE_LINK = &H20 'Erlaubnis zum Symbolischen erstellen von Links
Private Const KEY_CREATE_SUB_KEY = &H4 'Erlaubnis zum unterschlüssel erstellen
Private Const KEY_ENUMERATE_SUB_KEYS = &H8 'Erlaubnis zum Enumerieren der Unterschlüssel
Private Const KEY_NOTIFY = &H10 'Erlaubnis über änderungen benachritet zu werden
Private Const KEY_QUERY_VALUE = &H1 'Erlaubnis zum Auslesen von Unterschlüssel Daten
Private Const KEY_READ = &H20019 'Lese zugriff
Private Const KEY_SET_VALUE = &H2 'Erlaubnis zum Schreiben von werten in Unterschlüsseln
Private Const KEY_WRITE = &H20006 'Schreib zugriff

'RegQueryValueEx lpType-Konstanten
Private Const REG_BINARY = 3 'Eine Bytefolge
Private Const REG_DWORD = 4 'Ein 32-Bit Integer wert (Little Endian)
Private Const REG_DWORD_BIG_ENDIAN = 5 'Ein 32-Bit Integer (Big Endian)
Private Const REG_EXPAND_SZ = 2 'Ein VBNullChar Terminierter String der Umgebungsvariablen enthält
Private Const REG_LINK = 6 'Ein Unicode symbolischer Link
Private Const REG_MULTI_SZ = 7 'Eine Serie von Strings, jedes getrennt mit einem VBNullChar-Zeichen und das ende mit 2 VBNullChar-Zeichen
Private Const REG_NONE = 0 'Keine Daten
Private Const REG_RESOURCE_LIST = 8 'Eine liste von Ressourcen in einer Ressourcen Map
Private Const REG_SZ = 1 'Ein VBNullChar-Zeichen Terminierter String

Public Function instExcel()
Dim Retval As Long, hKey As Long
Dim TmpSNum As String * 255

'Registryeintrag Öffnen
Retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, „Software\Microsoft\Office\9.0\excel\installroot“, 0&, KEY_READ, hKey)
If Retval 0 Then
MsgBox „Der Registryeintrag konnte nicht geöffnet werden.“
Exit Function
End If

'Wert auslesen
Retval = RegQueryValueEx(hKey, „Path“, 0, REG_SZ, ByVal TmpSNum, Len(TmpSNum))
If Retval 0 Then
MsgBox „Der Registryeintrag konnte nicht gelesen oder gefunden werden.“
Exit Function
End If

instExcel = Left$(TmpSNum, InStr(1, TmpSNum, vbNullChar) - 1)

'Registry wieder schließen
Retval = RegCloseKey(hKey)
End Function

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

danke für deine Mühe aber ich habe es jetzt anders lösen können.Shell shell („C:\Programme\Microsoft Office\Office\excel c:\Datei.xls“)!
Eigentlich total einfach.
Ich habe aber jetzt einerneutes Problem, wie kann ich denn jetzt die Variablen, die ich in Visual Basic eingelesen habe, in Excel ausgeben und gleichzeitig auch noch angeben, in welcher Spalte und Zeile?

Gruß
André

hallo andre,

die lösung die ich dir gesagt habe, ist beispielsweise dann hilfreich, wenn dein programm auf mehreren rechnern im netzwerk laufen soll, und der excel-installationspfad nicht immer derselbe ist.

um daten von deiner vb-anwendung zu übergeben, gibt es mehrere möglichkeiten:

  1. du schreibst es in die registry und liest es in excel wieder aus
  2. du schreibst es in einen textfile und liest es in excel wieder aus
  3. du schreibst es in die datenbank und liest es in excel wieder aus
    oder
  4. und dafür auch ein kleines beispiel: du übergibst die daten direkt an excel

dazu schreibst du in visual basic:

Set m_excel = New Excel.Application
m_excel.Visible = True

Set m_wb = m_excel.Workbooks.Add(logpath + „p_kontenplan.xlt“)
m_wb.CustomDocumentProperties.Add „LOGUID“, False, 4, loguid
m_wb.CustomDocumentProperties.Add „LOGPWD“, False, 4, LOGPWD

und das in excel

If .CustomDocumentProperties(„LOGPATH“).Value „“ Then
yLOGPATH = .CustomDocumentProperties(„LOGPATH“).Value
End If

in etwa verstanden?

viele grüße

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo André,

nur der Vollständigkeit halber:
das „Excel“ steht kurz für den kompletten Excel-Aufruf (also mit Laufwerksbuchstaben, Verzeichnis und .exe).
Bereits seit Urzeiten als es noch DOS gab, gibt es eine sogenannte Pfad-Variable. In dieser werden mehrere Verzeichnisse angegeben, die bei einem Programmaufruf automatisch nach dem passenden Programm durchsucht werden.

Und bei vielen Office-Installationen gehört das Office-Verzeichnis dazu. Daher brauche ich in diesen Fällen nicht genau zu wissen wo Excel liegt, sondern Windows sucht es für mich.

Gruß
Daniel

Einfacher:
Hi,
ohne den ganzen Excel-Pfad-Kram funktioniert das mit folgender Procedure:

Private 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
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Const SW\_SHOWNORMAL = 1

'Kann z.B. auch mit Verzeichnisname (C:\windows) aufgerufen werden, dann wird dieses Verzeichnis aufgerufen.
Public Function StartURL(URL As String) As Long
Dim Scr\_hDC As Long
Scr\_hDC = GetDesktopWindow()
StartURL = ShellExecute(Scr\_hDC, "Open", URL, "", "C:\", SW\_SHOWNORMAL)
End Function
'Aufruf mit Call StartDoc("http://www.vb-tools.de") für Internet-Seite

Public Function StartMail(Mail As String) As Long
On Error Resume Next
Dim Scr\_hDC As Long
Scr\_hDC = GetDesktopWindow()
Mail = "mailto: " & Mail
StartMail = ShellExecute(Scr\_hDC, "Open", Mail, "", "C:\", SW\_SHOWNORMAL)
End Function
'Aufruf mit Call StartMail("[email protected]") für E-Mail

Mit der StartURL kannst du auch die Excel-Datei öffnen, wenn du diese übergibst. Dabei brauchst du den Excel-Pfad nicht zu wissen, da wie im Explorer bei Aufruf der Datei automatisch das zugehörige Programm(Excel) aufgerufen wird…

Ralph

Hi,

danke danke!!!

Jetzt weiß ich aber nicht, was dieser Quelltext aussagt, bzw was er macht. Wo muss ich dass einsetzen?
Klingt bestimmt lächerlich für einen Profi! Bin halt ein blutiger Anfänger!!!

gruß
andré

hi andre,

habe den code etwas kommentiert und so vervollständigt, das du es mit kleinen änderungen leicht zum laufen bringen kannst
diesen code hier schreibst du in dein visual-basic-programm:

dim m_excel As Excel.Application
dim m_wb As Excel.Workbook

Set m_excel = New Excel.Application
m_excel.Visible = True

Set m_wb = m_excel.Workbooks.Add(logpath + „p_kontenplan.xlt“)'logpath=pfad des workbooks
m_wb.CustomDocumentProperties.Add „LOGUID“, False, 4, loguid 'hinzufügen einer benutzdefinierten dokumenten eigenschaft ->hier loguid
m_wb.CustomDocumentProperties.Add „LOGPWD“, False, 4, LOGPWD 'hinzufügen einer benutzdefinierten dokumenten eigenschaft ->hier logpwd

With m_excel
.Run „main.kontenplan“ 'aufrufen des makros im excel-file
End With

'und das in excel (in deinem excel-file, den du in den zeilen darüber aufrufst

'hier wird die dokumenteneigenschaft auf einen wert geprüft, wenn wert ist da, dann auslesen
If .CustomDocumentProperties(„LOGUID“).Value „“ Then
yLOGUID = .CustomDocumentProperties(„LOGUID“).Value
End If

gruß

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]