Office: Makro in einer bestimmten Zelle ausführen?!

Helfe beim Thema Makro in einer bestimmten Zelle ausführen?! in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Irgendwie hab ich das dumpfe Gefühl, etwas grundlegend falsch zu machen :) Du meinst mit "Routine" den Code in den Modulen oder? Bei mir stehen die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von UK23, 25. Juli 2008.

  1. UK23 Erfahrener User

    Makro in einer bestimmten Zelle ausführen?!


    Irgendwie hab ich das dumpfe Gefühl, etwas grundlegend falsch zu machen :) Du meinst mit "Routine" den Code in den Modulen oder? Bei mir stehen die ganzen Skripte nur in den Modulen, die Worksheets, bzw. Worbook sind leer...!??!?!
     
  2. miriki Erfahrener User
    Die Bezeichnung "Routine" ist etwas allgemeingültiger, als jedesmal zwischen "Sub" oder "Function" zu unterscheiden. Diese "Routinen" können in den Modulen stehen, die direkt zu den Tabellen (Worksheets) gehören, aber auch in eigenständigen Modulen, die nicht direkt an die Tabellen gebunden sind.

    In den Tabellen-Modulen stehen i.a. nur die direkt auf Ereignisse reagierenden Routinen, wie z.B. Button-Klicks. In den Modulen dagegen stehen "Hilfs"-Routinen, die von den Ereignis-Routinen aufgerufen werden. Dort sind sie (sofern nicht "private" deklariert) global verfügbar, was verhindert, daß man sie für jede Tabelle in den Source aufnehmen muß, wo sie benötigt werden.

    Ähm... Irgendwo muß doch "aktuellezeit" aufgerufen werden... Entweder direkt oder indirekt, aber doch immer aufgrund eines Ereignisses, das in einem Worksheet (z.B. Button) ausgelöst wird.

    Also grob so:

    Code:
    Tabelle1
    ---------
    ButtonClick()
      activesheet.cells(1,1) = aktuellezeit()
    
    Modul1
    ------
    AktuelleZeit() as Date
      r = now()
      aktuellezeit = r
    Wobei "indirekt" auch so aussehen könnte:

    Code:
    Tabelle1
    ---------
    ButtonClick()
      activesheet.cells(1,1) = differenzberechnung(dateserial(1966,3,20))
    
    Modul1
    ------
    AktuelleZeit() as Date
      r = now()
      aktuellezeit = r
    
    DifferenzBerechnung(altezeit as Date) as Date
      r = aktuellezeit() - altezeit
      differenzberechnung = r
    Im 2. Beispiel wird "aktuellezeit" nicht direkt aus dem Worksheet-Source aufgerufen, sondern nur indirekt innerhalb des Moduls über die Funktion "differenzberechnung". Der ursprüngliche Auslöser für den Aufruf von "aktuellezeit" ist und bleibt aber der Button-Klick in Tabelle1.

    Und den Namen des Blatts mußt Du vom "Auslöser" aus an die nächste Routine weitergeben. Diese muß den Parameter dann ggf. wieder an die nächste Routine weitergeben, bis er dort angekommen ist, wo er benötigt wird. Das hat 'n bißchen was von "stille Post", nur daß hier das "falsch hören" weitestgehend ausgeschlossen ist.

    Gruß, Michael
     
    miriki, 31. Juli 2008
    #17
  3. UK23 Erfahrener User
    aaah, ich glaub ich sehe dank dir etwas Licht am Ende des Tunnels :-D
    Mein Modul1 sieht nun so aus:

    Code:
    Sub StartVM(wkb$, sht$)
    
    Dim w As Workbook
    Dim s As Worksheet
    Set w = Workbooks(wkb)
    Set s = w.Worksheets(sht)
     
      If CLng(s.Cells(20, 1).Value) < 1 Then
     
    
       s.Cells(20, 1).Value = 1
       s.Cells(9, 8).Value = Now() - Int(Now())
       s.Cells(9, 8).NumberFormat = "hh:mm:ss"
       
     
      Else
     
        MsgBox "Sie haben sich bereits vormittags eingestempelt!"
       
      End If
     
    End Sub
    (wobei aktuelle Zeit nun StartVM() heißt!)

    Der Code im Tabellenblatt lautet:

    Code:
    Sub StartVM()
    
    ActiveSheet.Cells(9, 8) = StartVM(ThisWorkbook.Verzeichnis, ActiveSheet.Bauer)
    End Sub
    
    , wobei ich allerdings eine Fehlermeldung erhalte ("Fehler beim kompilieren - Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft!". Zumindest hab ich jetzt - so glaube ich - das Prinzip, das du mit Routine meintest, verstanden. Wenn du mir jetzt noch sagen kannst, was ich am Code des Tabellenblattes (sheets) ändern muss, dann sollte es funktionieren . :-) Jedenfalls danke ich dir schonmal soweit für deine/eure große Mühe!!!

    Gruß
    Uli

    Ach ja, vielleicht noch als Ergänzung: Der Auslöser von StartVM ist kein CommandButon, sondern eine Schaltfläche (für Formulare). Wäre dies einfacher/besser mit einem CommandButton?
    Wenn ich es mit einem CommandButton versuche kommt die selbe Meldung bei folgendem Code:
    Code:
    Private Sub CommandButton2_Click()
    ActiveSheet.Cells(1, 1) = StartVM(ThisWorkbook.Verzeichnis, ActiveSheet.Bauer)
    End Sub
     
  4. miriki Erfahrener User

    Makro in einer bestimmten Zelle ausführen?!

    Ähm, naja... Ich würde jetzt auch nicht wissen, was ".Verzeichnis" oder ".Bauer" für Eigenschaften sind. Und während ich noch die Möglichkeit habe, nachzufragen, ist Excel zickig genug, das einfach stur anzumeckern. ;-)

    Ich tippe mal, Du hast die Namen des Workbooks bzw. Worksheets genommen, und das ".Name" damit ersetzt. Aber das brauchtest du gar nicht. Wenn Du "Worksheet.Name" im Source hast, ersetzt Excel zur Laufzeit das durch "Bauer", falls das der Name des Tabellenblatts ist.

    Gruß, Michael
     
  5. miriki Erfahrener User
    Hmmm... Das ist wohl viel Geschmackssache. Da ich die Teile aus der "Steuerelement-Toolbox" auch von Access her schon immer gewohnt war, benutz ich die in Excel auch weiterhin. Mir scheinen sie auch von den Möglichkeiten (Eigenschaften) bedeutend flexibler zu sein, als die aus der "Formular" Symbolleiste. Einfache Buttons machen aber wohl nicht wirklich den großen Unterschied.

    Gruß, Michael
     
  6. UK23 Erfahrener User
    Hi Michael,

    ich will echt nicht nerven, sorry, aber selbst wenn ich den Code mit .name lasse, bekomme ich die selbe Fehlermeldung. ("Fehler beim kompilieren - Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft!")
    Mein Code im Modul1 ist nun also:

    Code:
    Sub StartVM(wkb$, sht$)
    
    Dim w As Workbook
    Dim s As Worksheet
    Set w = Workbooks(wkb)
    Set s = w.Worksheets(sht)
     
      If CLng(s.Cells(20, 1).Value) < 1 Then
     
    
       s.Cells(20, 1).Value = 1
       s.Cells(9, 8).Value = Now() - Int(Now())
       s.Cells(9, 8).NumberFormat = "hh:mm:ss"
       
     
      Else
     
        MsgBox "Sie haben sich bereits vormittags eingestempelt!"
       
      End If
     
    End Sub
    Der Code im Tabelleblatt "Verzeichnis" lautet:
    Code:
    Private Sub CommandButton2_Click()
    ActiveSheet.Cells(9, 8) = StartVM(ThisWorkbook.name, ActiveSheet.name)
    End Sub
    Was ist falsch?!?
    In der Hoffnung, dir nicht allzu sehr auf die Nerven zu gehen...
    Uli
     
  7. UK23 Erfahrener User
    Hi Michael,

    ich will echt nicht nerven, sorry, aber selbst wenn ich den Code mit .name lasse, bekomme ich die selbe Fehlermeldung. ("Fehler beim kompilieren - Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft!")
    Mein Code im Modul1 ist nun also:

    Code:
    Sub StartVM(wkb$, sht$)
    
    Dim w As Workbook
    Dim s As Worksheet
    Set w = Workbooks(wkb)
    Set s = w.Worksheets(sht)
     
      If CLng(s.Cells(20, 1).Value) < 1 Then
     
    
       s.Cells(20, 1).Value = 1
       s.Cells(9, 8).Value = Now() - Int(Now())
       s.Cells(9, 8).NumberFormat = "hh:mm:ss"
       
     
      Else
     
        MsgBox "Sie haben sich bereits vormittags eingestempelt!"
       
      End If
     
    End Sub
    Der Code im Tabelleblatt "Verzeichnis" lautet:
    Code:
    Private Sub CommandButton2_Click()
    ActiveSheet.Cells(9, 8) = StartVM(ThisWorkbook.name, ActiveSheet.name)
    End Sub
    Was ist falsch?!?
    In der Hoffnung, dir nicht allzu sehr auf die Nerven zu gehen...
    Uli
     
  8. schatzi Super-Moderator

    Makro in einer bestimmten Zelle ausführen?!

    Hallo!
    Code:
    Private Sub CommandButton2_Click()
    ActiveSheet.Cells(9, 8) = StartVM(ThisWorkbook.name, ActiveSheet.name)
    End Sub
    Diese Zeile macht keinen Sinn, weil eine Sub keinen Wert zurückliefert, der in diese Zelle geschrieben werden könnte. Das meint Excel mit der "ungültigen Zuweisung".
    Probier's mal einfach mit
    Code:
    Private Sub CommandButton2_Click()
    StartVM(ThisWorkbook.name, ActiveSheet.name)
    End Sub
     
    schatzi, 4. August 2008
    #23
  9. UK23 Erfahrener User
    Hallo schatzi,

    bei folgendem Code
    Code:
    
    Sub CommandButton2_Click()
    StartVM(ThisWorkbook.Name, ActiveSheet.Name)
    End Sub
    
    
    
    erhalte ich die Meldung: "Fehler beim Kompilieren: Erwartet : =" oder bzw. und "Fehler beim Kompilieren: Syntaxfehler"...

    Muss ich nicht excel noch sagen, was es mit diesem "StartVM(...)" machen soll?

    Gruß
    Uli
     
  10. schatzi Super-Moderator
    Uuups...war schon spät...

    StartVM ThisWorkbook.Name, ActiveSheet.Name
    oder
    Call StartVM(ThisWorkbook.Name, ActiveSheet.Name)
     
    schatzi, 4. August 2008
    #25
  11. UK23 Erfahrener User
    Ich bin der letzte, der sich beschweren wird :lol:

    Aber jetzt funktioniert es!!! Vielen, Vielen Dank an euch alle! Besonders maninweb, miriki und schatzi! Solche Foren, wo einem wirklich geduldig und vor allem kompetent weitergeholfen wird, sind selten! MEIN LOB!
    Ich hoffe, eure Arbeit etwas unterstützen zu können, indem ich einfachere Fragen anderer User zu beantworten versuche...(sofern mein beschränkter Excel-Horizont ausreicht... :-D )
    In diesem Sinne nochmals Dankeschön!

    Gruß
    Uli
     
  12. miriki Erfahrener User
    Nein, in diesem Fall nicht. Es gibt grundsätzlich 2 Arten von Routinen, die man aufrufen kann:

    a) SUB: Hier wird "nur" eine Routine durchlaufen, die etwas erledigt. Danach geht's im Hauptprogramm weiter

    b) FUNCTION: Diese Dinger geben einen Wert zurück. Die Hauptaufgabe ist also weniger das Erledigen einer Aufgabe, als Vielmehr das Berechnen eines Ergebnisses.

    In Deinem Fall wird zwar auch ein Ergebnis berechnet. Die Routine erledigt aber auch schon die Aufgabe, das Ergebnis in cells(9,8) zu schreiben. Danach ist die Rückgabe eines Ergebnisses nicht mehr notwendig. Denn: Was soll denn dann noch mit dem Rückgabewert passieren? Er steht doch eh schon dort, wo er hin soll.

    Gruß, Michael
     
