letzte Spalte im Bereich

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 2000
nach unten

Betrifft: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 08.05.2002 - 17:47:24

liebes Forum,
noch 'ne Frage:
Ich markiere im Bereich A17:D52 händisch eingetragene Werte um diese zu löschen. Der Bereich ist in der Zeilenzahl variabel von A1:D1; A1;D2;... bis eben A1:D52.
Ich möchte nun nach dem Löschen des markierten Inhalts per "Entf", in Spalte G springen und dort soll genau im Bereich der vorher markierten Zeilenzahl etwas passieren.(Anderes, bereits vorhandenes, Makro schreibt in jede markierte Zelle eine 1).
Das ganze passiert in Worksheet_Change.
Meine Versuche über "letzte Spalte" weiterzukommen gingen in die Hose.
Wilhelm
nach oben   nach unten

Re: letzte Spalte im Bereich
von: Jürgen
Geschrieben am: 09.05.2002 - 13:47:58

Hallo Wilhelm,

das mit der "markierten Zeilenzahl" habe ich nicht so ganz verstanden, deshalb folgende Idee (hab's nicht getestet):

Dim LetzteZeile as Integer
Dim LetzteSpalte as Integer

LetzteZeile = ActiveSheet.CurrentRegion.Rows.Count
LetzteSpalte = ActiveSheet.CurrentRegion.Columns.Count

Cells(LetzteZeile, LetzteSpalte).Offset(0, 2).Select
With Selection
Dein_Ereignis
End With

Dieses Beispiel geht davon aus, daß Du die letzte Zelle im Bereich gemeint hast.

Meinst Du jedoch jede Zelle in der letzten Spalte, die gelöscht werden soll, kannst du folgendes versuchen:
Du hast geschrieben, daß ein markierter Bereich gelöscht wird; demnach gibt es ein Selection-Objekt:

Dim Zeilen as Integer
Dim Spalte as Integer
Dim i as Integer

Zeilen = Selection.Rows.Count
Spalte = Selection.Columns.Count

For i = 1 (anpassen!) To Zeilen
Cells(i, Spalte.Offset(0, 2).Value = Dein_Ereignis 'anpassen
Next i

Versuch's mal. Viel Glück

Jürgen

nach oben   nach unten

Re: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 09.05.2002 - 15:44:39

Hallo Jürgen,
habe deinen 1. Vorschlag wie folgt angepasst:
Sub Letzte_SpalteI()
Dim LetzteZeile As Integer
Dim LetzteSpalte As Integer
LetzteZeile = ActiveSheet.CurrentRegion.Rows.Count
LetzteSpalte = ActiveSheet.CurrentRegion.Columns.Count
Cells(LetzteZeile, LetzteSpalte).Offset(0, 2).Select
With Selection
MsgBox "läuft"
End With
End Sub
Makro bleibt bei "Letzte Zeile =...." hängen mit der Meldung:
"Laufzeitfehler 438, Objekt unterstützt diese Eigenschaft oder Methode nicht".
Pssiert aber auch bei meinen zunehmend verzweifelten Versuchen mit den gängigen Formeln aus dem Forum die letzte Spalte zu finden.
es ist zum ...
Nochmal zum verstehen:
Ich markiere händisch den z.B. Bereich A3:D7, also Zeile 3-7 im Bereich A-D, lösche den Inhalt per "Entf" hierauf sollten in Spalte G die gleichen Zeilen 3-7 markiert werden.
Dieser markierte Bereich ist variabel von Zeile 17 bis 52.
Also kleinsmöglicher Bereich A1:D1, markieren, löschen, in G wird G1 markiert.
Grösstmöglicher Bereich A52:D52, markieren löschen, in G wird G1:G52 markiert
Kannst du etwas damit anfangen?
Wilhelm
nach oben   nach unten

Re: letzte Spalte im Bereich
von: WernerB.
Geschrieben am: 09.05.2002 - 15:57:48

Hallo Wilhelm,

wie wär's damit:


Option Explicit
Sub SpalteG()
Dim Bereich As String, lo As String, ru As String
Dim zo As Long, zu As Long
    Bereich = Selection.Address(False, False)
    lo = Left(Bereich, InStr(Bereich, ":") - 1)             'links oben
    ru = Right(Bereich, Len(Bereich) - InStr(Bereich, ":")) 'rechts unten
    zo = Range(lo).Row                                      'Zeile oben
    zu = Range(ru).Row                                      'Zeile unten
    Range("G" & zo & ":G" & zu).Select
End Sub

Viel Erfolg wünscht
WernerB.
nach oben   nach unten

Re: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 09.05.2002 - 16:08:42

Hallo Werner,
genau das war der Punkt, läuft und funktioniert.
(für mich aber nicht nachvollziehbar)
Vielen Dank, ich war echt am Verzweifeln.
Gehöre ab jetzt zu deinen Fans.
Grüsse
Wilhelm

nach oben   nach unten

Re: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 09.05.2002 - 17:53:11

Hallo Werner,
da ist doch jetzt ein Problem aufgetaucht:
ich starte das Makro über die entf. taste:
Private Sub Worksheet_Change(ByVal Target As Range)
''Makro startet wenn in A17:D52 gelöscht wird
Dim Bereich As Range
Set Bereich = Range("A17:D52")
''Schliesst Start in anderem Bereich aus
If Intersect(Target, Bereich) Is Nothing Then Exit Sub
With Cells(Target.Row, Target.Column)
''Wenn Zelle leer
If .Value = "" Then
Call SpalteG
Application.CutCopyMode = False
End If
End With
End Sub
Jetzt kommt deine Geschichte für die Spalte G
Sub SpalteG()
''Übernimmt die Markierung aus A-D nach dem Löschen in G und trägt die Ziffer 1 ein
Dim Bereich As String, lo As String, ru As String
Dim zo As Long, zu As Long
Bereich = Selection.Address(False, False)
lo = Left(Bereich, InStr(Bereich, ":") - 1) 'links oben
ru = Right(Bereich, Len(Bereich) - InStr(Bereich, ":")) 'rechts unten
zo = Range(lo).Row 'Zeile oben
zu = Range(ru).Row 'Zeile unten
Range("G" & zo & ":G" & zu) = 1
End Sub
Ich füge durch die kleine Änderung beim leeren der Felder in A-D
eine 1 in G ein.
Jetzt passiert aber folgendes Verhängnis:
Beim Start der Arbeitsmappe fügt mir dein Makro in die Zelle die gerade aktiv ist, eine Formel ein, die eigentlich woanders hin gehört.
Es erfolgt eine Meldung: "Laufzeitfehler 5, ungültige Prozeduraufruf oder ungültiges Argument.
Die Formel gilt eigentlich für die Spalte N und soll diese falls überschrieben beim Start zurückschreiben.
Zur Info:
Sub Fall1()
''Schreibt die Formel in Spalte U-Konstr. Typ 1 oder 2 nach dem Überschreiben zurück
Dim AZelle As Range
For Each AZelle In Range("N16:N52")
ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[-12]),IF(RC[-12]=170,1,0),"""")"
Next AZelle
End Sub
Verstehst du das?
Wilhelm
nach oben   nach unten

Re: letzte Spalte im Bereich
von: WernerB.
Geschrieben am: 09.05.2002 - 20:19:42

Hallo Wilhelm,

die Behauptung, mein Makro würde irgenwo eine Formel hineinschreiben, die da nicht hinein gehört, stösst bei mir auf völliges Unverständnis.

Mein Makro in seiner ursprünglichen Fassung schreibt oder kopiert nirgendwo etwas hinein.

Es führt lediglich folgende Schritte aus:
1. Es wird die Adresse des gerade selektierten Zellbereichs auf dem gerade aktiven Blatt ermittelt.
2. Es werden aus dieser Zellbereichsadresse die Nummern der ersten und der letzten Zeile ermittelt.
3. Es wird in Spalte G ein Zellbereich unter Verwendung in (2.) ermittelten Zeilennummern selektiert.

Jeder, der etwas VBA-Erfahrung hat, wird dies bei Betrachtung meines Makros so nachvollziehen können und ebenfalls die Feststellung treffen müssen, dass dieses Makro an keiner einzigen Stelle irgendwo etwas hinein schreibt oder hinein kopiert (auch nicht temporär).

Soweit ich feststellen konnte, wird Durch Deine Modifikation meines Makros in jede Zelle des in (3.) ermittelten Zellbereichs in der Spalte G eine "1" eingetragen.

Der von Dir beschriebene Formeleintrag muss nach meiner Einschätzung eine andere Ursache haben.
Ein direkter Zusammenhang mit meinem Makro ist für mich hier absolut nicht erkennbar.

MfG
WernerB.

nach oben   nach unten

Re: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 09.05.2002 - 21:02:33

Hallo Werner,
nun sei nicht gleich beleidgt, natürlich schreibt dein Makro nichts dahin wo es nicht hingehört. Meine Frage war eigentlich:
Kannst du dir erklären wie es zu dieser Schreiberei kommt und es dann in deinem Makro hängenbleibt?
Frage könnte es sein, daß mein erstes Makro gestartet wird, weil beim Öffnen eine leere Zelle gefunden wird?
If Value = ""
Werde versuchen das irgendwie auszuschliessen.
Gruß Wilhelm
nach oben   nach unten

Re: letzte Spalte im Bereich
von: WernerB.
Geschrieben am: 09.05.2002 - 21:37:12

Hallo Wilhelm,

beleidigt bin ich nicht, aber es sollte mir doch gestattet sein, dass ich mich zur Wehr setze, wenn ich von Dir im Forum mit diesem unhaltbaren Vorwurf konfrontiert werde: "Beim Start der Arbeitsmappe fügt mir dein Makro in die Zelle die gerade aktiv ist, eine Formel ein, die eigentlich woanders hin gehört."

Bei Deinem Problem kann ich Dir leider nicht weiterhelfen. Wenn ich Dich richtig verstehe, bleibt "mein" Makro nach dem Öffnen der Arbeitsmappe irgendwo hängen und eine Formel steht irgendwo, wo sie nicht hingehört.
Da "mein" Makro nicht von alleine losläuft, sondern von einem ereignisgesteuerten Makro aus gestartet wird, würde ich mir dieses Makro mal näher ansehen bzw. untersuchen, warum dieses beim Öffnen der Mappe startet (oder ist das gewollt?).

Ich bitte um Verständnis, wenn ich aus der Ferne und ohne umfassende Kenntnis der näheren Umstände hierzu keine weiteren Aussagen treffen kann und will.

MfG
WernerB.

nach oben   nach unten

Re: letzte Spalte im Bereich
von: Wilhelm R.
Geschrieben am: 09.05.2002 - 22:25:33

Lieber Werner,
natürlich ist es dir gestattet dich zur Wehr zu setzten, aber niemand hat dich angegriffen oder gar an deiner Kompetenz gezweifelt. Gestatte doch einfach mal einem kaum beleckten VBA Laien verblüfft und ratlos zu sein, wenn da plötzlich etwas passiert, was auf den ersten BLick, eigentlich garnicht passieren kann.
Natürlich wird dein Makro erst durch ein Makro von mir aufgerufen. Inzwischen habe ich festgestellt das hier "mein" Makro das eine Formel in eine Spalte zurückschreiben soll "Amok" gelaufen war, weil es wohl falsch geschrieben war.
Ich habe das Teil inzwischen verändert und siehe da es läuft einwandfrei.
Nochmal: ich habe dich um Rat gefragt, keinen Angriff auf dich gestartet.
Wenn du willst kann ich dir die ganze fertige Excel Datei zur Info mal an eine mail anhängen. Ich bin jetzt nämlich endlich fertig und ohne deine 2malige Hilfe wäre das nichts geworden.
Gruß Wilhelm
nach oben   nach unten

Re: letzte Spalte im Bereich
von: WernerB.
Geschrieben am: 09.05.2002 - 23:22:50

Hallo Wilhelm,

wie ich Dir schon in meinem letzten Beitrag sagte: ich bin nicht beleidigt!

Wenn eines meiner Makros mal fehlerbehaftet sein sollte (bin auch nur ein Mensch), bin ich der Letzte, der dies nicht zugeben würde und um sofortige Besserung bemüht wäre.

Wenn aber behauptet wird, dass eines meiner Makros Dinge tut, die es gar nicht tun kann, werde ich solche Unterstellungen immer zurückweisen.

Die Sache ist für mich erledigt, wir beide sollten uns wieder erfreulicheren Dingen zuwenden; z.B. freut es mich auch, wenn Du Dein Problem zwischenzeitlich beheben konntest und Du somit auch Dein Erfolgserlebnis hast.

Was Dein Angebot betrifft, mir die Datei zu mailen: Ich möchte dies grundsätzlich nicht haben; wobei Du dies bitte nicht persönlich nehmen solltest. Außerdem: wenn alles so läuft, wie es soll, fehlt auch ein bisschen der Grund dazu.

Sollte ich mal wieder eine Anfrage von Dir im Forum entdecken und Unterstützung leisten können, dann erhältst Du selbstverständlich auch zukünftig eine Antwort von mir.

MfG
WernerB.

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "letzte Spalte im Bereich"