2.9k Aufrufe
Gefragt in Tabellenkalkulation von peko Mitglied (235 Punkte)
Kann man per VBA einen Makro in einem anderen Tabellenblatt ausführen und dann zurückkehren?

13 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo peko,

das geht. Du musst nur das entsprechende Tabellenblatt ansprechen:

Sub Beispiel()

Worksheets("Tabelle1").Range("A1") = "Dies ist ein Test"

With Worksheets("Tabelle2")
  .Range("A1") = "Hier wird etwas in Tabelle2 geschrieben"
  .Range("A2") = "Dazu gibt es mehrere Möglichkeiten"
End With

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von peko Mitglied (235 Punkte)
@ M.O.

Danke erstmal, klappt prima.

Wie aber kann ich von Tabelle1 aus in Tabelle2 eine Liste sortieren lassen und bin anschließende wieder in Tabelle1? Wäre sehr lieb, wenn du mir da auch auf die Sprünge helfen würdest.

Liebe Grüße

Peter
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

das kannst du z.B. so machen:

Sub sortieren()
    
 With Worksheets("Tabelle2")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("A1:A4") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("A1:C4")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 End With
 
End Sub

In dem Beispiel wird der Bereich A1 bis C4 nach Spalte A aufsteigend sortiert; keine Überschriften.

Gruß

M.O.

0 Punkte
Beantwortet von peko Mitglied (235 Punkte)
Lieber M.O.,

ich muss mich wohl bei dir entschuldigen, weil ich meine Frage nicht genau genug beschrieben habe. Neuer Versuch:

In Tabelle2 soll das Feld A1 bis E8 sortiert werden.

1. Sortierkriterium: Spalte B aufsteigend

2. Sortierkriterium: Spalte C absteigend

3. Sortierkriterium: Spalte A aufsteigend

Überschriften sind vorhanden in A1 bis E1

Wenn du dafür auch noch die Geduld aufbringen würdest, wäre ich dir besonders dankbar.

Liebe Grüße

Peter
0 Punkte
Beantwortet von peko Mitglied (235 Punkte)
Doch noch eine Zusatzfrage:

Kann man dafür sorgen, dass der Makro für Tabelle2 nach jeder Eingabe in Tabelle1 ausgeführt wird?

Das waren dazu jetzt hoffentlich alle Fragen.

LG Peter
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

du fragst:

Kann man dafür sorgen, dass der Makro für Tabelle2 nach jeder Eingabe in Tabelle1 ausgeführt wird?

Soll das für die gesamte Tabelle1 gelten oder nur für einen bestimmten Bereich?

Gruß

M.O.

0 Punkte
Beantwortet von peko Mitglied (235 Punkte)
Hallo M.O.,

das soll für die gesamte Tabelle1 gelten.

Ich habe erst vor Kurzem deinen Makro ausprobiert, funktioniert leider überhaupt nicht. Die Fehlermeldung "Objekt unterstützt diese Eigenschaft oder Methode nicht" im Debugger erscheint schon bei der Bearbeitung von

".Sort.sortfields.Clear"

Erstaunlicherweise werden schon beim Schreiben des Makros die üblichen Umwandlungen in Großbuchstaben bei Befehlswörtern nicht ausgeführt. Insgesamt sieht der Makro dann so aus:

Sub sortieren()
    With Worksheets("Tabelle2")
        .Sort.sortfields.Clear
        .Sort.sortfields.Add key:=.Range("A1:A4") _
         , sorton:=xlsortonvalues, Order:=xlAscending, dataoption:=xlsortnormal
        With .Sort
         .setrange Range("a1:c4")
         .header = xlGuess
         .MatchCase = False
         .Orientation = xlTopToBottom
         .sortmethod = xlPinYin
         .Apply
        End With
    End With
End Sub

Was kann ich noch tun, um den Makro zum Funktionieren zu bringen?

LG Peter
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

das folgende Makro gehört in das VBA-Projekt der Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)

With Worksheets("Tabelle2")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("B2:B8") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add Key:=.Range("C2:C8") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add Key:=.Range("A2:A8") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("A1:E8")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With

End Sub


Sobald in Tabelle1 etwas eingegeben wird, wird in Tabelle2 der Bereich B2 bis E8 sortiert wird. Beachte aber bitte, dass Änderungen in Formeln im Tabellenblatt 1 das Sortierereignis in Tabellenblatt 2 nicht auslösen.

Am Besten du kopierst den Code direkt in das VBA-Projekt der Tabelle.

Gruß

M.O.

0 Punkte
Beantwortet von peko Mitglied (235 Punkte)

Hallo M.O.,

du gibst dir (Danke!) wirklich viel Mühe, aber leider funktioniert der Makro immer noch ncht. Ich habe ihn original von deiner Antwort in das VBA-Projekt der Tabelle1 kopiert. Der Makro wird auch bei einer Eingabe in Tabelle1 gestartet, steigt aber wieder schon bei

.Sort.SortFields.Clear

aus. Das erste S (bei .Sort) wird direkt nach dem Kopieren automatisch klein geschrieben! Der Versuch, es durch ein großes S zu ersetzen, misslingt!

Muss ich noch irgend etwas anders machen?

LG Peter
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

lade mal deine Beispieldatei hoch. Wie das funktioniert kannst du hier nachlesen: Anleitung

Gruß

M.O.

...