Thema:

Makro in einer bestimmten Zelle ausführen?!

Die Seite wird geladen...
  1. Makro in einer bestimmten Zelle ausführen?! - Similar Threads - Makro bestimmten Zelle

  2. Makro starten, wenn Wert einer bestimmten Zelle sich durch Formel ändert

    in Microsoft Excel Hilfe
    Makro starten, wenn Wert einer bestimmten Zelle sich durch Formel ändert: Hallo, ich habe schon eine Stunde im Netz herum gesucht und finde keine befriedigende Lösung für folgendes Problem: Es soll automatisch ein Makro gestartet werden, wenn sich der Wert einer...
  3. Per Makro bestimmte Zellen löschen

    in Microsoft Excel Hilfe
    Per Makro bestimmte Zellen löschen: Guten Abend zusammen Ich habe eine Excel-Tabelle, in welcher in den Spalten D bis G jeweils ein "x" pro Zeile stehen kann. Nun möchte ich in allen Zeilen mit einem "x" jeweils jene 3 Zellen,...
  4. Suchen und Ersetzen per Makro mit Wert einer bestimmten Zelle

    in Microsoft Excel Hilfe
    Suchen und Ersetzen per Makro mit Wert einer bestimmten Zelle: Hallo zusammen, kann ich in einem Blatt über ein Makro alle bisherigen Werte (z.B."xxx") durch einen neuen Wert ersetzen, der in einer bestimmten Zelle b2 steht (z.B. "yyy") Vielen Dank für einen...
  5. Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

    in Microsoft Excel Hilfe
    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben: Hallo zusammen, da ich ein absoluter Neuling im VBA-Editor in Excel bin, möchte ich hier um Hilfe bitten. Mein Problem besteht darin, dass ich einzelne Zellen in Tabellenblättern nur für...
  6. Makro das Zellen bei einem bestimmten Wert entsperrt

    in Microsoft Excel Hilfe
    Makro das Zellen bei einem bestimmten Wert entsperrt: Hallo, ich habe eine Tabelle, bei der die Zellen A1:A3 nicht gesperrt sind. Ich möchte ein Makro schreiben, was folgendes bewirkt: Wenn in A1 das Produkt der Zellen A2 und A3 geschrieben wird,...
  7. (Makro) Bestimmte Zellen auswählen und kopieren

    in Microsoft Excel Hilfe
    (Makro) Bestimmte Zellen auswählen und kopieren: Hi, ich hänge etwas in der Luft, da mir die zündende Idee fehlt. Ich möchte in einer Tabelle die beschriebenen Zellen, per Makro auswählen lassen und in eine neue Mappe kopieren....
  8. Zellen mit bestimmter Formatierung mit Makro zählen

    in Microsoft Excel Hilfe
    Zellen mit bestimmter Formatierung mit Makro zählen: Hallo, wir haben im Büro einen Urlaubsplaner in Excel realisiert. Das heisst, eine einfaches Arbeitsblatt mit einem Kalender. Jeder der Kollegen markiert seine Urlaubstage mit seiner Farbe....
  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