Supportnet / Forum / Tabellenkalkulation
tabellenblatt aktivieren
Frage
Hallo!
hätte mal eine Frage.
Ich möchte von Access aus eine bestimmte Exceldatei öffnen.
Das funktioniert soweit.
Hab den Pfad der Datei und den Dateinamen in 2 txtFeldern hinterlegt, sodass der Import vom Benutzer selbst eingegeben werden kann.
Wenn jetzt allerdings sich die Datei öffnet, wird ja immer das 1 Tabellenblatt aktiviert.
Ich würde es aber jetzt gerne so haben, dass der Benutzer in einem 3 txtFeld das TAbellenblatt angeben kann, dass aktiviert, automatisch durch ein Makro bearbeitet und schließlich in Access importiert werden soll.
Das txtFeld für das Tabellenblatt besteht bereits.
Habs mir folgendem Ausdruck versucht, dass Tabellenblatt zu aktiveren.
Sheets("Rohdaten").Activate
Damit wird ja aber immer das selbe Tabellenblatt aktiviert.
Ich hätt mir etwas vorgestellt wie...
Sheets(" & txtTabellenname & )".Activate
sodass eben der Tabellenblattname variable ist.
Kann mir jemand helfen und sagen, wie ich das dann verfassen müsste, dass es funktioniert?
gruß
morpheus
Antwort 1 von nighty
hi morpheus :-)
innerhalb eines string kannst du natuerlich keine zeichen hinzufuegen,eher so Sheets("" & txtTabellenname).Activate
gruss nighty
innerhalb eines string kannst du natuerlich keine zeichen hinzufuegen,eher so Sheets("" & txtTabellenname).Activate
gruss nighty
Antwort 2 von ChatAlligator
Du kannst z.B. ein Makro der Tabelle ausfühen, dass etwa so aussehen könnte:
Sub Tabellenwahl()
Dim Anzeietext As String, Tabelle As String
Dim s As Integer
Anzeigetext = "Welche Tabelle soll geöffnet werden?"
For s = 1 To Sheets.Count
Anzeigetext = Anzeigetext & _
vbCrLf & _
Format(s, "#0") & " = " & _
Sheets(s).Name
Next s
Frage:
Tabelle = InputBox(Anzeigetext, "Tabellenwahl")
If Tabelle = "" Then Exit Sub
If Not IsNumeric(tabname) Then GoTo Frage
If CInt(Tabelle) < 1 Or CInt(Tabelle > Sheets.Count) Then GoTo Frage
Sheets(CInt(Tabelle)).Select
End Sub
Sub Tabellenwahl()
Dim Anzeietext As String, Tabelle As String
Dim s As Integer
Anzeigetext = "Welche Tabelle soll geöffnet werden?"
For s = 1 To Sheets.Count
Anzeigetext = Anzeigetext & _
vbCrLf & _
Format(s, "#0") & " = " & _
Sheets(s).Name
Next s
Frage:
Tabelle = InputBox(Anzeigetext, "Tabellenwahl")
If Tabelle = "" Then Exit Sub
If Not IsNumeric(tabname) Then GoTo Frage
If CInt(Tabelle) < 1 Or CInt(Tabelle > Sheets.Count) Then GoTo Frage
Sheets(CInt(Tabelle)).Select
End Sub
Antwort 3 von Seradest
Hi morpheus,
benutz doch einfach:
sheets(Textbox.value).activate
das setzt allerdings voraus dass der Text in der Textbox auch mit dem Namen des Tabellenblatts, das du öffnen möchtest, übereinstimmt. Oder ist das jetzt zu einfach???
Grüße
Carsten
benutz doch einfach:
sheets(Textbox.value).activate
das setzt allerdings voraus dass der Text in der Textbox auch mit dem Namen des Tabellenblatts, das du öffnen möchtest, übereinstimmt. Oder ist das jetzt zu einfach???
Grüße
Carsten
Antwort 4 von morpheus__85
Hallo zusammen,
erstmal vielen Dank für eure Hilfe.
zu Euren Vorschlägen.
@ nighty...
dein vorschlag is gut, funktioniert soweit auch, nur leider nur ab und zu.
manchmal öffnet er die datei und springt zum richtigen Tabellenblatt, manchmal öffnet er die Datei und springt ganz normal zum TAbellenblatt 1, wenn man dann den Editor aufmacht bekommt man die Fehlermeldung "Laufzeitfehler '1004': Die Methode Sheets für das Objekt '_Global' ist fehlgeschlagen.
Er markiert dann die Zeile
Sheets("" & txtTabellenname.Value).Activate
Das passiert genau bei jedem 2 Versuch.....
@ChatAlligator
Deine Lösung ist auch sehr schön, nur auch dass Problem, dass eben das Fenster mit der Auflistung nur bei jedem 2 Versuch geöffnet wird.
Ansonsten bringt er auch die Fehlermldung das Die MEthode Sheets für das Objekt Global fehlgeschlagen ist.
@ Seradest
Danke auch für deine Hilfe. Leider hab ich genauso bei dir dass Problem... Die Lösung funktionier auch wunderbar aber bei jedem 2 Versuch erhalte ich die Fehlermldungen wie oben. Ansonsten funktioniert es auch einwandfrei :-(
Kann mir jemand sagen, an was das liegt?
Danke für eure Hilfe
Gruß
Morpheus
erstmal vielen Dank für eure Hilfe.
zu Euren Vorschlägen.
@ nighty...
dein vorschlag is gut, funktioniert soweit auch, nur leider nur ab und zu.
manchmal öffnet er die datei und springt zum richtigen Tabellenblatt, manchmal öffnet er die Datei und springt ganz normal zum TAbellenblatt 1, wenn man dann den Editor aufmacht bekommt man die Fehlermeldung "Laufzeitfehler '1004': Die Methode Sheets für das Objekt '_Global' ist fehlgeschlagen.
Er markiert dann die Zeile
Sheets("" & txtTabellenname.Value).Activate
Das passiert genau bei jedem 2 Versuch.....
@ChatAlligator
Deine Lösung ist auch sehr schön, nur auch dass Problem, dass eben das Fenster mit der Auflistung nur bei jedem 2 Versuch geöffnet wird.
Ansonsten bringt er auch die Fehlermldung das Die MEthode Sheets für das Objekt Global fehlgeschlagen ist.
@ Seradest
Danke auch für deine Hilfe. Leider hab ich genauso bei dir dass Problem... Die Lösung funktionier auch wunderbar aber bei jedem 2 Versuch erhalte ich die Fehlermldungen wie oben. Ansonsten funktioniert es auch einwandfrei :-(
Kann mir jemand sagen, an was das liegt?
Danke für eure Hilfe
Gruß
Morpheus
Antwort 5 von Seradest
Hi Morpheus,
versuch mal:
Workbook(Dateiname.xls).Sheets(...).activate
Der Dateiname kann auch wieder variabel beispielsweise in Form eines Textfeldes sein.
Grüße
Carsten
versuch mal:
Workbook(Dateiname.xls).Sheets(...).activate
Der Dateiname kann auch wieder variabel beispielsweise in Form eines Textfeldes sein.
Grüße
Carsten
Antwort 6 von Seradest
Hi,
ich nochmal.
kann auch sein dass es korrekt Workbooks(...)... heißen muss.
Grüße
ich nochmal.
kann auch sein dass es korrekt Workbooks(...)... heißen muss.
Grüße
Antwort 7 von morpheus__85
Hallo Carsten
hab mal folgendes ausprobiert....
Workbooks(txtName.Value).Sheets(txtTbellenname.Value).Activate
Dann schreibt er mir das die Typen unverträglich sind.
Vielen DAnke für deine schnelle Hilfe.
gruß
morpheus
hab mal folgendes ausprobiert....
Workbooks(txtName.Value).Sheets(txtTbellenname.Value).Activate
Dann schreibt er mir das die Typen unverträglich sind.
Vielen DAnke für deine schnelle Hilfe.
gruß
morpheus
Antwort 8 von Seradest
Mmh... Was steht in deiner TextBox? Im Zweifelsfall füge eine Überwachung zu den einzelnen Ausdrücken hinzu. Also:
txtName.Value
Workbooks(txtName.Value)
Workbooks(txtName.Value).Sheets(txtTbellenname.Value)
Falls du nicht weißt wie das geht einfach nochmal nachfragen.
Grüße
Carsten
txtName.Value
Workbooks(txtName.Value)
Workbooks(txtName.Value).Sheets(txtTbellenname.Value)
Falls du nicht weißt wie das geht einfach nochmal nachfragen.
Grüße
Carsten
Antwort 9 von morpheus__85
in txtName steht z.b. test.xls weil ich das ganze vorher an einer kleiner datei teste, bevor ich es auf die große umsetze.
in txtTabellenname steht z.B. Tabelle6
Kann es sein, dass man viell. den Speicher der Variable oder so löschen muss.
Bei deiner ersten Lösung von gestern ist es so.
Ich schreibe bei Tabellenname z.B. Tabelle6 rein.
Er öffnet Excel, geht ja normal zum 1 Tabellenblatt.
DA ich TAbelle6 angegeben hab, geht er zu Tabelle 6 und schließt wieder. Das passt ja.
Wenn ich jetzt Tabelle 6 in Tabelle 10 umändere und das Makro ein 2tes mal ausführe, dann öffnet er Excel und geht, aber weder zum 1(standard) noch zum 10(von mir angegeben) Tabellenblatt sondern er geht zum 6 wie beim letzten mal angegeben und macht dann nichts mehr.
Wenn ich dann zurück in den Editor gehe kommt die Fehlermeldung das die Methode Sheets für das Objekt Global fehlgeschlagen ist....
gruß
morpheus
in txtTabellenname steht z.B. Tabelle6
Kann es sein, dass man viell. den Speicher der Variable oder so löschen muss.
Bei deiner ersten Lösung von gestern ist es so.
Ich schreibe bei Tabellenname z.B. Tabelle6 rein.
Er öffnet Excel, geht ja normal zum 1 Tabellenblatt.
DA ich TAbelle6 angegeben hab, geht er zu Tabelle 6 und schließt wieder. Das passt ja.
Wenn ich jetzt Tabelle 6 in Tabelle 10 umändere und das Makro ein 2tes mal ausführe, dann öffnet er Excel und geht, aber weder zum 1(standard) noch zum 10(von mir angegeben) Tabellenblatt sondern er geht zum 6 wie beim letzten mal angegeben und macht dann nichts mehr.
Wenn ich dann zurück in den Editor gehe kommt die Fehlermeldung das die Methode Sheets für das Objekt Global fehlgeschlagen ist....
gruß
morpheus
Antwort 10 von Seradest
Normalerweise geht der Inhalt der Variablen sowieso spätestens verloren, sobald das Makro beendet ist.
Speicherst du die Datei beim schließen? Das aktive Tabellenblatt wird nämlich mitgespeichert. Wenn du die Datei dann öffnest, wird immer das Tabellenblatt angezeigt, das beim letzten Speichern aktiv war. Das würde erklären warum er das 6. Tabellenblatt öffnet. Hast du es mal mit einer direkten Angabe des Dateinamens versucht?
Also:
Workbooks("Test.xls")...
Grüße
Carsten
Speicherst du die Datei beim schließen? Das aktive Tabellenblatt wird nämlich mitgespeichert. Wenn du die Datei dann öffnest, wird immer das Tabellenblatt angezeigt, das beim letzten Speichern aktiv war. Das würde erklären warum er das 6. Tabellenblatt öffnet. Hast du es mal mit einer direkten Angabe des Dateinamens versucht?
Also:
Workbooks("Test.xls")...
Grüße
Carsten
Antwort 11 von morpheus__85
Hallo Carsten,
ja stimmt ich speichere es ab, dass erklärt die Sache dann.
Ja habs schon mal mit Namen und Tabelle eingeben direkt versucht bringt leider die selbe Fehlermeldung das Typen unverträglich sind.
Ich frage mich nur, wieso die ganzen Lösungen von euch, auch von dir alle sehr schön funktionieren aber eben bei jedem 2ten mal eine Fehlermeldung bringt
Deine Lösung mit dem
sheets(Textbox.value).activate
war genau das was ich gesucht habe so sollte es funktionieren jetzt müsste ich nur noch wissen wieso da immer dann bei jedem 2ten aufruf diese fehlermeldung kommt.
gruß
morpheus
ja stimmt ich speichere es ab, dass erklärt die Sache dann.
Ja habs schon mal mit Namen und Tabelle eingeben direkt versucht bringt leider die selbe Fehlermeldung das Typen unverträglich sind.
Ich frage mich nur, wieso die ganzen Lösungen von euch, auch von dir alle sehr schön funktionieren aber eben bei jedem 2ten mal eine Fehlermeldung bringt
Deine Lösung mit dem
sheets(Textbox.value).activate
war genau das was ich gesucht habe so sollte es funktionieren jetzt müsste ich nur noch wissen wieso da immer dann bei jedem 2ten aufruf diese fehlermeldung kommt.
gruß
morpheus
Antwort 12 von morpheus__85
also...
habs mal so gemacht
datenbank geöffnet,
formular geöffnet,
pfad, dateiname, tabelle eingegeben
button geklickt
funktioniert (wie immer beim ersten mal)
dann
datenbank komplett geschlossen
datenbank wieder geöffner
formular wieder geöffnet
pfad, dateiname, andere tabelle als test angegeben
button geklickt
funktioniert wieder, kein fehler.
das geht aber nur, wenn ich die datenbank komplett schließe.
wenn ich nur das formular scließe kommt bei jedem 2 versuch wieder der fehler.....
habs mal so gemacht
datenbank geöffnet,
formular geöffnet,
pfad, dateiname, tabelle eingegeben
button geklickt
funktioniert (wie immer beim ersten mal)
dann
datenbank komplett geschlossen
datenbank wieder geöffner
formular wieder geöffnet
pfad, dateiname, andere tabelle als test angegeben
button geklickt
funktioniert wieder, kein fehler.
das geht aber nur, wenn ich die datenbank komplett schließe.
wenn ich nur das formular scließe kommt bei jedem 2 versuch wieder der fehler.....
Antwort 13 von Seradest
Die Fehlermeldung dazu kommt weil das Objekt, das er da anspricht keine Worksheets kennt. Deshalb auch "Workbooks" davor, das präzisiert welches Objekt du meinst. Warum das nur bei jedem zweiten Anlauf kommt ist mir allerdings ein Rätsel. Und woher die unverträglichen Typen kommen weiß ich im Moment auch noch nicht.
Kannst du die beiden relevanten Files eventuell online stellen, dann kann ich mir das mal angucken?!
Grüße
Carsten
Kannst du die beiden relevanten Files eventuell online stellen, dann kann ich mir das mal angucken?!
Grüße
Carsten
Antwort 14 von morpheus__85
Dadurch, dass der Fehler nach dem schließen der Datenbank nicht mehr auftritt, kann ich das Problem auch anders lösen.
Ich hab nach dem Import sowieso einen Befehl eingebaut, der dann die Datenbank schließt und sie komprimiert um unnötige Speicherplatz belegung zu umgehen.... dann sollte das auch so funktionieren....
vielen danke für deinen Hilfe Carsten.
Gruß
morpheus
hier aber mal mein code viell. siehst du ja den entscheidenden Fehler....
natürlich kommt nachdem excel geöffnet wurde und das richtige excelarbeitsblatt gewählt wurde noch mehr rein, aber das ist jetzt nicht so wichtig weil die sachen funktionieren alle soweit einwandfrei.
With oXcl
.Workbooks.Open Filename:=txtPfad.Value & txtName.Value
.Visible = True
With Selection
Sheets(txtTabellenname.Value).Activate
End With
.ActiveWorkbook.Save
.Quit
End With
Ich hab nach dem Import sowieso einen Befehl eingebaut, der dann die Datenbank schließt und sie komprimiert um unnötige Speicherplatz belegung zu umgehen.... dann sollte das auch so funktionieren....
vielen danke für deinen Hilfe Carsten.
Gruß
morpheus
hier aber mal mein code viell. siehst du ja den entscheidenden Fehler....
natürlich kommt nachdem excel geöffnet wurde und das richtige excelarbeitsblatt gewählt wurde noch mehr rein, aber das ist jetzt nicht so wichtig weil die sachen funktionieren alle soweit einwandfrei.
With oXcl
.Workbooks.Open Filename:=txtPfad.Value & txtName.Value
.Visible = True
With Selection
Sheets(txtTabellenname.Value).Activate
End With
.ActiveWorkbook.Save
.Quit
End With
Antwort 15 von Seradest
With Selection
Sheets(txtTabellenname.Value).Activate
End With
da fehlt ein Punkt vor dem Sheets. Das könnte dein Global Object Fehler bereits lösen.
Grüße
Carsten
Sheets(txtTabellenname.Value).Activate
End With
da fehlt ein Punkt vor dem Sheets. Das könnte dein Global Object Fehler bereits lösen.
Grüße
Carsten
Antwort 16 von morpheus__85
Hallo Carsten...
also ich habs mal mit .Sheets probiert.
Er schreibt.
Laufzeitfehler '438'
Objekt unterstüzt diese Eigentschaft oder Methode nicht.
Ich lass es ohne den Punkt.
Funktioniert jetzt einwandfrei.
Dadurch, dass meine Datenbank nach jedem Import sowieso geschlossen wird, ist die Sache dann kein so großes Problem mehr, denn nach nem neustart der Datenbank tritt der Fehler nicht auf.
Vielen Dank für deine Hilfe Carsten. Hast mir echt geholfen.
Gruß
Morpheus
also ich habs mal mit .Sheets probiert.
Er schreibt.
Laufzeitfehler '438'
Objekt unterstüzt diese Eigentschaft oder Methode nicht.
Ich lass es ohne den Punkt.
Funktioniert jetzt einwandfrei.
Dadurch, dass meine Datenbank nach jedem Import sowieso geschlossen wird, ist die Sache dann kein so großes Problem mehr, denn nach nem neustart der Datenbank tritt der Fehler nicht auf.
Vielen Dank für deine Hilfe Carsten. Hast mir echt geholfen.
Gruß
Morpheus
Antwort 17 von Seradest
Dann kannste das With Selection auch raus lassen, oder? stattdessen ActiveWorkbook benutzen, das sollte auch gehen. Oder du lässt es einfach bei Sheets.
Ich wünschte ich hätte besser helfen können ;)
Grüße
Carsten
Ich wünschte ich hätte besser helfen können ;)
Grüße
Carsten
Antwort 18 von morpheus__85
Hallo Carsten,
du hast mir schon genug geholfen keine Sorge.
Vielen Dank das du so geduldig mit mir warst und mir immer so schnell geantwortet hast.
Gruß
morpheus
du hast mir schon genug geholfen keine Sorge.
Vielen Dank das du so geduldig mit mir warst und mir immer so schnell geantwortet hast.
Gruß
morpheus