Supportnet Computer
Planet of Tech

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

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

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

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

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

Antwort 6 von Seradest

Hi,
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

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

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

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

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

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.....

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

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


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

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

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: