Mit "Range" in Celle "A2" springen und bis zur letzten gefüllten Zelle markieren
#11
Hallo,

versuche es einmal nach diesem Prinzip:

Code:
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Tabelle1").Sort.SortFields.Clear   'Name Tabelle ggf. anpassen
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Tabelle1").Sort.SortFields.Add2 _
Key:=Range("A2:A" & lngLetzte), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal

Funkt nicht ist keine Fehlerbeschreibung. Was geht nicht? Wird ein Fehler angezeigt? Fehlercode? etc.

Grüße
NobX
Antworten Top
#12
DAnke für den Code. Probiere es aus.
Was das "funkt nicht" betrifft, dass soll bedeuten, dass nach der 'Formarierung von A1:H1 der Code abgearbeitet wird aber keine Sortierung erfolgt.
Es gibt auch keine Fehlermeldung.
Antworten Top
#13
Hallöchen,

ich habe ausprobiert und einen VBA-Code gefunden der funktioniert. Nur habe ich die Bereiche nicht dynamisieren können sondern habe die mit fixen Zellbezügen festgelegt. Die von euch vorgeschlagene Variation mit einer Variablen geht nicht. Der Code wird, ohne Fehlermeldung abgearbeitet aber es passiert nichts. HAbe alle möglichen Varianten ausprobiert. NAchfolgend mein Code:


Code:
Sub CSV_kopieren_einfügen()
'
' CSV_kopieren_einfügen Makro
' Kopiert und fügt Daten in "Musikliste-2013" ein

Dim lngletzte As Long
lngletzte = Tabelle1.Cells(Rows.Count, 2).End(xlUp).Row
'Formatiert Überschriften Rahmen - Hintergrundfarbe - Schrift
    Range("A1,B1,C1,D1,E1,F1,G1,H1").Select
        With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .Name = "Arial"
        .Size = 16
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    'Spalten werden an Breite angepasst
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Columns("A:A").EntireColumn.AutoFit
    Columns("B:B").EntireColumn.AutoFit
    Columns("C:C").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("E:E").EntireColumn.AutoFit
    Columns("F:F").EntireColumn.AutoFit
    Columns("H:H").EntireColumn.AutoFit
    ActiveCell.SpecialCells(xlLastCell).Select
    'Markierte Zellen werden sortiert
    Range("A2:H25000").Select
        Worksheets(1).Sort.SortFields.Clear
        Worksheets(1).Sort.SortFields.Add2 Key _
        :=Range("A2:A25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
      Worksheets(1).Sort.SortFields.Add2 Key _
        :=Range("B2:B25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    Worksheets(1).Sort.SortFields.Add2 Key _
        :=Range("C2:C25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
      With Worksheets(1).Sort
        .SetRange Range("A2:H25000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Markiert in CSV den zu kopierenden Bereich
    Range("A2").Select
    Range("A2:H2").Select
    Range(Selection, Selection.End(xlDown)).Select
   
'Kopiert den selektierten Bereich
    Selection.Copy
'Aktiviert Datei "Kusikliste" und das Arbeitsblatt "Songliste ABC"
    Windows("Musikliste-2023_01.xlsm").Activate
    Sheets("Songliste-ABC").Select
    Range("A2").Select
Rem letzte zeile einer spalte ermitteln und aktivieren
    [A:A].SpecialCells(xlBlanks).Cells(1).Select
'Fügt kopierte Daten ein
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'Formatiert eingefügte Daten
    With Selection.Font
        .Name = "Arial"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
  'Sortiert gesamte Arbeitsmappe nach "Album-Titel-Interpret"
    Range("A2").Select
    ActiveWorkbook.Worksheets("Songliste-ABC").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Songliste-ABC").Sort.SortFields.Add2 Key:=Range( _
        "A2:A25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Songliste-ABC").Sort.SortFields.Add2 Key:=Range( _
        "B2:B25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Songliste-ABC").Sort.SortFields.Add2 Key:=Range( _
        "C2:C25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Songliste-ABC").Sort
        .SetRange Range("A1:I25000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Call Anzahl_Songs_berechnen
   
End Sub

Sub Anzahl_Songs_berechnen()
'
' Anzahl Songs berechnen
    Range("A2").Select
    [A:A].SpecialCells(xlBlanks).Cells(1).Select
    ActiveCell.FormulaR1C1 = "=COUNTA(R[-14035]C:R[-1]C)"
   
End Sub


Ich möchte das z.B. bei foldendem Code:

Worksheets(1).Sort.SortFields.Clear
        Worksheets(1).Sort.SortFields.Add2 Key _
        :=Range("A2:A25000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal

Das :=Range("A2:A25000") das A2:A25000 dynamisch, nach anzahl tatsächlicher belegter Zelle sprich letzte belegtre Zelle berechnet wird. Dasselbe gilt für die Formel "Anzahl2".

Danke euch schon im vorraus
Antworten Top
#14
Hei,

probiere es mal so:

=Range("A2:A" &  Range("A2").End(xlDown).Row)

Hei,

noch ein Tipp, diesen Stück Code:

Code:
Range("A1,B1,C1,D1,E1,F1,G1,H1").Select
        With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

kann man auch so schreiben, Select ist bäh,

Code:
With Range("A1:H1").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
Hoffe geholfen zu haben
Hubert
Antworten Top
#15
Danke. Du hast mir geholfen.
Was ds A1;B2,... betrifft habe ich das mit einem Makro aufgezeichnet und das muß ich zugeben aus "Faulheit" übergangen.
Antworten Top


Gehe zu:


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