Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Macro ohne Select wegen Hinweis von HaJo

Macro ohne Select wegen Hinweis von HaJo
09.05.2008 04:58:00
HaJo
Hallo
Ich durchsuche gerade meine Macros, ob irgendwo ein Select oder Activate oder Value entfernt werden kann.
Jetzt habe ich ein Macro, was ich hier aus dem Forum habe und nicht mehr weiter weiß, wie ich die select Funktion umgehen kann:

Sub Loeschen()
Dim Zelle As Range
For b = 1 To 2
If b = 1 Then Sheets("Besetzung").Select: Spalte = "B": c = 2
If b = 2 Then Sheets("s").Select: Spalte = "F": c = 6
For a = 1 To 80
Cells(a, c).Select
If Right(Range(Spalte & a), 5) = " Std." Then
For Each Zelle In Selection
Zelle = Left(Zelle, Len(Zelle) - 8)
Next
End If
If Left(Range(Spalte & a), 2) = "?-" Then
For Each Zelle In Selection
Zelle = Right(Zelle, Len(Zelle) - 4)
Next
End If
If Left(Range(Spalte & a), 1) = "?" Then
For Each Zelle In Selection
Zelle = Right(Zelle, Len(Zelle) - 3)
Next
End If
Next a
Next b
End Sub


Das Macro sucht in 2 verschiedenen Tabellenblättern (Besetzung oder s) in verschiedenen Spalten (B oder F) nach Zellen, wo entweder
1. die letzten 5 zeichen " Std." sind, und löscht dann die letzten 8 Zeichen. (Mitarbeiter geht " -2 Std." früher = 8 Zeichen)
2. die ersten zwei mit "?-", und löscht dann die ersten 4 Zeichen. (Mitarbeiter hat angefragt wegen "?-2 " Stunden früher gehen = 4 Zeichen)
3. das erste Zeiche ein ? ist, und löscht dann die ersten 3 Zeichen. (Mitarbeiter hat angefragt "?1 " wegen ganz frei = 3 Zeichen)
wie bekomme ich das Macro ohne select hin?
MfG
Karsten J.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro ohne Select wegen Hinweis von HaJo
09.05.2008 07:16:00
HaJo
Hallo Karsten,
Die Schleifen For Each Zelle in Selection sind mir ein Rätsel, da du vorher ja nur eine Zelle selektierst.
Insofern kannst du diese Schleife einfach weglassen und der Variablen Zelle den Bereich Cells(a, c) zuweisen.
Um das Selektieren der Blätter zu vermeiden, kannst du einer Variablen Sh die Blätter zuweisen und musst dann jeden Bereich darauf referenzieren, also statt Range(...) einfach Sh.Range(...) und statt Cells(...) dann Sh.Cells(...) schreiben.
So schaut das ganze dann aus:

Sub Loeschen()
Dim Zelle As Range, Sh As Worksheet
Dim a As Integer, b As Integer, c As Integer
Dim Spalte As String
For b = 1 To 2
If b = 1 Then Set Sh = Sheets("Besetzung"): Spalte = "B": c = 2
If b = 2 Then Set Sh = Sheets("s"): Spalte = "F": c = 6
For a = 1 To 80
Set Zelle = Sh.Cells(a, c)
If Right(Sh.Range(Spalte & a), 5) = " Std." Then
Zelle = Left(Zelle, Len(Zelle) - 8)
End If
If Left(Sh.Range(Spalte & a), 2) = "?-" Then
Zelle = Right(Zelle, Len(Zelle) - 4)
End If
If Left(Sh.Range(Spalte & a), 1) = "?" Then
Zelle = Right(Zelle, Len(Zelle) - 3)
End If
Next a
Next b
End Sub


Gruß Matthias

Anzeige
nachgefragt wg. Set (...) = Nothing
09.05.2008 08:10:05
Matthias
Hallo Matthias
Da habe ich ja ganz schön lang gebraucht um einen Code zu schreiben der dann doch länger
ist als Dein Beispiel. ;o)
Mal eine Frage.
Ist wie in meinem Beispiel eigentlich Set ... = Nothing überhaupt nötig, oder nicht?
Oder gibt Excel das Objekt automatisch wieder frei ? Ich hab keine Ahnung.
Gruß Matthias

