PDA

Vollständige Version anzeigen : Pfad zu Excel-Arbeitsblättern speichern und diese dann mit ShellExecut aufrufen


xlarge
10.07.2006, 21:20
Hallo liebe Accessgemeinde,
zwei volle Abende habe ich nun schon damit zugebracht Beiträge im Forum zu den Themen "Dateiauswahl" und "Dateiaufruf mit Shell Execut" zu lesen. Habe aber die Lösung meines Problemes nicht gefunden.

Ich habe unterschiedliche Exceltabellen zu verschiedenen Projekten gespeichert. Diesen Speicherort möchte ich nun auf komfortable Art und Weise in ein Feld einer Tabelle speichern. Die Tabelle heißt Dokumente und enthält die Felder
DokuID, DokuNme, DokuAm, DokuVon, DokuPfad.

Alle Arbeitsblätter (Dokumente), die zu einem bestimmten Projekt gehören sind in einer Exceldatei zusammengefasst.

Nun möchte ich über einen Dateiauswahldialog die einzelnen Tabellenblätter in der ExcelArbeitsmappe auswählen (hier gibt es ein Beispiel von Uwek zum Import von Excel Tabellenblättern) und in DokuPfad abspeichern.
Wie kann ich den Pfad bis hin zum einzelnen Tabellenblatt speichern.

Wie eine Datei mit ShellExecute geöffnet wird ist im Forum erklärt. Aber wie kann ich ein Spezielles Tabellenblatt in einer Datei öffnen (unter Verwendung des gespeicherten Pfades) ?

Kann mir da Jemand weiterhelfen?

Gruß xlarge

Dan
10.07.2006, 23:17
Hallo,

jetzt nochmal der zweite Versuch einer Antwort, eben ist mein Laptop mit Bluescreen abgeschmiert. Acer mag halt keine WLAN-Karten :mad:

Zum Thema:
Ich würde Excel nicht über ShellExecute sonder über Excel-Objekte bedienen:
Dazu benötigt man unter Extras/Verweise einen Verweis auf die MS Excel-Objekte.
Wenn man dann Pfad, Dateiname und Blattname irgendwo abgelegt hat, kann man diese, wie folgt verarbeiten:


Sub Machwas()
Dim appXL As Excel.Application
Dim wbk As Excel.Workbook
Dim wsh As Excel.Worksheet

Dim strPfad As String
Dim strMappe As String
Dim strBlatt As String

On Error GoTo ErrExit

strPfad = "D:\Project\SEJ\"
strMappe = "MeineMappe.xls"
strBlatt = "Das Blatt"

Set appXL = New Excel.Application 'Öffnet ein neues Excel (unsichtbar)
Set wbk = appXL.Workbooks.Open(strPfad & strMappe) 'Öffnet Arbeitsmappe nach Pfad + Dateiname (inkl. Endung)

appXL.Visible = True 'Licht einschalten (sichtbar)

Set wsh = wbk.Worksheets(strBlatt) 'Falls man noch was mit dem Sheet vor hat
wsh.Activate 'z.B. aktivieren


NormExit:
Set wsh = Nothing 'Objektvariablen löschen
Set wbk = Nothing
Set appXL = Nothing
Exit Sub

ErrExit: 'Fehlerbeschreibung und Nummer ausgeben
MsgBox Err.Description & " (" & Err.Number & ")", vbExclamation, "Excelöffner"
If Not appXL Is Nothing Then appXL.Visible = True 'Im Falle eines Fehlers Excel sichtbar machen
'Man kann es auch automatisch schliessen etc.
'unbehandelt bleiben Excel-Leichen im Speicher
Resume NormExit 'zurück zum normalen Ende

End Sub


Hilft das weiter?

J_Eilers
11.07.2006, 06:48
Hi,

du kannst zB mit dem FileSearch-Objekt die Ordner durchlaufen und musst dann leider jede XLS in einem Excelobjekt öffnen um die Namen der Tabellenblätter auszulesen. Dann kannst du alles speichern und sie, wie von Dan beschrieben, mit dem entsprechenden Tabellenblatt öffnen.

xlarge
11.07.2006, 20:17
hallo DAN,
habe Deinen Code getestet. Er funktioniert prima. Allerdings hätte ich da noch eine Frage: Ist es möglich eine Zeile einzubauen die zuerst prüft ob Excel schon geöffnet ist? Wenn ja nur das Arbeitsblatt öffnet oder wenn nein so wie gehabt reagiert.

Vielen Dank Xlarge

Dan
11.07.2006, 20:59
Hallo,...

ja, kann man.

Alternativ zu der Zeile:

Set appXL = New Excel.Application

hätte man auch folgende Zeile verwenden können:

Set appXL = CreateObject("Excel.Application")

und für ein schon offenes Excel

Set appXL = GetObject(,"Excel.Application)

Wenn kein Excel offen ist erhält man einen Fehler 429
"Objekterstellung durch ActiveX-Komponente nicht möglich!"

Weitere Hilfe zu GetObject gibt es unter der Microsoft Hilfe unter der "GetObject-Funktion" (vor allem das Beispiel :) )

cu Daniel

xlarge
13.07.2006, 10:58
Hallo DAN

vielen Dank für Deine Hilfe

xlarge
13.07.2006, 11:03
Danke J_Eilers,
habe die BeispielDB aus diesem Beitrag abgeändert:
http://www.ms-office-forum.net/forum/showpost.php?p=830827&postcount=5

Anstatt bei cmd_Import_Click TransferSpreadsheat zu aktivieren übernehme ich die Variabeln sFile (Pfad zur Datei) und sSheet (Arbeitsblatt) in meine Tabelle siehe oben.

Problem gelöst!!! Vielen Dank nochmal an alle.
Gruß xlarge