Bereich markieren per Makro

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

Betrifft: Bereich markieren per Makro von: Mathias
Geschrieben am: 16.03.2005 10:43:32

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

Bild


Betrifft: AW: Bereich markieren per Makro von: Chris
Geschrieben am: 16.03.2005 11:03:22

Hi Mathias,

was soll nach dem Markieren passieren? Kann man das nicht nacheinander abarbeiten, oder muss alles gleichzeitig markiert werden?

Chris


Bild


Betrifft: AW: Bereich markieren per Makro von: Mathias
Geschrieben am: 16.03.2005 11:18:33

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



Bild


Betrifft: AW: Bereich markieren per Makro von: Chris
Geschrieben am: 16.03.2005 11:38:11

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


Bild


Betrifft: AW: Bereich markieren per Makro von: Mathias
Geschrieben am: 16.03.2005 13:09:15

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


Bild


Betrifft: AW: Bereich markieren per Makro von: Mathias
Geschrieben am: 16.03.2005 13:28:48

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


Bild


Betrifft: AW: Bereich markieren per Makro von: Chris
Geschrieben am: 16.03.2005 14:04:35

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


Bild


Betrifft: AW: Bereich markieren per Makro von: Mathias
Geschrieben am: 16.03.2005 14:15:49

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


Bild


Betrifft: Hast mich überzeugt :o) von: Chris
Geschrieben am: 16.03.2005 14:31:42

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


Bild


Betrifft: AW: Hast mich überzeugt :o) von: Mathias
Geschrieben am: 16.03.2005 16:47:34

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


Bild


Betrifft: AW: Hast mich überzeugt :o) von: Chris
Geschrieben am: 17.03.2005 10:28:18

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


Bild


Betrifft: AW: Bereich markieren per Makro von: Martin Beck
Geschrieben am: 17.03.2005 16:56:29

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


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Bereich markieren per Makro "