AW: nachgefragt wg. Set (...) = Nothing
09.05.2008 08:17:00
Matthias
Hallo Namensvetter,
Hmm, genaues weiß ich dazu nicht, aber Set ... Is Nothing kenne ich nur für Objekte à la

Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
Set xlApp = Nothing


Ich lass es mal offen für die Spezialisten.
Gruß Matthias

Anzeige
AW: nachgefragt wg. Set (...) = Nothing
09.05.2008 08:41:00
Hajo_Zi
Hallo Matthias,
ich setze es grundsätzlich ein.
Warum. Ich habe es nicht eingestzt und nach schließen der Datei konnte ich im VBA Projekt noch den Code der geschlossenen Datei sehen. Das hat mich gestört.

Danke Hajo __ oT
09.05.2008 08:47:58
Matthias

AW: Macro ohne Select wegen Hinweis von HaJo
09.05.2008 21:44:39
HaJo
Hallo
Danke euch allen.
Funktioniert perfekt.
Es lebe das Forum und ihre User.
MfG
Karsten J.

AW: Macro ohne Select wegen Hinweis von HaJo
09.05.2008 07:59:09
HaJo
Hi
also wenn ich Dich richtig verstanden habe, hier ein Versuch von mir.
Gedanklich eigentlich ähnlich des Beispiels von Matthias G

Sub zB_so()
Dim Zelle As Range
Dim Spalte As String
Dim a As Long, b As Byte, c As Long
Dim wks As Worksheet
For b = 1 To 2
'anstatt If b = 1 Then Sheets("Besetzung").Select: Spalte = "B": c = 2
If b = 1 Then Spalte = "B": c = 2: Set wks = Worksheets("Besetzung")
'anstatt If b = 2 Then Sheets("s").Select: Spalte = "F": c = 6
If b = 2 Then Spalte = "F": c = 6: Set wks = Worksheets("s")
For a = 1 To 80
If Right(wks.Range(Spalte & a), 5) = " Std." Then
wks.Cells(a, c) = Left(wks.Cells(a, c), Len(wks.Cells(a, c)) - 8)
End If
If Left(wks.Range(Spalte & a), 2) = "?-" Then
wks.Cells(a, c) = Right(wks.Cells(a, c), Len(wks.Cells(a, c)) - 4)
End If
If Left(wks.Range(Spalte & a), 1) = "?" Then
wks.Cells(a, c) = Right(wks.Cells(a, c), Len(wks.Cells(a, c)) - 3)
End If
Next a
Set wks = Nothing
Next b
End Sub


oder so


Sub zB_so()
Dim Zelle As Range
Dim Spalte As String
Dim a As Long, b As Byte, c As Long
Dim wks As Worksheet
For b = 1 To 2
'anstatt If b = 1 Then Sheets("Besetzung").Select: Spalte = "B": c = 2
If b = 1 Then Spalte = "B": c = 2: Set wks = Worksheets("Besetzung")
'anstatt If b = 2 Then Sheets("s").Select: Spalte = "F": c = 6
If b = 2 Then Spalte = "F": c = 6: Set wks = Worksheets("s")
 With wks
For a = 1 To 80
If Right(.Range(Spalte & a), 5) = " Std." Then
.Cells(a, c) = Left(.Cells(a, c), Len(.Cells(a, c)) - 8)
End If
If Left(.Range(Spalte & a), 2) = "?-" Then
.Cells(a, c) = Right(.Cells(a, c), Len(.Cells(a, c)) - 4)
End If
If Left(.Range(Spalte & a), 1) = "?" Then
.Cells(a, c) = Right(.Cells(a, c), Len(.Cells(a, c)) - 3)
End If
Next a
 End With
Set wks = Nothing
Next b
End Sub


Gruß Matthias

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige