Clever-Excel-Forum

Normale Version: 2 VBA-Codes gleichzeitig ausführen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hoallo Phillip

ich bin nicht jeden Tag im Forum und melde mich noch, mal weil dir vielleicht -Vba Grundwissen- fehlt.

Einem CommandButton kannst du mit der rechten Maustaste ein Makro zuweisen. Genau das Makro wird ausgeführt!!
In meinem zuvor genannten Beispiel haettest du dem Button das Makro zuweisen müssen:  "Sub Button_BeiKlick"

Ein direktes zuweisen geht aber nur bei Standard Button, Nicht bei AktiveX Steuerelemente. Die haben einen eigenen Code!
Da kann man innerhalb des eigenen Codes auch wieder Makros aus normalen Modul Blaettern aufrufen.  wichtiger Unterschied:
Standard Button kannst du in mehreren Tabellen haben, und allen das gleiche Makro zuweisen!  Deshalb bevorzuge ich Standard Buttons!  

Inzwischen gibt es auch andere Lösungen, z.B. von Opa Edgar, schön zu sehen.

mfg Gast 123
(08.08.2017, 06:03)Kuwer schrieb: [ -> ]Hallo,

wenn das eine Makro FarbeReiter heißt, muss es auch mit diesem Namen aufgerufen werden.  Undecided

Gruß Uwe

Uwe du hast Recht! Als ich deine Antwort gelesen habe, dachte ich, daran liegt es.
Der Makro Name wurde falsch benannt.
Hab ich geändert, funktionierte dann leider auch nicht!
(08.08.2017, 16:43)BoskoBiati schrieb: [ -> ]Hi,

alles in einem Makro:


Code:
Sub kopieren()
  Dim lngC As Long
  Dim rngZelle As Range
  Dim vntUrsprung As Variant, vntZiel As Variant
Dim Blatt As Worksheet

  vntUrsprung = Array("B23", "E23", "G10", "G28", "G35", "C45", "L29", "M29", "N29", "P29", "Q29", "P14", "Q14", "Q10", "G38")
  vntZiel = Array("Q", "R", "T", "AA", "AB", "AC", "W", "X", "Y", "N", "O", "B", "C", "AO", "AI")

  Range("M1:M2").Copy Worksheets("Spielabschnitt").Range("AR1")

  For lngC = 0 To UBound(vntUrsprung)
     Worksheets("Spielabschnitt").Range(vntZiel(lngC) & Range("M2")).Value = Range(vntUrsprung(lngC)).Value
  Next lngC

  For Each rngZelle In Range("AA6,AA9,AA12,AA15,AA23,AA26,AA29,AA32,AA40,AA43,AA46,AA49")
     If rngZelle.Value = 1 Then
        Worksheets("Spielabschnitt").Range("H" & Range("M2")).Value = rngZelle.Offset(, 6).Value
        Exit For
     End If
  Next rngZelle

  Application.CutCopyMode = False
For Each Blatt In ActiveWorkbook.Worksheets

If InStr(Blatt.Name, "Kopie") > 0 Then
Blatt.Tab.ColorIndex = 3
End If

Next Blatt
End Sub

Danke BoskoBiati,
funktioniert spitzenmäßig!!!!!!!!!!!!!!
Super miteinander verbunden!
(08.08.2017, 17:25)Gast 123 schrieb: [ -> ]Hoallo Phillip

ich bin nicht jeden Tag im Forum und melde mich noch, mal weil dir vielleicht -Vba Grundwissen- fehlt.

Einem CommandButton kannst du mit der rechten Maustaste ein Makro zuweisen. Genau das Makro wird ausgeführt!!
In meinem zuvor genannten Beispiel haettest du dem Button das Makro zuweisen müssen:  "Sub Button_BeiKlick"

Ein direktes zuweisen geht aber nur bei Standard Button, Nicht bei AktiveX Steuerelemente. Die haben einen eigenen Code!
Da kann man innerhalb des eigenen Codes auch wieder Makros aus normalen Modul Blaettern aufrufen.  wichtiger Unterschied:
Standard Button kannst du in mehreren Tabellen haben, und allen das gleiche Makro zuweisen!  Deshalb bevorzuge ich Standard Buttons!  

Inzwischen gibt es auch andere Lösungen, z.B. von Opa Edgar, schön zu sehen.

