Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Range oder String

Betrifft: Range oder String von: Peter
Geschrieben am: 27.04.2014 12:01:27

Hallo,

ich werde noch wahnsinnig.
Folgendes Problem:

Im ersten Codeteil starte ich mit der Sortierung meiner Tabelle. Da dieser Code auf verschiedene Tabellen angewendet wird dachte ich, es wäre gut den Tabellennamen und -bereich jeweils in einer Variable (WSName as string, rngBereich as range) zu speichern.

Dim WsName As String
Dim ls As Long, lz As Long, rngBereich As Range

With ActiveWorkbook.Worksheets(WsName)
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
lz = .Cells(.Rows.Count, 1).End(xlUp).Row
ls = .Cells(lz, .Columns.Count).End(xlToLeft).Column
MsgBox ("letzte Zeile ist:" & lz)
MsgBox ("letzte Spalte ist:" & ls)
Set rngBereich = .Range(.Cells(1, 1), .Cells(lz, ls))
End With

Dieser erste Teil funktioniert.

Aber jetzt scheitere ich an dem folgenden Teil:

With ActiveWorkbook.Worksheets(WsName).Sort
.SetRange Range("A1:A2797")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Frage 1: Wie kann ich das Problerm lösen?
Frage 2: Ich glaube ich habe ein grundsätzliches Problem, wann ich etwas als Range, Worksheet oder String deklarieren muss. Vielleicht schmeisse ich ja auch die verschiedenen Methoden irgendwie durcheinander. Zumindest herrscht diesbezüglich in meinem Kopf ein vollkommenes Chaos. Kann mir jemand eine gute Erklärung in Form von Quellen im Netz oder Büchern empfehlen, die den gordischen Knoten in meinem Kopf zerschlagen?

Vollkommen zerknirscht,
Peter

  

Betrifft: AW: Range oder String von: Peter
Geschrieben am: 27.04.2014 12:30:42

Frage 1 hat sich gerade geklärt
.SetRange rngBereich
ist die Lösung.

Aber wenn jemand was zu meinem verzweifelten Aufruf in Frage 2 sagen könnte...:-)


  

Betrifft: AW: Range oder String von: Hajo_Zi
Geschrieben am: 27.04.2014 12:37:10

Hallo Petere,

was ist da offen
Range ist eine Zelle, Zellbereich
Worksheets ist eine Tabelle und
String ist eine Zeichenkette.

GrußformelHomepage


  

Betrifft: AW: Range oder String von: Peter
Geschrieben am: 27.04.2014 12:41:48

Offen ist die Frage, ob es eventuell eine Quelle gibt, die einem Dösbattel wie mir die Augen öffnet. Für einen erfahrenen Coder ist das sicher alles kein Problem, aber ein Neueinsteiger hat da halt seine Probleme - wie man vielleicht daran erkennen kann, dass ich an dieser, doch recht banal erscheinenden Lösung, etwa 1 Std. gefummelt habe.

Gruß,
Peter


  

Betrifft: AW: Range oder String von: Tino
Geschrieben am: 27.04.2014 13:52:49

Hallo,
eigentlich brauchst Du die Tabelle nicht mit anzugeben, weil der Rangebereich schon darauf verweist.
Wichtiger wäre anzugeben nach welcher Spalte sortiert werden soll und ob
dieser eine Überschrift hat oder nicht und die Sortierrichtung.

Beispiel:

Sub test()
Sort_ Tabelle1.Range("A:C"), 1, xlNo, xlAscending
End Sub


Sub Sort_(rngBereich As Range, lngSortColum&, xlHeader As XlYesNoGuess, xlSortOrder As xlSortOrder)

With rngBereich.Parent.Sort
    .SortFields.Clear
    
    .SortFields.Add Key:=rngBereich.Cells(1, lngSortColum), _
     SortOn:=xlSortOnValues, Order:=xlSortOrder, DataOption:=xlSortNormal
     
    .SetRange rngBereich
    .Header = xlHeader
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    
    .SortFields.Clear
End With
End Sub
Gruß Tino


  

Betrifft: AW: Range oder String von: Peter
Geschrieben am: 27.04.2014 14:18:13

Oha, das erscheint mir wie etwas für die Fortgeschrittenen. Da lass ich lieber erst mal die Finger von. Trotzdem Danke :-)


  

Betrifft: Quelle: VBEditor-Hilfe nicht ausreichend, ... von: Luc:-?
Geschrieben am: 27.04.2014 14:31:41

…Peter?
Viell dann auch mal ins Objektmodell schauen und den Unterschied zwischen Objekten und normalen Daten eruieren! Objekte wie Range können Daten enthalten, die ein Text (String=Zeichenkette), eine Zahl (inkl Sonderfall Datum/Zeit), ein Datenfeld (aus MatrixFml), ein Wahrheits- oder Fehlerwert sein können. Objekte können 2 Arten von Eigenschaften haben, welche, die in irgendeiner Form einen Datenwert bezeichnen, und solche, die selbst wieder (nachgeordnete Kind-)Objekte begründen. Solche „Kinder“ (in anderen Sprachen auch über child erreichbar) haben also „Eltern“, weshalb man mit Range(…).Parent das jeweilige Worksheet (als Objekt) erhält. Demggüber haben Daten keine Eigenschaften, nur (vordefinierte) Wertebereiche, eben String, Long, Double u.a., als Datenfeld auch noch Dimensionen. Lässt man die Eigenschaftsdefinition/-deklaration weg, erhält man Daten vom Typ Variant, die Daten aller Typen umfassen können. Handelt es sich dabei um ein komplettes Datenfeld, spricht man in VBA von einem Variant, der ein Datenfeld enthält, was nicht dasselbe wie ein vordefiniertes Datenfeld bestimmten Typs und ebensolcher Dimensionierung ist. In anderen Sprachen sind diese Variants nämlich ebenfalls Objekte (Arrays ), in VBA haben sie wohl eher einen „Quasi-Objekt-Status“, sind also offiziell keine, während das Sammlungen (Collections ) und das Dictionary-Objekt, denen diese Arrays ähneln, durchaus sind. Die mehr­dimensionale Standard-Array-Form in VBA hat damit allerdings nichts zu tun.
Gruß + schöSo, Luc :-?


  

Betrifft: AW: Quelle: VBEditor-Hilfe nicht ausreichend, ... von: Peter
Geschrieben am: 27.04.2014 15:02:08

Das hört sich doch schon mal vielversprechend an.

Danke


 

Beiträge aus den Excel-Beispielen zum Thema "Range oder String"