Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
584to588
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
584to588
584to588
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bereich markieren per Makro

Bereich markieren per Makro
16.03.2005 10:43:32
Mathias
Hallo ich gerstern schonmal geschrieben.
Aber leider keine passende Antwort bekommen, dehalb stelle die Frage nochmal ein.
Ich habe 3 tabellenblätter.
Nun möchte ich folgendes erreichen, in TB2 soll eine Range in Spalte A und eine in Spalte F markiert werden.
Startzelle ist A27 und F27, die letzen Zelleeinträge jeder Spalte ändern sich unabhängig von einander. z.B. kann A1444 als letzte Zelle einen Eintrag enthalten, kann aber auch A5000 sein.
und diese Range soll nun markiert werden, die den letzten Eintrag enthält.
Das selbe gilt für TB3 hier befinden sich die Range in Spalte C und N.
Vielen Dank für eure Hilfe
Mathias

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich markieren per Makro
16.03.2005 11:03:22
Chris
Hi Mathias,
was soll nach dem Markieren passieren? Kann man das nicht nacheinander abarbeiten, oder muss alles gleichzeitig markiert werden?
Chris
AW: Bereich markieren per Makro
16.03.2005 11:18:33
Mathias
das passiert alles Nacheinander, das Hochkomma soll entfernt werden, in etwas so

Private Sub Msg1()
On Error GoTo errorhandler
Sheets("TB2").Select
Range("A28:A4000").Select
Call hk1_weg
Call Hochkomma_weg
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch!!" & vbLf & "Bitte Query überprüfen!!!"
Else
MsgBox ("Der Vorgang wurde erfogreich beendet." )
end if
End Sub


Private Sub hk1_weg()
Dim zelle As Range
For Each zelle In Selection
zelle = Right(zelle, Len(zelle) - (Left(zelle, 1) = "'") * 1)
Next zelle
End Sub


Private Sub Hochkomma_weg()
Dim zelle As Range
On Error Resume Next
For Each zelle In Selection
If zelle <> "" Then zelle = zelle * 1
If Left(zelle, 1) = "'" Then
zelle = Right(zelle, Len(zelle) - 1)
End If
Next zelle
End Sub

Anzeige
AW: Bereich markieren per Makro
16.03.2005 11:38:11
Chris
Hi Mathias,
ich würde es ein wenig einfacher machen und das select weglassen, dass löst sich evtl. dein Problem! Du kannst doch dann deine Prozeduren einfach mehrmal aufrufen?!
Was da passieren soll ist mir aber immer noch nicht richtig klar. Hilft dir evtl. die *Replace*-Funktion, dann würdest du dir etwas Arbeit ersparen, oder?

Private Sub Msg1()
dim Zelle as Range
On Error GoTo errorhandler
Sheets("TB2").Select
Call hk1_weg (Range("A28:A4000"))
Call Hochkomma_weg (Range("A28:A4000"))
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch!!" & vbLf & "Bitte Query überprüfen!!!"
Else
MsgBox ("Der Vorgang wurde erfogreich beendet." )
end if
End Sub


Private Sub hk1_weg(Bereich as range)
Dim zelle As Range
For Each zelle In Bereich
zelle = Right(zelle, Len(zelle) - (Left(zelle, 1) = "'") * 1)
Next zelle
End Sub


Private Sub Hochkomma_weg(Bereich)
Dim zelle As Range
On Error Resume Next
For Each zelle In Bereich
If zelle <> "" Then zelle = zelle * 1
If Left(zelle, 1) = "'" Then
zelle = Right(zelle, Len(zelle) - 1)
End If
Next zelle
End Sub

Gruss
Chris
Anzeige
AW: Bereich markieren per Makro
16.03.2005 13:09:15
Mathias
Hallo Chris,
danke für deine Hilfe,
bei habe noch mehr Spalten und Tabellenblätter, die wollte ich hier aber nicht alle aufführen, der einfachhalt halber, diese TB-ter werden mit Daten gefüllt, aus SAP, leider Zauber mir das SAP immer ein Hochkomma vor die einzelnden Werte, das möchte ich entfernen, deshalb deshalb das Makro Beispiel, aber das nur zum Hintergrund.
Es geht mir eigentlich darum, das in den einzelnden Spalten, nehmen wir hier mal die Spalte A auf TB2. Dort werden Einträge reingeschrieben, der erste Eintrag befindet sich in Zelle A28, in welcher Zelle der letzte Eintrag in der Spalte A ist, ist nicht bekannt. Das kann die die Zelle A50 oder auch die Zelle A6000 sein, das hängt von der Auswertung ab. Das eingentliche Problem ist, das das abarbeiten bzw. das entfernen der Hochkommas ziemlich lang dauert, also der aufruf der Prozeduren hk1_weg und Hochkomma_weg, deshalb hab ich mir gedacht, das etwas zu optimieren, so das die Prozeduren nur für den Bereich aufgerufen werden in dem auch wirklich Daten vorhanden sind. Also zuerst prüfen wo sind Zelleinträge von A28 bis ? und nur in diesem Bereich soll das Makro dann die Hochkommas entfernen.
Ich hoffe die schwierigkeit einigermassen verständlich rübergebracht zu haben.
Gruss
Mathias
Anzeige
AW: Bereich markieren per Makro
16.03.2005 13:28:48
Mathias
Hallo Chris,
ich habe deinen Vorschlag gerade mal ausgetestet, leider funktioniert das bei mir nicht.
Ich bekomme immer die Fehlermeldung:
Fehler beim Kompilieren: Falsche Anzahl an Argumenten, oder ungültige Eigenschaftszuweisung, möglicherweise liegt das an meinem Excel 97.
Aber nachwievor löst das nicht mein Problem mit der nicht bekannten Anzahl der Einzelleinträge.
Gruss
Mathias
AW: Bereich markieren per Makro
16.03.2005 14:04:35
Chris
Hi Mathias,
das Problem mit SAP hatte ich auch schon mal - ist aber schon ein paar Tage her. Ich habe damals die Datei (die aus SAP kam) erstmal geöffnet und als ganz normale Excel-datei abgespeichert, war vorher irgendso´s Text-Ding (keine Ahnung - jedenfalls irgendwas anderes) und danach ist das Makro besser drübergelaufen.
Falls das nicht hilft würde ich mit der Replace-Funktion das "'" durch "" (also 1x NICHTS) ersetzen. z.B.
Cells(1, 1).Value = Replace(Cells(1, 1).Value, "'", "", 1, -1, vbTextCompare)
Dadurch wird das Hochkomma in Zelle(1,1) gelöscht
Wenn du das bei dir einbaust, sollte es klappen?

Private Sub Msg1()
Dim zelle As Range
On Error GoTo errorhandler
Sheets("TB2").Select
for each zelle in Range("A28:A4000")
zelle.Value = Replace(zelle.Value, "'", "", 1, -1, vbTextCompare)
next zelle
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch!!" & vbLf & "Bitte Query überprüfen!!!"
Else
MsgBox ("Der Vorgang wurde erfogreich beendet." )
end if
End Sub

Falls immernoch ne Fehler kommt, schreib mal wo genau
Gruss
Chris
Anzeige
AW: Bereich markieren per Makro
16.03.2005 14:15:49
Mathias
Hallo Chris,
habe gerade deinen Code ausgetestet, dafür habe ich ein neues Modul eingefügt und exakt diesen Code verwendet.
Leider kommt immer diese Fehlermeldung:

Sub oder Funktion nicht definiert und das Wort Replace inerhalb der Prozedur ist blau hinterlegt. (Excel 97?)

Sub Neu1()
Dim zelle As Range
On Error GoTo errorhandler
Sheets("MaterialIST").Select
For Each zelle In Range("A28:F4000")
zelle.Value = Replace(zelle.Value, "'", "", 1, -1, vbTextCompare)
Next zelle
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch!!" & vbLf & "Bitte Query überprüfen!!!"
Else
MsgBox ("Der Vorgang wurde erfogreich beendet.")
End If
End Sub

gruss Mathias
Anzeige
Hast mich überzeugt :o)
16.03.2005 14:31:42
Chris
Tja da brauchst du wohl ne neue Excelversion, nee mal ernsthaft bin ich überfragt.
Mein Letzter Versuch:
an Stelle von:
For Each zelle In Range("A28:F4000")
zelle.Value = Replace(zelle.Value, "'", "", 1, -1, vbTextCompare)
Next zelle
schreib mal:
For Each Zelle In Range("A1:A5")
If InStr(1, Zelle.Value, "´", vbTextCompare) 0 Then
Zelle.Value = Left(Zelle.Value, InStr(1, Zelle.Value, "´", vbTextCompare) - 1) & Right(Zelle.Value, Len(Zelle.Value) - InStr(1, Zelle.Value, "´", vbTextCompare))
End If
Next
- kann sein, dass ich das falsch Hochkomma reingepackt habe, dann änder das mal an den entsprechenden Stellen in der instr()-Funktion
Chris
Anzeige
AW: Hast mich überzeugt :o)
16.03.2005 16:47:34
Mathias
Mach ich,
ich hab in der Excel hilfe, das ungefähr so gefunden,
tut aber nicht wirklich, vielleicht hast du noch eine IDEE? ;-)
Währ schon toll
Worksheets("MaterialIST").Columns("A").Replace _
What:=zelle.Value, Replacement:=(zelle.Value, "'", "", 1, -1, vbTextCompare) _
SearchOrder:=xlByColumns, MatchCase:=True
das Original Beispiel sieht so aus
Worksheets("Tabelle1").Columns("A").Replace _
What:="SIN", Replacement:="COS", _
SearchOrder:=xlByColumns, MatchCase:=True
AW: Hast mich überzeugt :o)
17.03.2005 10:28:18
Chris
Hi Mathias,
ne das mit replace funktioniert etwas anders:
ersteinmal kannst du immer nur genau einen Wert bearbeiten (also eine Zelle, oder eine Variable) - denke ich jedenfalls
also in deinem Fallse das Objekt: *zelle* da dies immer die aktuelle Zelle in dem angegebenen Bereich (for each zelle in range("A1:A100")) ist.
dann kommt bei *what:=* das rein, was du austauschen willst - also das Hochkomma ("'"),
*Replacement:=* ist das was anstelle des Hochkommas rein soll, also einmal Nichts ("")
den Rest der Methode kannst du dir eigentlich schenken, sprich weglassen.
die Anweisung komplett wäre dann:
For Each Zelle In Range("A1:A5")
Zelle.Replace what:="´", replacement:=""
Next
Das an die entsprechende Stelle bei dir eingefügt, sollte die Arbeit erledigen - bitte überprüfe wieder das Hochkomma, ich habe das Teil rechts von der - Taste genommen (ohne Umschalten)
Gruss
Chris
Anzeige
AW: Bereich markieren per Makro
17.03.2005 16:56:29
Martin
Hallo Matthis,
1. Letzte besetzte Zelle in Spalte A (schon 1000 mal beantwortet, bitte bei solchen Fragen mal in die Recherche gehen)
Range("A65536").End(xlUp).Select 'markieren
z = Range("A65536").End(xlUp).Row 'Zeilennummer einer Variablen zuweisen
2. Du möchtest doch eigentlich Texte in Zahlen umwandeln und nicht das Anführungszeichen entfernen. Das geht am einfachsten so:

Sub Hochkomma_weg()
Range("D1:D3").Value = Range("D1:D3").Value
End Sub

Gruß
Martin Beck

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige