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

Befehl verkürzen

Befehl verkürzen
23.08.2006 21:20:21
Karsten
Hallo...
kann mir jemand helfen diesen Befehl zu verkürzen?
Range("B3").Select
Application.Run "Zusammenfassen_2"
Range("B5").Select
Application.Run "Zusammenfassen_2"
Range("B7").Select
Application.Run "Zusammenfassen_2"
Range("B9").Select
Application.Run "Zusammenfassen_2"
Range("B11").Select
Application.Run "Zusammenfassen_2"
Range("B13").Select
Application.Run "Zusammenfassen_2"
Range("B15").Select
Application.Run "Zusammenfassen_2"
Range("B17").Select
Vielen Dank für Eure Hilfe.
MfG Karsten

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Befehl verkürzen
23.08.2006 21:24:59
Matthias
Hallo Karsten,

Dim i as Integer
For i = 3 To 17 Step 2
Cells(i, 2).Select
Zusammenfassen_2
Next i

Wenn du mir den Code des Malros "Zusammenfassen_2" noch zeigst...
Das kann man noch so umschreiben, dass ein Select nicht nötig ist und die Zelle oder deren Wert als Argument übergeben wird.
Gruß Matthias
AW: Befehl verkürzen
24.08.2006 00:07:58
Karsten
Hallo Matthias,
Besten Dank. Aber die ganze Sache geht eigentlich folgendermaßen(hab einiges leicht abgeändert):
Dim b As Integer
For b = 3 To 37 Step 2
Cells(b, 2).Select
Zusammenfassen_2
Next b
Dim e As Integer
For e = 3 To 37 Step 2
Cells(e, 5).Select
Zusammenfassen_2
Next e
Dim h As Integer
For h = 3 To 37 Step 2
Cells(h, 8).Select
Zusammenfassen_2
Next h
Dim k As Integer
For k = 3 To 37 Step 2
Cells(k, 11).Select
Zusammenfassen_2
Next k
Dim o As Integer
For o = 3 To 37 Step 2
Cells(o, 14).Select
Zusammenfassen_2
Next o
Ich weiß nicht, ob das schon kürzer sein könnte.
Zusammenfassen_2 ist:
With ActiveCell
Set Zelle = .Find("", LookIn:=xlValues)
If Zelle Is Nothing Then
With ActiveCell
Range(.Offset(0, -1), .Offset(0, -1)).Select
End With
With ActiveCell
Set Zelle = .Find("", LookIn:=xlValues)
If Zelle Is Nothing Then 'mit Inhalt
Exit Sub
End If
End With
With ActiveCell
If Not Zelle Is Nothing Then
With ActiveCell
Range(.Offset(0, 2), .Offset(0, 0)).Select
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
End If
End With
End If
End With
Das könnte vieleicht auch eleganter aussehen, aber ich bin da nicht so gut drauf auf dem Gebiet.
Beste Grüße von
Karsten
Anzeige
AW: Befehl verkürzen
24.08.2006 01:35:08
Matthias
Hallo Karsten,
also dieses Makro (Zusammenfassen_2) ist wirklich bemerkenswert...
Du prüfst die Zelle, ob sie Inhalt hat, so:

Set Zelle = .Find("", LookIn:=xlValues)
If Zelle Is Nothing Then

?
Es würde ja genügen:

If Zelle.Value <> "" Then

Ich blick nicht ganz, was das Makro macht...
Wenn die Zelle Inhalt hat und die links davon niocht, dann setzt du in den drei Zellen (links, Zelle selbst und rechts) einen Rahmen links und rechts. Ist das alles oder hab ich was übersehen?
Also teste mal dies:



Sub test()
Dim Spalte
Dim Zeile As Long
For Each Spalte In Array(2, 5, 8, 11, 14)
For Zeile = 3 To 37 Step 2
Zusammenfassen_2 Cells(Zeile, Spalte)
Next Zeile
Next Spalte
End Sub
Sub Zusammenfassen_2(Zelle As Range)
If Zelle.Value <> "" And Zelle.Value = "" Then
With Range(Zelle.Offset(0, -1), Zelle.Offset(0, 1))
.Borders(xlDiagonalDown).LineStyle = xlNone 'xx
.Borders(xlDiagonalUp).LineStyle = xlNone 'xx
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
.Borders(xlEdgeTop).LineStyle = xlNone 'xx
.Borders(xlEdgeBottom).LineStyle = xlNone 'xx
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
.Borders(xlInsideVertical).LineStyle = xlNone 'xx
End With
End If
End Sub

Die mit 'xx gekennzeichneten Zeilen kann man weglassen, wenn hier keine vorhandenen Linien gelöscht werden müssen.


