Office: Wie verwende ich ein Makro, das Eingaben erfordert?

Helfe beim Thema Wie verwende ich ein Makro, das Eingaben erfordert? in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo - Habe ein Makro gefunden, das Osterdaten ausrechnet:Sub EasterDate(d, m, y) ... End SubWo muß ich den Code speichern, und wie geht das mit... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Krino, 9. August 2007.

  1. Krino Erfahrener User

    Wie verwende ich ein Makro, das Eingaben erfordert?


    Hallo -

    Habe ein Makro gefunden, das Osterdaten ausrechnet:
    • Sub EasterDate(d, m, y) ... End Sub
    Wo muß ich den Code speichern, und wie geht das mit der Ausführung?
     
  2. MAP
    Map User
    hört sich nach VIsual Basic an...

    Extras - Macros - Visual Basic Editor, links dann dein Tabellenblatt auswählen und die Funktion eintragen.

    Sicher bin ich mir nicht, da ich auch noch nich gross mit Makros gearbeitet habe, aber rein vom Code her scheint es ein Visual Basic Code zu sein.

    Grüsse
     
  3. schatzi Super-Moderator
    schatzi, 9. August 2007
    #3
  4. Krino Erfahrener User

    Wie verwende ich ein Makro, das Eingaben erfordert?

    Hallo Schatzi -

    Ich wollte aber gern wissen, wie ich so ein Makro mit drei Eingaben einsetze - in DIESE ARBEITSMAPPE? oder PERSONAL.XLS?? Und vor allem wie die Ausführung funktioniert, wenn das Makro Eingaben möchte.

    Ich verstehe auch die Klammer nicht (d, m, y) - das Jahr kann ich ja angeben, aber Tag und Monat möchte ich doch ausgerechnet bekommen :roll: ?

    Mit Formel geht es im übrigen prima, ich habe z. B. diese "gefunden":
    • =KÜRZEN(DATUM(jahr;3;56-REST(REST(jahr;19)*10,63+5;29))/7)*7+1
     
  5. schatzi Super-Moderator
    Hallo Krino!

    Poste doch mal das gesamte Makro, dann kann man daraus vielleicht mehr erkennen.
     
    schatzi, 9. August 2007
    #5
  6. Krino Erfahrener User
    Hallo Schatzi - Hier ist das gute Stück:
    Code:
    Sub EasterDate (d, m, y)
    
    ' EASTER DATE CALCULATION FOR YEARS 1583 TO 4099
    
    ' y is a 4 digit year 1583 to 4099
    ' d returns the day of the month of Easter
    ' m returns the month of Easter
    
    ' Easter Sunday is the Sunday following the Paschal Full Moon
    ' (PFM) date for the year
    
    ' This algorithm is an arithmetic interpretation of the 3 step
    ' Easter Dating Method developed by Ron Mallen 1985, as a vast
    ' improvement on the method described in the Common Prayer Book
    
    ' Because this algorithm is a direct translation of the
    ' official tables, it can be easily proved to be 100% correct
    
    ' This algorithm derives values by sequential inter-dependent
    ' calculations, so ... DO NOT MODIFY THE ORDER OF CALCULATIONS!
    
    ' The \ operator may be unfamiliar - it means integer division
    ' for example, 30 \ 7 = 4 (the remainder is ignored)
    
    ' All variables are integer data types
    
    ' It's free!  Please do not modify code or comments!
    ' ==========================================================
    
       Dim FirstDig, Remain19, temp    'intermediate results
       Dim tA, tB, tC, tD, tE          'table A to E results
    
       FirstDig = y \ 100              'first 2 digits of year
       Remain19 = y Mod 19             'remainder of year / 19
    
    ' calculate PFM date
       temp = (FirstDig - 15) \ 2 + 202 - 11 * Remain19
        
       Select Case FirstDig
          Case 21, 24, 25, 27 To 32, 34, 35, 38
             temp = temp - 1
          Case 33, 36, 37, 39, 40
             temp = temp - 2
       End Select
       temp = temp Mod 30
    
       tA = temp + 21
       If temp = 29 Then tA = tA - 1
       If (temp = 28 And Remain19 > 10) Then tA = tA - 1
    
    'find the next Sunday
       tB = (tA - 19) Mod 7
        
       tC = (40 - FirstDig) Mod 4
       If tC = 3 Then tC = tC + 1
       If tC > 1 Then tC = tC + 1
            
       temp = y Mod 100
       tD = (temp + temp \ 4) Mod 7
        
       tE = ((20 - tB - tC - tD) Mod 7) + 1
       d = tA + tE
    
    'return the date
       If d > 31 Then
          d = d - 31
          m = 4
       Else
          m = 3
       End If
    
    End Sub
    
    
     
  7. schatzi Super-Moderator
    Hallo Krino!

    Mit dem Makro kannst du nur in VBA arbeiten, d.h. die Eingabe erfolgt über VBA, ebenso die Ausgabe.
    Aber man kann den Code in eine benutzerdefinierte Funktion umwandeln:
    Code:
    Public Function EasterDate(y As Integer)
    
    ' EASTER DATE CALCULATION FOR YEARS 1583 TO 4099
    
    ' y is a 4 digit year 1583 to 4099
    ' ==========================================================
    Dim d, m
       Dim FirstDig, Remain19, temp    'intermediate results
       Dim tA, tB, tC, tD, tE          'table A to E results
       FirstDig = y \ 100              'first 2 digits of year
       Remain19 = y Mod 19             'remainder of year / 19
    ' calculate PFM date
       temp = (FirstDig - 15) \ 2 + 202 - 11 * Remain19
       Select Case FirstDig
          Case 21, 24, 25, 27 To 32, 34, 35, 38
             temp = temp - 1
          Case 33, 36, 37, 39, 40
             temp = temp - 2
       End Select
       temp = temp Mod 30
       tA = temp + 21
       If temp = 29 Then tA = tA - 1
       If (temp = 28 And Remain19 > 10) Then tA = tA - 1
    'find the next Sunday
       tB = (tA - 19) Mod 7
       tC = (40 - FirstDig) Mod 4
       If tC = 3 Then tC = tC + 1
       If tC > 1 Then tC = tC + 1
       temp = y Mod 100
       tD = (temp + temp \ 4) Mod 7
       tE = ((20 - tB - tC - tD) Mod 7) + 1
       d = tA + tE
    'return the date
       If d > 31 Then
          d = d - 31
          m = 4
       Else
          m = 3
       End If
    EasterDate = CDate(d & "." & m & "." & y)
    End Function
    Der Code muss in ein Modul:
    Im VBA-Editor > Menü Einfügen > Modul

    Der Aufruf erfolgt dann wie über eine normale Funktion:

    =easterdate(2000)
    ergibt
    23.04.2000

    Verändert habe ich nur die Titel- und die Schlusszeile.
    Eingefügt habe ich die vorletzte Zeile und die Zeile
    Dim d, m
     
    schatzi, 9. August 2007
    #7
  8. Krino Erfahrener User

    Wie verwende ich ein Makro, das Eingaben erfordert?

    Hallo Schatzi -

    Danke, so hatte ich mir das vorgestellt! Ich wußte halt nur nicht mehr die genaue Syntax für benutzerdefinierte Funktionen.

    Es geht wohl nur so, daß die Funktion an eine bestimmte Mappe gebunden bleibt, oder? Eigentlich wollte ich sie global zur Verfügung haben, aber das klappt bislang nicht.

    Deine vorletzte Zeile soll vermutlich eine formatierte Ausgabe bewirken. Ich kriege trotzdem nur eine fortlaufende Zahl, aber das ist ja kein großes Problem.
     
  9. schatzi Super-Moderator
    Hallo Krino!

    Für die globale Einbindung schau mal hier:
    http://www.office-loesung.de/ftopic71262_0_0_asc.php
    Nein, das ist lediglich der stümperhafte Versuch aus drei Zahlen d, m, y ein für Excel verständliches Datum zu basteln...
    Das geht bestimmt auch eleganter, aber ich hab' mein schlaues Buch nicht hier.
    Wie heißt es so schön: Hauptsache es funktioniert!
     
    schatzi, 9. August 2007
    #9
  10. Krino Erfahrener User
    Osterformel

    Hallo Schatzi -

    Dankeschön noch mal! Einbindung als AddIn hat auch geklappt. Na dann: Frohe Ostern! ;-)
     
  11. Krino Erfahrener User
    Noch eine kleine Nachfrage.

    Habe meine Osterfunktion so modifiziert, daß einerseits auch Daten ausgegeben werden, die von Excel nicht im Datumsformat verarbeitet werden können (also "kleiner" 1900) und andererseits "Fehler" ausgegeben wird, wenn man Jahreszahlen eingibt, für die die Osterformel aus kalendertechnischen bzw. astronomischen Gründen nicht mehr zuständig ist (also "kleiner" 1582 oder "größer" 4099).
    Code:
    Public Function Ostern(y As Integer)
    
    ' EASTER DATE CALCULATION FOR YEARS 1583 TO 4099
    
    ' y is a 4 digit year 1583 to 4099
    ' ==========================================================
    Dim d, m
       Dim FirstDig, Remain19, temp    'intermediate results
       Dim tA, tB, tC, tD, tE          'table A to E results
       FirstDig = y \ 100              'first 2 digits of year
       Remain19 = y Mod 19             'remainder of year / 19
    ' calculate PFM date
       temp = (FirstDig - 15) \ 2 + 202 - 11 * Remain19
       Select Case FirstDig
          Case 21, 24, 25, 27 To 32, 34, 35, 38
             temp = temp - 1
          Case 33, 36, 37, 39, 40
             temp = temp - 2
       End Select
       temp = temp Mod 30
       tA = temp + 21
       If temp = 29 Then tA = tA - 1
       If (temp = 28 And Remain19 > 10) Then tA = tA - 1
    'find the next Sunday
       tB = (tA - 19) Mod 7
       tC = (40 - FirstDig) Mod 4
       If tC = 3 Then tC = tC + 1
       If tC > 1 Then tC = tC + 1
       temp = y Mod 100
       tD = (temp + temp \ 4) Mod 7
       tE = ((20 - tB - tC - tD) Mod 7) + 1
       d = tA + tE
    'return the date
       If d > 31 Then
          d = d - 31
          m = 4
       Else
          m = 3
       End If
       '**************** UM DIESEN TEIL GEHT ES ******************
       If y "kleinergleich" 1582 Or y "größer" 4099 Then
          Ostern = "Fehler"
       Else
          If y >= 1900 Then
             Ostern = CDate(d & "." & m & "." & y)
          Else
             Ostern = d & "." & m & "." & y
          End If
       End If
       '**************** UM DIESEN TEIL GEHT ES ******************
    End Function
    Was ich nicht verstehe:
    Ostern(32767) oder kleiner ergibt "Fehler" (soll es auch).
    Ostern(32768) oder größer ergibt #ZAHL!.
    Warum??
     
  12. schatzi Super-Moderator
    Du hast offensichtlich vor, sehr lange zu leben, oder warum interessiert dich der Ostersonntag des Jahres 32768?? :-D :-D

    Die Fehlermeldung kommt wohl, weil y als Integer deklariert ist.
    Der Integerbereich geht von -32768 bis +32767.
    Daher müsstest du wohl für spätere Jahre y als Long deklarieren.

    Aber dann besorge dir eine gute Faltencreme... :lol:
     
    schatzi, 10. August 2007
    #12
  13. Krino Erfahrener User

    Wie verwende ich ein Makro, das Eingaben erfordert?

    Vielen Dank Schatzi -

    Vielen Dank für die simple Erklärung - ich dachte nur daß mit meinem Code irgend etwas nicht stimmt. Das läßt mir dann keine Ruhe....

    Bin dann mal weg, zur Apotheke :lol: :lol: :lol:
     
Thema:

Wie verwende ich ein Makro, das Eingaben erfordert?

Die Seite wird geladen...
  1. Wie verwende ich ein Makro, das Eingaben erfordert? - Similar Threads - verwende Makro Eingaben

  2. "Eigene"excel-Funktion innerhalb einer Sub verwenden

    in Microsoft Excel Hilfe
    "Eigene"excel-Funktion innerhalb einer Sub verwenden: Hallo, ich möchte innerhalb einer Sub eine Berechnung mittels einer selbst erstellten Funktion durchführen. Wie kann ich die Funktion aufrufen? Grüße Reinhard Beispiel zum Verständnis Function...
  3. Funktion Filter variabel verwenden

    in Microsoft Excel Hilfe
    Funktion Filter variabel verwenden: Hallo zusammen, leider bin ich noch mit den FILTER Funktionen zu unerfahren, als dass ich es ohne Eure Hilfe hin bekomme. Ich tüftel schon seit drei Tagen herum.:confused: Ich möchte in R2 einen...
  4. Zwei verschiedene Absatzformate für Nummerierungen verwenden

    in Microsoft Word Hilfe
    Zwei verschiedene Absatzformate für Nummerierungen verwenden: Huhu, ich würde gerne zwei Absatzformate für Nummerierungen definieren, die sich im Layout unterscheiden, aber trotzdem (auch zwischen Wechsel des Formats) weiterzählen. Ich bin leider...
  5. WENN mit ODER und UND verwenden

    in Microsoft Excel Hilfe
    WENN mit ODER und UND verwenden: Hallo zusammen, ich habe hier eine für mich kniffelige Aufgabe: Ich möchte eine WENN-Funktion mit einer ODER und einer UND-Funktion verwenden. Ich habe drei Bedingungsfelder: J33 J34 K36 J33...
  6. Verwenden einer Sprachausgabe, um ein Makro in Word zu erstellen

    in Microsoft Word Tutorials
    Verwenden einer Sprachausgabe, um ein Makro in Word zu erstellen: Verwenden einer Sprachausgabe, um ein Makro in Word zu erstellen Word für Microsoft 365 Word 2019 Word 2016 Mehr... Weniger...
  7. VBA: Variable innerhalb Makro verwenden?

    in Microsoft Excel Hilfe
    VBA: Variable innerhalb Makro verwenden?: Hallo Freunde, ich habe folgendes Problem: Sub TestMakro() Dim Wert1 As String Dim Wert2 As String Dim Wert3 As String Dim Wert4 As String Dim Wert5 As String Wert1 = Range("G2").Value Wert2 =...
  8. Autofilter trotz Blattschutz verwenden

    in Microsoft Excel Hilfe
    Autofilter trotz Blattschutz verwenden: Hallo Ihr Spezialisten, ich komm wieder nicht weiter. Ich habe zwei Makros gespeichert. Das erste zeigt mit über dem Autofilter alle Zeilen die in Spalte Menge einen Wert haben (>1,00). Das zweite...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden