Hallo,
ich habe kein richtiges Problem könnte nur etwas „Kosmetik“ für mein Tabellenblatt brauchen.
Mein Tabellenblatt hat ca. 1000 Zeilen und 50 Spalten.
Die „Schieberegler“ an der rechten und unteren Seite sind jedoch so schmal, dass ich bis 36469 Zeilen und bis zur Spalte „COI“ aufschieben kann.
Was kann ich tun um mich nur in meiner Tabelle zu bewegen?
Danke im Voraus.
Bernd
Hallo Bernd,
anscheinend werden viele Zellen des Blattes als „benutzt“ angesehen.
Mit STRG-Ende kommst Du an die rechte untere Ecke dieses Bereiches.
Um das Blatt wieder handlich zu bekommen, kannst Du die wirklich benötigten Elemente in ein neues Blatt kopieren, dann das alte Blatt löschen und das Neue mit dem alten Namen versehen.
Klappt´s?
Freundliche Grüße
Thomas
ich habe kein richtiges Problem könnte nur etwas „Kosmetik“
für mein Tabellenblatt brauchen.
Mein Tabellenblatt hat ca. 1000 Zeilen und 50 Spalten.
Die „Schieberegler“ an der rechten und unteren Seite sind
jedoch so schmal, dass ich bis 36469 Zeilen und bis zur Spalte
„COI“ aufschieben kann.
Was kann ich tun um mich nur in meiner Tabelle zu bewegen?
Hallo Bernd,
ich sehe es erstmal genau wie der wieder aufgetauchte Thomas
Was Thomas vorschlägt kannste ja immer noch machen. Probiere aber vorher folgendes: Wenn du dir sehr sicher bist daß du außerhalb von A1:COI36469 keine Daten hast oder brauchst so markiere A36470:XFD1048576, Rechtsklick und Zellen löschen.
Dann das gleiche für COJ1:XFD1048576. Nun speicherst du die Kopie (so Dinge macht man immer erstmal an einer Kopie). Dann öffne sie und schau ob es geklappt hat.
Wenn nicht, Plan B bzw. hier Plan T(homas)
Gruß
Reinhard
Hallo Reinhard,
es ist ein Tabellenblatt aus meinem „Dienstplan“ wo ich immer noch daran sitze und du mir schon einiges geholfen hast. Die Datei umfasst derzeit über 200 Arbeitsblätter und die Seite um die es geht ist auch voll mit Formeln, Hypel. und Makros. Ich habe es angefangen zu kopieren aber da werd ich ja nicht fertig. Alle Hyperl. und Makros wieder in Gang zu bekommen, dafür ist mir die Zeit zu schade.
Das mit den Zellen löschen hatte ich schon probiert. Klappt leider nicht. Somit werde ich damit auskommen müssen.
Auf alle Fälle Danke für die Tipps.
Bernd
Hallo Thomas,
es ist ein Tabellenblatt aus meinem „Dienstplan“ wo ich schon seit geraumer Zeit daran sitze. Die Datei umfasst derzeit über 200 Arbeitsblätter und die Seite um die es geht ist auch voll mit Formeln, Hypel. und Makros. Ich habe es angefangen zu kopieren aber da werd ich ja nicht fertig. Alle Hyperl. und Makros wieder in Gang zu bekommen, dafür ist mir die Zeit zu schade.
Auf alle Fälle Danke für den Tipp.
Bernd
leer oder nicht leer?
Hallo Reinhard,
die von Dir vorgeschlagene Vorgehensweise kenne ich auch, war mir aber zu kompliziert, die zu erklären
Erfahrungsgemäß muss man auch ein paar Zeilen / Spalten mehr löschen als bis zu der, die per STRG-Ende angesprungen wird - wie Du auch richtigerweise beschrieben hattest. Dann wirklich > und nicht nur die Inhalte per „Entf-“ oder backspace-Taste beseitigen - aber das hat ja Bernd wohl so Alles richtig versucht. Schade, dass es nicht geklappt hat. Aber schön, dass er eine Rückmeldung gegeben hat
So ganz kann ich jedoch die Schwierigkeiten nicht nachvollziehen - anscheinend ist der große Bereich rechts und unten dann doch nicht leer …
Die Hyperlinks wären beim Kopieren normalerweise auch mit in das neue Blatt übertragen worden.
Eine komplett andere Lösung fällt mir da so auch nicht ein bei der etwas unklaren Aufgabenstellung. Hast Du noch Ideen oder Thomas Ramel?
Freundliche Wünsche für das Wochenende
Thomas
P. S.: So ganz untergetaucht war ich ja nicht. Ich lese in Abständen mit und schreibe auch mal einen Vierzeiler
Das mit den Zellen löschen hatte ich schon probiert. Klappt
leider nicht. Somit werde ich damit auskommen müssen.
Hallo Bernd,
sorry, hab da Blödsinn geschrieben, natürlich alle Zeilen unterhalb Zeile 1000 und
alle Spalten rechts von AX auf die beschriebene Art „entfernen“.
Hast du es so gemacht?
Plan B hätte ich noch, Entwicklertools—Eigenschaften. In dem Eigenschaftsfenster der Tabelle trägst du bei Scrollarea A1:AX1000 ein.
Probiere aus ob du das willst. Es gibt da Änderungen, Strg+Pfeiltaste funkioniert nicht mehr wie gewohnt und einiges mehr .
Ich hab mir zum Testen in Zelle XFD10xxxxx etwas reingeschrieben.
Dann habe ich die scrollarea festgelegt.
Du könntest vor dem Festlegen A1001:XFD10xxxxx ausblenden, dann AY1:A1001:XFD10xxxxx. Teste dann wenn du danach Scrollarea festgelget hast
und berichte.
Vba kann man noch einiges basteln, z.B. eigene Scrollleisten. Aber ist aufwendig damit die Gesamtfunktionalität von den vorh. Scrolleisten und auch Tastenkombis wie
Strg+Shift+Pfeiltaste usw. exakt nachzubilden.
Naja, vllt. hat ja die Schweiz weitere Ideen für diese Problematik )
Gruß
Reinhard
OT Daten eines maroden Tabellenblattes retten
Hallo Thomas,
Erfahrungsgemäß muss man auch ein paar Zeilen / Spalten mehr
löschen als bis zu der, die per STRG-Ende angesprungen wird
ja, es können ja so „Spezialzellen“ auch unterhalb von Strg+eEnde existieren.
Aber schön, dass er eine Rückmeldung gegeben hat
Jepp, ist leider in keinster Weise Allgemeinverhalten ((
Eine komplett andere Lösung fällt mir da so auch nicht ein bei
der etwas unklaren Aufgabenstellung. Hast Du noch Ideen oder
Ideen schon, habe ja zwischenzeitlich hier an Bernd geschrieben.
Als Löung bei maroden Blättern kenne ich auch nur das manuelle Kopieren
des wirklich vom User benutzten Zellbereichs.
Dann fehlt im neuen Blatt aber einiges. Das muß man dann ebenfalls rüberholen bzw. neu bauen und einfügen.
Vor langer Zeit habe ich mich daran mit Vba versucht. Da kamen Schwierigkeiten über Schwierigkeiten. Wenn ich den Code finde, so ist der immer noch Baustelle, manches klappt, manches nicht.
So ein Universalcode wäre schon schick, dann so marode Blätter treten halt gerade
in großen oft und lange benutzten Mappen gar nicht selten auf.
Gruß
Reinhard
TabellenBlatt beschnippeln
Hallo Reinhard,
dass Du die zu löschenden Zellen falsch eingegrenzt hast, habe ich überhaupt nicht bemerkt ( ich stehe bekanntlich mit der A1-Schreibweise auf Kriegsfuß ).
Zu Deiner 1. Idee hatte ich sogar schon ´mal ein paar Zeilen programmiert, um so eine „Beschneidung“ schnell durchführen zu können. Das sollte man aber ganz gewiss nur an einer gesicherten Datei ausprobieren. Hier mit Deinem Speed-Tool vorweg:
Option Explicit
Dim AR As Long: Dim AC As Long 'activecell.row + .column
Dim LR As Long: Dim LC As Long ‚ActiveCell.SpecialCells(xlLastCell).Row+ .column
Dim R1 As Integer: Dim C1 As Integer ‚1.DatenZeile und -Spalte
Dim R0 As Integer: Dim i As Long ’ R0=Zeile mit AusBlendMarkierungen‘
Dim C0 As Integer: ’ C0=Zeile mit AusBlendMarkierungen‘
Dim Modus As Boolean
Dim bolSperre As Variant
Public Static Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Dim intCalculation As Integer, bolSperre As Boolean
If Modus = True Then
intCalculation = Application.Calculation
bolSperre = ActiveSheet.ProtectContents
ActiveSheet.Unprotect
Else
If bolSperre = True Then ActiveSheet.Protect
End If
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.Calculation = IIf(Modus = True, xlManual, intCalculation)
.Cursor = IIf(Modus = True, xlWait, xlDefault)
End With
End Sub
Sub Zeilen_und_Spalten_löschen_ab_aktiveZelle()
'Call Blatt_freigeben
’ VORSICHT: Alle Zeilen unter der aktiven Zelle sowie alle
’ Spalten rechts von ihr werden gelöscht.
’ Somit kann dann wieder mit Strg-Ende die letzte relevante Zelle angesprungen werden.
Call GetMoreSpeed(True)
LR = ActiveCell.SpecialCells(xlLastCell).Row
LC = ActiveCell.SpecialCells(xlLastCell).Column
AR = ActiveCell.Row
AC = ActiveCell.Column
If LC > 251 Then LC = 251
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Range(Rows(AR), Rows(LR + 5)).Delete Shift:=xlUp
Range(Columns(AC), Columns(LC + 5)).Delete Shift:=xlToLeft
Cells(AR, AC).Select
Call GetMoreSpeed(False)
End Sub
Freundliche Grüße aus Oldenburg
Thomas
Hallo Thomas,
dass Du die zu löschenden Zellen falsch eingegrenzt hast, habe
ich überhaupt nicht bemerkt
Na, ich wohl auch nicht als ich es schrieb Aber derzeit ist das meine große Hoffnung daß Bernd es auch nicht merkte. Denn oftmals, bei manchen verkorksten Mappen leider nicht immer, ist es die beste Lösung wenn es funktioniert.
Zu Deiner 1. Idee hatte ich sogar schon ´mal ein paar Zeilen
programmiert, um so eine „Beschneidung“ schnell durchführen zu
können. Hier mit Deinem Speed-Tool vorweg:
Das Speed=Zeit Problem wird echt ein Problem *erinner*
LR = ActiveCell.SpecialCells(xlLastCell).Row
LC = ActiveCell.SpecialCells(xlLastCell).Column
Da fängt das Speed-Problem an. SpecialCells(xlLastCell) kannste grad vergessen genausowie Cells(rows.count, activecell.column) o.ä.
Die arbeiten nicht zuverlässig. Genauer gesagt steht ActiveCell in der Zeile, Spalte wo da eine, ich nenne sie mal Problemzelle, steht so ist das die letzte Zeile/Spalte.
Dann geschieht das, du bist in der „falschen“ Zelle und führst ActiveCell.SpecialCells(xlLastCell).Row aus so wird dir dafür 456000 angezeigt OBWOHL du genau siehst daß der benutzte Bereich nur 1000 Zeilen hat.
Und dann gehst du in diese Problemzelle und versuchst zu ergründen: warum? Und, du findest nix, gar nix. Keinen Zellinhalt, keine Formatierung, usw.
Ich sagte nicht ohne Grund Probleme über Probleme.
Ich könnte noch Stunden schreiben was da auf dich zukommt wenn du es kodieren willst.
Bedenke, es soll ja wohl ein unvisereller Code sein, (naja ich habe hohen Anspruch *gg*
und da mußt du mit allem rechnen, mit wirklich ALLEM : Die Vorstellung pro Blatt ist nur eine Tabelle, brav in Zeile 1 die Titel und in Spalte 1 kann man brav die Zeilenanzahl ermitteln kannste dir abschminken.
Jetzt komme ich zurück auf das Speedproblem, z.B. in XL 2007 alle Zellen abzuklappern
und auf Inhalt prüfen das dauert…
Ja, und dann mußte das auch noch auswerten per Code.
Gibt gute Gründe dafür aber ich fasse mich ja bekannterweise immer sehr kurz und liste die nicht alle auf *lächel*
If LC > 251 Then LC = 251
Magst du mir bitte diese 251 erklären?
Achja, etwas sehr wichtiges. Meine Codeansätze zielten alle darauf ab daß der Code automatisch erkennt was denn der eigentlich richtige Usedrange ist. Wenn man in den eine Anfrage einbaut, wo der User den seiner Meinung nach richtigen Tabellenbereich sieht, also Bernd würde da A1:AX1000 eingeben, dann wird das viel einfacher.
Bleiben aber noch genug Aufgaben übrig. Farben, Rahmen, Steuerelemente, dies das muß aauch noch rübergeschaufelt werden sodaß dann im Zielpunkt A1:AX1000 in nix bei dem Problemblatt und den neuen Blatt unterscheiden.
Gruß
Reinhard
Hallo Reinhard,
Du hast völlig recht, davon hatte ich schon ´mal gelesen, dass die Befehle nicht immer richtig ausgeführt werden. Ich meine aber, dass es auch schon funktioniert hat ( sonst hätte ich das Makro wohl nicht in meine Sammlung aufgenommen
Gibt es in vba einen alternativen Ausdruck für die letzte Zeile / Spalte?
Da fängt das Speed-Problem an. SpecialCells(xlLastCell)
kannste grad vergessen genausowie Cells(rows.count,
activecell.column) o.ä.
Die arbeiten nicht zuverlässig. Genauer gesagt steht
ActiveCell in der Zeile, Spalte wo da eine, ich nenne sie mal
Problemzelle, steht so ist das die letzte Zeile/Spalte.
Verstehe ich gerade nicht. Man muss bei meinem Makro händisch den Cursor auf die rechte untere Ecke des erhaltenswürdigen Bereichs setzen bevor man es startet.
LR bzw. LC sind nur die untere bzw. rechte Grenze des zu löschenden Bereiches.
Dann geschieht das, du bist in der „falschen“ Zelle und führst
ActiveCell.SpecialCells(xlLastCell).Row aus so wird dir dafür
456000 angezeigt OBWOHL du genau siehst daß der benutzte
Bereich nur 1000 Zeilen hat.
Dann würde ich den Cursor in Zeile 1001 setzen
Und dann gehst du in diese Problemzelle und versuchst zu
ergründen: warum? Und, du findest nix, gar nix. Keinen
Zellinhalt, keine Formatierung, usw.
Ich sagte nicht ohne Grund Probleme über Probleme.
Ich könnte noch Stunden schreiben was da auf dich zukommt wenn
du es kodieren willst.Bedenke, es soll ja wohl ein unvisereller Code sein, (naja ich
habe hohen Anspruch *gg*
Ich freue mich schon, wenn es manchmal klappt
…
If LC > 251 Then LC = 251Magst du mir bitte diese 251 erklären?
Ich versuch´s ´mal.
Das hatte ich bei Excel 2003 so benutzt, weil es sonst Fehler gab mit Spalten löschen rechts von 256 und LC wird bei mir ja noch um 5 erhöht.
Achja, etwas sehr wichtiges. Meine Codeansätze zielten alle
darauf ab daß der Code automatisch erkennt was denn der
eigentlich richtige Usedrange ist. Wenn man in den eine
Anfrage einbaut, wo der User den seiner Meinung nach richtigen
Tabellenbereich sieht, also Bernd würde da A1:AX1000 eingeben,
dann wird das viel einfacher.
Genau das mache ich. Nicht per Tastatur, sondern per Maus oder Pfeiltasten.
Bleiben aber noch genug Aufgaben übrig. Farben, Rahmen,
Steuerelemente, dies das muß aauch noch rübergeschaufelt
werden sodaß dann im Zielpunkt A1:AX1000 in nix bei dem
Problemblatt und den neuen Blatt unterscheiden.
Jetzt bis Du gedanklich wieder bei Deinem Super-Mammut-Vorhaben
Da würde ich mich NIE ´rantrauen
Das Makro soll kein neues Blatt erzeugen, nur abschnippeln, was nutzlos mitgeschleppt wurde.
Man muss händisch den Cursor auf die rechte untere Ecke des erhaltenswürdigen Bereichs setzen bevor man das Makro startet.
Sub Zeilen_und_Spalten_löschen_ab_aktiveZelle()
’ VORSICHT: Alle Zeilen unter der aktiven Zelle sowie alle
’ Spalten rechts von ihr werden gelöscht.
’ Somit kann dann wieder mit Strg-Ende die letzte relevante Zelle angesprungen werden.
LR = ActiveCell.SpecialCells(xlLastCell).Row ’ besser: ?
LC = ActiveCell.SpecialCells(xlLastCell).Column ’ besser: ?
AR = ActiveCell.Row 'die aktive Zeile
AC = ActiveCell.Column 'die aktive Spalte
If LC > 251 Then LC = 251 'nur bei Excel 2003 wenn alle Spalten benutzt sind
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Range(Rows(AR), Rows(LR + 5)).Delete Shift:=xlUp
Range(Columns(AC), Columns(LC + 5)).Delete Shift:=xlToLeft
Cells(AR, AC).Select
End Sub
Schönes WE schon ´mal
Thomas
Hallo Thomas,
Du hast völlig recht, davon hatte ich schon ´mal gelesen, dass
die Befehle nicht immer richtig ausgeführt werden. Ich meine
aber, dass es auch schon funktioniert hat ( sonst hätte ich
das Makro wohl nicht in meine Sammlung aufgenommen
ist vollkommen korrekt. Wichtig finde ich aber auch bei jedem Code den ich schreibe
zu wissen warum er manchmal nicht korrekt ist.
Und ich habe ja nicht ohne Grund erwähnt daß du bei Fremdmappen mit allem rechnen mußt. Ggfs, auch bei einer eigenen.
Das ist insofern nicht ganz so schlimm, wenn man das weiß überprüft man halt das Ergebnis des Codes und plant ggfs. weitere Schritte oder ist zufrieden das es klappt.
Gibt es in vba einen alternativen Ausdruck für die letzte
Zeile / Spalte?
Würde ich den wissen hätte ich es gesagt.
Da fängt das Speed-Problem an. SpecialCells(xlLastCell)
kannste grad vergessen genausowie Cells(rows.count,
activecell.column) o.ä.
Die arbeiten nicht zuverlässig. Genauer gesagt steht
ActiveCell in der Zeile, Spalte wo da eine, ich nenne sie mal
Problemzelle, steht so ist das die letzte Zeile/Spalte.Verstehe ich gerade nicht. Man muss bei meinem Makro händisch
den Cursor auf die rechte untere Ecke des erhaltenswürdigen
Bereichs setzen bevor man es startet.
Okay, das haste aber verschwiegen Also doch kein vollautomatischer Code.
Und es hat schon Gründe warum ich daran gescheitert bin daß er immer zu 100% in allen Bättern funktioniert. Mein erwähnter Baustellencode schafft das nur zu k.A. 50-80%.
If LC > 251 Then LC = 251
Magst du mir bitte diese 251 erklären?
Ich versuch´s ´mal.
Das hatte ich bei Excel 2003 so benutzt, weil es sonst Fehler
gab mit Spalten löschen rechts von 256 und LC wird bei mir ja
noch um 5 erhöht.
Aha, okay.
Wenn man in den eine
Anfrage einbaut, wo der User den seiner Meinung nach richtigen
Tabellenbereich sieht, also Bernd würde da A1:AX1000 eingeben,
dann wird das viel einfacher.Genau das mache ich.
Okay, ich habe das damals als ich da Zeit investierte nicht gemacht. Ja, das erspart vieles.
Jetzt bis Du gedanklich wieder bei Deinem
Super-Mammut-Vorhaben
Da würde ich mich NIE ´rantrauen
Kwark, probiere es mal selbst. Spielt keine Rolle ob es scheitert. Es geht darum daß du im Zuge dessen lernst. Was meinst du warum ich mich in sowas stürze, klar ich will lernen und in Excel/Vba-Übung bleiben.
Man muss händisch den Cursor auf die rechte untere Ecke des
erhaltenswürdigen Bereichs setzen bevor man das Makro startet.
Klar, Pech wenn das die Zelle ist die mit der Problemzelle sich die gleiche Zeile/Spalte teilt.
Schönes WE schon ´mal
Dir auch
Gruß
Reinhard