Gruß Matthias
Anzeige
AW: Korrektur
24.08.2006 01:44:09
Matthias
Hi nochmal,
die ersten Zeilen von Zusammenfassen_2 müssen natürlich so lauten:

Sub Zusammenfassen_2(Zelle As Range)
If Zelle.Value <> "" And Zelle.Offset(0, -1).Value = "" Then

Wobei du das ".Value" jeweils auch weglassen kannst, da es die Default-Eigenschaft ist.
Gruß Matthias
AW: Korrektur
24.08.2006 09:56:38
Karsten
Hallo Matthias,
Danke Dir, aber es geht nicht.
Bei:
Dim Spalte
Dim Zeile As Long
For Each Spalte In Array(2, 5, 8, 11, 14)
For Zeile = 3 To 37 Step 2
Zusammenfassen_2 Cells(Zeile, Spalte)
Next Zeile
Next Spalte
kommt: Falsche Anzahl von Argumenten oder ungültige Zuweisung zu einer Eigenschaft.
Bei:
If Zelle.Value "" And Zelle.Offset(0, -1).Value = "" Then
kommt: Laufzeitfehler 424 Objekt erforderlich.
Ansonsten hast du es richtig verstanden.
(Wenn die Zelle Inhalt hat und die links davon niocht, dann setzt du in den drei Zellen (links, Zelle selbst und rechts) einen Rahmen links und rechts.)
Es ist so, dass meine Makrokonstruktion läuft, es sind halt nur ein paar Schönheitsfehler die ich nicht raffe.
Beste Grüße von Karsten
Anzeige
AW: Korrektur
24.08.2006 11:01:10
Matthias
Hallo Karsten,
in welches Zeile genau kommt die Fehlermeldung?
bei mir kommt kein Fehler. Nochmals der Code:

Sub test()
Dim Spalte
Dim Zeile As Long
For Each Spalte In Array(2, 5, 8, 11, 14)
For Zeile = 3 To 37 Step 2
Zusammenfassen_2 Cells(Zeile, Spalte)
Next Zeile
Next Spalte
End Sub
Sub Zusammenfassen_2(Zelle As Range)
If Zelle.Value <> "" And Zelle.Offset(0, -1).Value = "" Then
With Range(Zelle.Offset(0, -1), Zelle.Offset(0, 1))
.Borders(xlDiagonalDown).LineStyle = xlNone 'xx
.Borders(xlDiagonalUp).LineStyle = xlNone 'xx
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
.Borders(xlEdgeTop).LineStyle = xlNone 'xx
.Borders(xlEdgeBottom).LineStyle = xlNone 'xx
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 56
End With
.Borders(xlInsideVertical).LineStyle = xlNone 'xx
End With
End If
End Sub

Gruß Matthias
Anzeige
AW: Korrektur
24.08.2006 11:33:50
Karsten
Hallo Matthias,
Klappt doch. Ich hatte bei "Sub Zusammenfassen_2(Zelle As Range)" (Zelle As Range)irgendwie weggelassen. Jetzt gehts einwandfrei.
Nochmal Danke!
Gruß
Karsten
AW: Befehl verkürzen
23.08.2006 21:26:15
Peter
Hallo Karsten,
versuch es so:
Public

Sub Zusammenfassen()
Dim iIndx  As Integer
For iIndx = 3 To 17 Step 2
Range("B" & iIndx).Application.Run "Zusammenfassen_2"
Next iIndx
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Befehl verkürzen
24.08.2006 00:07:32
Karsten
Hallo Peter,
besten Dank, aber es funktioniert nicht. Ich nehme die Lösung von Matthias.
Gruß Karsten
Anzeige
AW: Befehl verkürzen
23.08.2006 21:27:24
Oberschlumpf
Hi Karsten
Versuch es mal so (ungetestet):

Sub Makro()
Dim liZeile As Integer
For liZeile = 3 to 11 Step 2
Range("B" & liZeile).Select
Application.Run "Zusammenfassen_2"
Next
End Sub

Konnte ich helfen?
Ciao
Thorsten
Korrektur
23.08.2006 21:28:19
Oberschlumpf
die erset Zeile muss heissen:
For liZeile = 3 to 11 Step 2
AW: Befehl verkürzen
23.08.2006 21:28:48
Oberschlumpf
grrr :-)
For liZeile = 3 to 17 Step 2
AW: Befehl verkürzen
24.08.2006 00:06:58
Karsten
Hallo Thorsten,
Danke, ja. Hab aber Matthias Lösung genommen.
Gruß
Karsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige