Blattname als Variable
#1
Hallo zusammen,
wenn ich das Makro so ausführe, funktioniert es.
PHP-Code:
Private Sub CommandButton1_Click() 'Uhrzeit sortieren
    Range("A1:I109").Select
    Range(Cells(2, 1), Cells(51, 9)).Interior.ColorIndex = 0
    ActiveWorkbook.Worksheets("Neue Liste").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Neue Liste").Sort.SortFields.Add Key:=Range( _
        "H2:H109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Neue Liste").Sort.SortFields.Add Key:=Range( _
        "I2:I109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Neue Liste").Sort.SortFields.Add Key:=Range( _
        "B2:B109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Neue Liste").Sort
        .SetRange Range("A1:I109")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With 
End Sub

Wenn ich aber zuvor noch Blattname = ActiveSheet.Name zuvor setze als Variable, dann bekomme ich den Fehler 9.
PHP-Code:
Private Sub CommandButton2_Click() 'Sortieren nach Name
Blattname = ActiveSheet.Name
    Range("A1:I109").Select
    Range(Cells(2, 1), Cells(51, 9)).Interior.ColorIndex = 0
    ActiveWorkbook.Worksheets("Blattname").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Blattname").Sort.SortFields.Add Key:=Range( _
        "B2:B109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Blattname").Sort.SortFields.Add Key:=Range( _
        "C2:C109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Blattname").Sort.SortFields.Add Key:=Range( _
        "D2:D109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Blattname").Sort
        .SetRange Range("A1:I109")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub 

Der Name wird korrekt ausgelesen. das habe ich kontrolliert.
Was muss ich ändern, damit die Sortierung mit dem Blattnamen läuft?
Antworten Top
#2
Das liegt daran:  
Code:
Blattname <> "Blattname"
Antworten Top
#3
Hallo

du darfst grundsätzlich eine Variable nicht in "" setzen, sondern gibst ihn so an Range(Blattname)

Hinweis:  Statt ActiveSheet gibst du besser den echten Tabellen Namen an, sonst wird das Makro in jedem aktivem Sheet ausgeführt.  Auch in Sheets wo du es sicher nicht willst!

Hinweis 2:  du gibst zu beginn des Codes Range("A1:I109").Select an. Sieht nach einer Makro Recorder Aufzeichnung aus.
Wir verzichten auf unnötige Select im Code. Die Zeile solltest du löschen.

Tipp zu 109:  mit der Zeile 109 bist du statisch festgelegt auf diese Zeile. Deine nächste Frage im Forum wird sein, wie kann ich das ändern, wenn die Tabelle nach unten wächst. Das machst du am besten mit der LastZell Variante.  Erklären wir sie bevor du fragst.

LastCell = Cells(Rows.Count, 1).End(xlUp).Row  -   findet die letzte Zelle in Spalte A (Spalte 1)
Range("A1:I" & LastZell).Sort    usw.   -  sortiert dann den dynamischen Bereich bis LastZell

Ich hoffe die Erklärung hat dir weitergeholfen gleich zwei Fragen zu beantworten.

mfg Gast 123
Antworten Top
#4
Vielen Dank für die Hilfe.
Ich werde die überflüssigen Zeilen löschen.
Antworten Top
#5
Oder

Code:
Private Sub CommandButton1_Click() 'Uhrzeit sortieren
  with sheet1
    . Cells(2, 1).resize(49, 9)).Interior.ColorIndex = 0
    .range("A1:I109").Sort .cells(1,8),,.cells(1,9),,,.cells(1,2),,1
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste