Herbers Excel-Forum - das Archiv

Wenn Dann Makro

Bild

Betrifft: Wenn Dann Makro
von: Markus Morgenbesser

Geschrieben am: 03.01.2007 22:21:06
Hallo...
ich hätte leider wieder mal ein Problem. der code den du mir geschickt hast war toll und hat funktioniert.
die sortierfunktion geht dann richtig wenn spalte A u. B befüllt sind, sonst würfelt es alles durcheinander. ich möchte jedoch bevor die sortierfunktion beginnt eine überprüfung machen ob alle zeilen befüllt sind. es soll eine fehlermeldung kommen und der vorgang abgebrochen werden falls das nicht der Fall ist.
nach dem motto: (nur halt als makro)
WENN: in spalte A oder B der Wert < 0
DANN: msgbox "Bitte alle zellen befüllen" und makro ABBRECHEN
SONST:
Sub sortierenkome()
Dim lngEnde As Long
lngEnde = Worksheets("Tabelle1").Range("A65536").End(xlUp).Row 'letzte gefüllte Zelle in Spalte A
'Sortierung
Range("A8", "BR" & lngEnde).Sort Key1:=Range("A8"), Order1:=xlAscending, Key2:=Range("B8") _
, Order2:=xlAscending, Key3:=Range("C8"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
End Sub

https://www.herber.de/bbs/user/39354.xls
Bitte um Hilfe.
lg markus
bitte wieder den ganzen code damit ich weiß wo ich was hinkopieren muss.
Bild

Betrifft: AW: Wenn Dann Makro
von: Daniel Eisert

Geschrieben am: 03.01.2007 22:44:52
Hallo
so im Prinzip
die Leerzeilen würd ich allerdings rausschmeissen, Schönheit ist nicht die Stärke von Excel, sowas macht die Programmierung und Bearbeitung nur unnötig kompliziert.
oder braucht ihr Banker den 2-Farben-Hintergrund damit ihr was erkennen könnt ;-)?
Sub sortierenkome()
Dim lngEnde As Long
Dim a As Long
lngEnde = Worksheets("Tabelle1").Range("A65536").End(xlUp).Row 'letzte gefüllte Zelle in Spalte A
a = WorksheetFunction.CountA(Range("A8:B" & lngEnde))
If a  = Range("A8:B" & lngEnde).Cells.Count Then
'Sortierung
Range("A8", "BR" & lngEnde).Sort Key1:=Range("A8"), Order1:=xlAscending, Key2:=Range("B8") _
, Order2:=xlAscending, Key3:=Range("C8"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
Else
MsgBox ("Bitte alle Namensfelder ausfüllen")
range("A8:B" & lngEnde).specialcells(xlcelltypeblanks).select
End If
End Sub

Gruß, Daniel
Bild

Betrifft: AW: Wenn Dann Makro
von: Markus Morgenbesser

Geschrieben am: 05.01.2007 11:14:06
Hey du bist genial...
nur noch ein kleiner schönheitsfehler :-) (und das kann excel sicher) und banker habens einfach nur gern abwechslungsreich *g*; würde dir glatt ein bier zahlen wenn du in der nähe wärst.
schönheitsfehler: es schaltet sich nach der msgbox
bei letzten zeilen
range("A8:B" & lngEnde).specialcells(xlcelltypeblanks).select
immer der debugger ein und wird gelb hinterlegt. wenn ich den blattschutz aufhebe funktioniert wieder alles. den blattschutz brauch ich aber.
ich versteh das nicht ganz, da bei lngEnde eh definiert ist wie weit die Spalte B geht.
"range" verstehe ich ja noch aber was bewirkt das specialcells(xlcelltypeblanks).select?
hier nochmal der bereits geänderte code:
https://www.herber.de/bbs/user/39404.xls
PS:
die leerzeilen brauch ich weil ich es nicht anders geschafft habe immer 2 zeilen bei der sortierung als einheit zu betrachten und ich brauche aber 2. nächstes problem es hat mir dann wenn in den leerzeilen nicht der gleiche text wie in der zeile darunter war bei der sortierung alles durcheinandergehaut. also wie soll ich da die leerzeilen löschen?
Bild

Betrifft: AW: Wenn Dann Makro
von: Daniel Eisert

Geschrieben am: 05.01.2007 18:50:43
Hallo
die letzte Zeile sollte eigentlich nur alle leeren Zellen markieren, damit der Anwender weiß, wo noch was fehlt. Genau das macht Specialcells(xlcelltypeblanks). Wenn das mit dem Blattschutz kollidiert, dann nimm die Zeile einfach raus.
Ansonsten könntest du noch mit
Activesheet.protect und Activesheet.unprotect den Passwordschutz im Marko aufheben und wieder setzen.
Für die Anzeige wärs aber effektiver, mit der Bedingten Formatierung einen Hinweis zu geben, dann siehts man es sofort.
zur letzten Frage.
wenn du die "LEERZeilen löschen willst, geht das auch ganz einfach, denn die Zellen sind ja nicht leer,sondern beinhalten formeln:
- Bearbeiten - Gehe zu - Inhalte - Formeln
- Bearbeiten - Zellen löschen - Ganze Zeilen
Wenn du trotzdem noch das 2-Farb-Muster in der Darstellung haben willst, geht das auch recht einfach über die Bedingte Formatierung.
- alle relevanten Zellen markieren
- auf Format - Bedingte Formatierung - Formel ist gehen.
- dort die Formel eingeben: =REST(ZEILE();2)=1
- dann ne schöne Farbe raussuchen.
Dann erscheint jede 2. Zeile in dieser Farbe
Gruß, Daniel
 Bild