mfg Gast 123
Danke dass werde ich am WE auf jedem Fall noch mal testen!
(08.08.2017, 16:21)Steffl schrieb: [ -> ]Hallo Markus,


kann ich nicht nachvollziehen. Der zugewiesene Code steht doch unter Makroname.

Achso,
da oben steht das, danke für den Screen Shot!

Viele Grüße!
1 Button für mehrere  Makros

hab mal diverse Möglichkeiten aus dem Internet herauskopiert, aber bei mir funktioniert nicht eins.
Mag sein, dass es am Steuerelement liegt.
Danke noch mal für die vielen Antworten!!!!!!


 
Private Sub CommandButton1_Click() 
Call makro_1 
Call makro_2 
...... 
Call makro_n 
End Sub 

 
 -------------------------------------------------------
 
Sub StartMakro()
    Makroname 1
    Makroname 2
    Makroname 3
    Makroname 4
End Sub
 
 
 
Sub Makro3()
   
    Call Makro 1
    Call Makro 2
 
End Sub
 
 
 -----------------------------------------------------------------
 
  1. Private Sub cmdStart_click()
  2.    call Prozedur1
  3.    call Prozedur2
  4.    .
  5.    .
  6.    .
  7.    .
  8.    .
  9. End Sub
 
 
 ------------------------------
 
 
Sub Haupt()
 Call Makro_1
 Call Makro_2
End Sub




 
 
Hallo Maximus,

Sorrry das ich mich ein wenig über dich amüsiere, das ist nicht böse gemeint!  Ich vermute du bist Neulingi ich programmiere seit > 20 Jahren.  

Im Internet googlen ist sicher sinnvoll, das mache ich auch. Mit einem wichtigen Unterschied. Bei den meisten Codes erkenne ich die Befehlsstruktur und kann das Makro auf meine Wünsche umschreiben. Das setzt aber fundierte Kenntnisse voraus wie der Code überhaupt funktioniert. Wenn dieses Wissen fehlt tanzt du "zwischen den Stühlen" hast keinen vernünftigen Boden unter dir. Dann ist fremde Codes übernehmen reines Lotteriespiel! 

Im Klartext:  du kannst zu Hause nur die Bücher lesen die du im Schrank hast. Nicht die die Amazon oder Thali auf Lager sind!  (Internet)
Wenn du ein Beispiel findest mit 3 Makroaufrufen müssen auch 3 Makros mit genau diesem Namen in deinen Modulen sein!  Im zweifelsfall zum lernen schreibt man sich drei Makros, Sub Demo1, Sub Demo2, Sub Demo3  öffnet darin nur eine MsgBox mit "Hallo 1", Hallo 2, Hallo 3, nimmt ein Startmakro für den Button, und startet die drei Demos mal zum lernen. Dann kommst du hahinter wie Makros funktioneren. Anbei ein Beispiel:

Bei diesem Demo Programm entsteht unweigerlich ein Laufzeitfehler den ich absichtlich verursachte, damit du so erkennst was im Fehlerfall passiert. Der fehlerhafte Befehl wird bei "Debuggen" stets gelb markiert!  Du kannst kein Worksheet mit Select aktivieren das garnicht existiert!  Nur so, auch durch Fehler, lernst du VBA kennen.

Im Fehlerfall must du im Vba Editor im Menü Run auf Reset drücken!  Sonst kann kein Makro mehr starten!!  Alle blockiert!!

mfg Gast 123


Code:
'Demo Modul zum lernen

Sub Button_BeiKlick()
  Call Demo_1
  Call Demo_2
  Call Demo_3
  Sheets("unbekannt").Select
End Sub

Sub Demo_1()
  MsgBox "Hallo 1"
End Sub

Sub Demo_2()
  MsgBox "Hallo 2"
End Sub

Sub Demo_3()
  MsgBox "Hallo 3"
End Sub
Hallo,
hätte nochmal eine Verständnisfrage zu:
Wenn ich mit einem Steuerelement mehrere Makros in einem Modul ausführen möchte.
 

Beispiel:

Im Modul 1 befinden sich drei Makros: 
- Makro 1 mit dem Namen:  Markus
- Makro 2 mit dem Namen:  Michael
Makro 3 mit dem Namen:  Button_BeiKlick
Makro 3 soll dafür sorgen das Makro 1 und Makro2 hintereinander ausgeführt werden.
Sub Button_BeiKlick()
 Call
Markus
 Call
Michael
End Sub
 
Wenn ich mit rechter Maustaste auf mein Steuerelement gehe und dann auf Makro zuweisen, muss ich mich ja im Feld Makroname für einen Makronamen entscheiden, den ich dem Steuerelement zuordne. Welchen Makronamen nehme ich den jetzt von den dreien?


Markus
Michael
Button_BeiKlick

 
Oder kann ich unter Makroname Modul 1 schreiben und es werden alle drei Makros automatisch ausgeführt?
Oder ist es egal für welchen Makroname ich mich entscheide?
Vielen Dank und Gruss Markus
Hallo Markus

du hast sicher 4-5 Gaenge bei deinem Auto.  Hast du schon mal versucht auf der Autobahn bei  140Km den Rückwaertsgang  einzulegen??
Sollte man sicher nicht machen!!  Dein Getriebe hat ein -logisches System-, Makros sind ebenfalls logisch aufgebaut!!

Bei Ratgebern wie mir erkennst du den Sinn des Makros oft schon am Namen, denn den vergeben wir nicht grundlos!  "Sub Button_BeiKlick"  erklaert sich doch schon vom Text her wofür das gedacht ist.  Schlicht und einfach als Start Makro für einen Button! Sein Name verraet die Funktion.

Damit ist doch klar welches Makro du dem CommandButton zuweisen must.  Eine rein logische Überlegung .... 
Klar ist auch was dann innerhalb des Code passiert.  Wenn du da weitere Makros aufrufst werden sie nacheinander ausgeführt. Und zwar genau in der Reihenfolge, von oben nach unten, wie sie geschrieben wurden. (es sei denn du hast Sprungbefehle dazwischen mit:  GoTo xyz)

Steht als 1. Makro Markus wird Markus ausgeführt, staende dort Michael würde Michael zuerst ausgeführt.
Programm unterliegen einem einfachen logischen System!  Dafür sind sie in der Ausführung unglaublich schnell.

mfg  Gast 123
Hi Gast123,
deshalb hat es bei mir nicht funktioniert. Ich habe bei drei Makros immer den Namen des ersten Makro als Makroname zugewiesen. Deine Erklärung, dass Starter Makro, in dem Falle "Sub Button_BeiKlick" als Makroname zuzuweisen, ist für mich jetzt auch logisch! Bin ich nicht drauf gekommen! Werde ich gleich mal testen. Vielen Dank!!


Vielleicht kannst du mir noch ein paar Verständnisfragen beantworten, habe im Netz keine passenden Antworten gefunden:
Ich habe bei Excel die Möglichkeit, an drei Stellen ein VBA-Programm einzufügen:
-Arbeitsmappe
-Tabelle
-Modul
 
Zu Modul:
Wenn ich in ein Modul ein oder mehrere VBA-Programme einfüge, gilt dieses immer für ALLE Tabellen im Dokument.
Jedes VBA-Programm im Modul muss gestartet werden z.b. über ein Steuerelement.

 
Zu Tabelle:
Wenn ich in eine Tabelle ein oder mehrere VBA-Programme einfüge, gilt dieses immer NUR für die EINE Tabelle.
Starte ich das VBA-Programm in der Tabelle auch über ein Steuerelement?
Ich habe von jemand ein VBA-Programm für eine Tabelle bekommen, welches automatisch startet, woraus ich schlussfolgre, dass man kein Steuerelement braucht. Oder gibt es hier die Möglichkeit mit und ohne Steuerelement?

 
Zu Arbeitsmappe:
Dafür habe ich noch nie ein Programm gesehen. Wann speichert man ein VBA-Programm dort ab?
Wenn ich für die ganze Arbeitsmappe durch ein VBA-Programm eine Auswirkung erzielen möchte, kann ich dies doch erreichen, indem ich das VBA-Programm in ein Modul abspeichere, wodurch ja alle Tabellen der Arbeitsmappe angesprochen werden. Wofür dann was in die Arbeitsmappe speichern?



Danke schon mal im Voraus für deine Mühe!!
Gruß Markus

Seiten: 1 2 3