Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Makros verbinden

Forumthread: Makros verbinden

Makros verbinden
08.05.2025 22:04:41
Siegfried Pütz
Hallöchen,
habe das mit Paarungen hin bekommen, aus anderer Datei, bestehend aus 2 Makros (siehe Codes).

Das erste Makro soll als Mastermakro fungieren. Das 2. Makro soll als 1. Sub Makro und das dritte Makro als 2. Sub Makro.
Frage dazu:
Wie kann man das bewerkstelligen?

Gruß,
SiggiP


Makro 1 - Mastermakro
' Namen_mischen Makro

'

'
Range("AC38:AD45").Select
ActiveWorkbook.Worksheets("Rd.1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Rd.1").Sort.SortFields.Add Key:=Range("AD38:AD45") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Rd.1").Sort
.SetRange Range("AC38:AD45")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Range("D4").Select
End Sub


1, Sub Makro:
Sub Guppe_a_paaren()

'
' Guppe_a_paaren Makro
Range("A1:A8,a11").Select
Range("A11").Activate
End Sub


2. Sub Makro
Option Explicit



Dim MrkTxt As String, MrkTx1 As String, MrkTx2 As String
Dim MAN() As String, HLP() As String, PAR() As String, BER As Range, Asg As Range
Dim i As Long, j As Long, n As Long, p As Long, s As Long, z As Long, mx As Long
Dim TLE As Variant, Hlf As String
Dim mxNr As Long, mxSpT As Long, SpProSpT As Long, mxSp As Long


Sub SpielPaarungen()
On Error GoTo EXT
Application.Volatile
MrkTxt = Application.Selection.AddressLocal
TLE = Split(MrkTxt, ";")
MrkTx1 = Trim(TLE(0))
MrkTx2 = Trim(TLE(1))
Set BER = Range(MrkTx1)
Set Asg = Range(MrkTx2)
z = BER.Rows.Count: s = BER.Columns.Count

If s = 1 And z > 2 Then
n = BER.Count
If BER.Rows.Count Mod 2 = 1 Then
mx = n * (n + 1)
n = n + 1
Else
mx = n * (n - 1)
End If
ReDim MAN(1 To n) As String
ReDim HLP(1 To n) As String
ReDim PAR(1 To mx) As String
If BER.Rows.Count Mod 2 = 1 Then
MAN(1) = "spielfrei"
HLP(1) = "spielfrei"
For i = 2 To n
MAN(i) = BER(i - 1)
HLP(i) = BER(i - 1)
Next i
Else
For i = 1 To n
MAN(i) = BER(i)
HLP(i) = BER(i)
Next i
End If
p = 0
Call ERMPAR
For j = 1 To (n - 2)
Call NEUHLP
Call ERMPAR
Next j
mxSpT = n - 1
SpProSpT = n / 2
mxSp = mxSpT * SpProSpT
For i = 1 To mxSp
Asg(1).Offset(i - 1, 0) = PAR(i * 2 - 1)
Asg(1).Offset(i - 1, 1) = PAR(i * 2)
Next i
Set BER = Nothing
Set Asg = Nothing
Else
MsgBox "#Markierung?" & vbCr & vbCr & _
"1. Markierung: alle Teilnehmer ( nur 1 Spalte )" & vbCr & _
" - dann Taste 'Strg' festhalten - " & vbCr & _
"2. Markierung: für Ausgabe ( 1 Zelle reicht) " & vbCr & _
" - danach Makro starten! - ok? ", _
vbCritical + vbOKOnly, "Spielpaarungen"
End If
End
EXT:
MsgBox "#Markierung?" & vbCr & vbCr & _
"1. Markierung: alle Teilnehmer ( nur 1 Spalte )" & vbCr & _
" - dann Taste 'Strg' festhalten - " & vbCr & _
"2. Markierung: für Ausgabe ( 1 Zelle reicht) " & vbCr & _
" - danach Makro starten! - ok? ", _
vbCritical + vbOKOnly, "Spielpaarungen"
End Sub


'********************************
Private Sub NEUHLP()
Hlf = HLP(n)
For i = n To 3 Step -1
HLP(i) = HLP(i - 1)
Next i
HLP(2) = Hlf
End Sub
Private Sub ERMPAR()
For i = 1 To (n / 2)
p = p + 1
PAR(p) = HLP(i)
p = p + 1
PAR(p) = HLP((n + 1) - i)
Next i
End Sub

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
08.05.2025 23:06:49
Uduuh
Hallo,
du solltest mal beschreiben, was du erreichen willst.
16er-Feld jeder gegen jeden in zufälliger Reihenfolge?

Gruß aus'm Pott
Udo
AW: Nachfrage
08.05.2025 23:28:22
Siegfried Pütz
Hallo Udo.
Ich wurde hier schon mal geholfen. Für in einem Turnier Paarungen durch Zufall zu erstellen, wurden mir die beiden Sub Makros erstellt. Das funktioniert auch. Jetzt habe ich eine andere Variante, kein Turnier, erstellt. Hier geht es darum, die drei Makros so zusammen zufügen, das A die Namen gemischt werden und dann die Paarungen gelost werden. Ich habe das schon über ein neues Tabellenblatt hinbekommen, nur muss ich hier die drei Schritte nacheinander ausführen, was ich vermeiden möchte. Sprich; zuerst zum neuen Tabellenblatt, drei Schritte durchführen, dann zum eigentlichen ersten Spiel.
Wenn ich die drei Makros zusammen führen kann, benötige ich nur einen "Masterbutton".
Habe hier schon rumgestöbert, aber nichts brauchbares gefunden.

Liest sich bestimmt kompliziert.
Wenn es nicht geht, auch kein Problem. :-)
Gruß,
SiggiP
Anzeige
AW: Nachfrage
08.05.2025 23:44:37
Siegfried Pütz
Hallo Udo,
erledigt, funktioniert. Danke allen für die Hilfe.
Grüße Euch,
SiggiP
AW: Makros verbinden
08.05.2025 23:07:59
Piet
Hallo

im Prinzip kannst du es so machen, alle drei Makros nacheinander aufrufen.


Sub Button_BeiKlick()
Call makro1
Call makro2
Call makro3
End Sub

mfg Piet

Anzeige
AW: Makros verbinden
09.05.2025 19:21:43
Piet
Hallo

freut mich das mein Vorschlag klappt, kleiner Hinweis für die Zukunft.
Du kannst auch nacheinander deine -eigenen Makronamen- auflisten!
Für Fortgeschrittene geht das auch mit Übergabe von Variablen in der Klammer!
Nachfolgend eine kleine Einführung in die VBA Praxis.

Wenn du Dim nach ganz oben setzt, vor das 1 Makro, gelten diese Variablen für alle Makros!
Das nutze ich gerne um bestimmte Werte der Variablen auch im nächsten Makro zu benutzen.
Dim die ganz oben stehen werden NICHT automatisch gelöscht, wie Dim was direkt nach Sub steht!
In dem Fall musst du ggf. die Variable für jedes nachfolgende Makro beim Start wieder auf Null setzen.

mfg Piet
Anzeige
AW: Makros verbinden
10.05.2025 00:40:38
Piet
Hallo

@Udo Danke für die gute Erklärung, ich hoffe Siegfried hat es verstanden.

Zur Frage mit Sheet. Schau dir bitte alle drei Makros einmal genau an! Da gibt es sehr wichtige Unterschiede!
Was ich jetzt schreibe ist elementares VBA Grundwissen. Man braucht aber Zeit um das zu begeifen!
Range("AC38:AD45").Select 'dieses Select bezieht sich -IMMER- auf das gerade -AKTIVE- Sheet!
ActiveWorkbook.Worksheets("Rd.1").Sort --> Der Sort Teil bezieht sich auf das AktiveWorkbook! Und das Sheet("Rd.1")
Selbst hier könnte es einen Laufzeitfehler geben, wenn du das Makro aus einer anderen Datei startest, wo es KEIN Sheet("Rd.1") gibt!

Beim 2.Makro Sub Guppe_a_paaren - bezieht sich das Select IMMER auf das gerade aktive Sheet. Den Code interessiert -nicht- wie das Sheet heisst!
Beim 3.Makro das gleiche. --> Wenn sich der Start Button in einem -anderen Sheet- befindet musst du geeignete Maßnahmen treffen.
Wenn das Makro in Sheets("Rd.1") laufen soll, musst du entweder das Sheet aktivieren, z.B. nach Sub Spielparrungen mit Sheets("Rd.1").Activate od. Select

Oder du baust eine With Klammer ein. With Worksheets nach Sub, und End With vor End Sub!
Bei der With Klammer musst du vor Range oder Cells dann IMMER einen Punkt machen, dann versteht Excel das es sich auf dieses Sheet bezieht.
Für Neulinge ist das am Anfang schwer zu verstehen, aber mit ein bisschen Übung kommst du schnell dahinter wie bei VBA der "Hase läuft".

mfg Piet

Sub Spielparrungen

With Worksheets("Rd.1")
.Range("A1").Value = "Test" 'Jetzt erscheint der Text IMMER im Sheet("Rd.1") in Zelle A1
End With
End Sub
Anzeige
AW: Makros verbinden
10.05.2025 00:43:51
Piet
Nachtrag - Excel kann NICHT denken, VBA befolgt NUR Befehle! Das die richtig sind, ist Sache des Programmierers.
Zu deiner Erleichterung, selbst wir bauen uns nach 20 Jahren Programmieren gelegentlich dumme "Eigentore" ein!
AW: Makros verbinden
10.05.2025 01:31:03
Siegfried Pütz
Hallo Piet und Udo,
ich habe ja schon einiges "gelernt", danke hier im Forum. Habe mal gehört das es in Excel fast unmöglich ist alles zu kennen was möglich wäre.
Naja, sehe ich ja auch hier. Diverse Anfragen meinerseits wurden von unterschiedlichen Usern hier im Forum mit verschiedenen Codes beantwortet.
In den letzten Monaten habe ich das schon einige Male festgestellt. In meinen zahlreichen Excel Dateien habe ich diverse Makros eingebaut. Ich glaube englisch als Fremdsprache könnte helfen. Leider habe ich nur wenig in englisch zu bieten, gab es nicht zu meiner Zeit in der Schule.
Egal, daher freue ich mich das hier geholfen wird. :-)

So nun zu dem behobenen Problem; habe mittlerweile so hinbekommen das es zumindest in einem der 2 Dateien funktioniert. In der anderen Datei habe ich es über Umwege hinbekommen, muss nur von einem zum anderen Datenblatt wechseln und wieder zurück.

Danke für Eure Hilfe und Hinweise.
Grüße Euch,
SiggiP
Anzeige
AW: Makros verbinden
09.05.2025 20:32:58
Siegfried Pütz
Hallo Piet,
habe folgenden Code eingetragen, der funktioniert, aber nur auf der Seite mit den Namen. Wenn ich in Rd.1, Button kopiert eingefügt und gleiches Makro verwendet, funktioniert dieser Button nicht?
Mit dem "Dim" kann ich nichts anfangen???
Kannst ja mal ne Info, so als Code, senden, wenn es geht?
Gruß,
SiggiP




Sub Button_BeiKlick()
Call Makro1
Call Makro2
Call Makro3
Call Makro4
Dim Makro_5
End Sub
Anzeige
was Piet meint, ...
09.05.2025 22:52:38
Uduuh
Hallo,
ist sowas:
Option Explicit


Dim MeineVariable

Sub Hauptmakro()
MeineVariable = "Test"
Call DasErsteMakro
Call DasZweiteMakro
End Sub

Sub DasErsteMakro()
MsgBox MeineVariable
End Sub

Sub DasZweiteMakro()
MsgBox MeineVariable
End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: Makros verbinden
08.05.2025 23:34:01
Siegfried Pütz
Hallo Piet.
Das habe ich schon mal probiert.
Nur was muss ich in Makro 1, Makro 2, Makro 3 einfügen?
Muss, kann ich die Makros umbenennen?

Grüße Dich,
SiggiP
AW: Makros verbinden
08.05.2025 23:43:05
Siegfried Pütz
Hallo Piet,
erledigt, Danke.
Habe die Makros umbenannt, perfekt. :-)
Gruß,
SiggiP
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18