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; Hallo liebe Forumsgemeinde! Bei all den kompetenten Antworten, die ich bisher gelesen habe, bin ich mir sicher, dass auch mir geholfen werden kann... 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?!


    Hallo liebe Forumsgemeinde!

    Bei all den kompetenten Antworten, die ich bisher gelesen habe, bin ich mir sicher, dass auch mir geholfen werden kann :)
    Folgendes Problem: Für eine Arbeitszeiterfassung würde ich gerne eine Exceltabelle anlegen, wobei sich jeder Mitarbeiter durch einen Mausklick an und abmelden können soll. Hierfür habe ich auch schon folgendes VBA-"Skript" im Netz gefunden.

    Sub AKTUELLEZEIT()
    Dim zeit As String
    zeit = Right(Now(), 8)

    ActiveCell.FormulaR1C1 = zeit
    Selection.NumberFormat = "hh:mm:ss"
    End Sub

    Allerdings stört mich daran, dass die Zeit in der ausgewählten Zelle (--> ActiveCell) ausgewiesen wird. Ich würde gerne fest bestimmen, in welcher Zelle die Zeit festgehalten werden soll, um dann daraufhin die Arbeitszeit berechnen zu können. (=Einloggzeit-Ausloggzeit)Ich will also zum Beispiel festlegen, dass die "Einstempelzeit" in Zelle C6 festgehalten wird. Kann mir jemand erklären, wie ich das hinbekomme? Ich muss eben nur wissen, was ich anstelle von "ActiveCell" schreiben muss...

    Ich hoffe ich habe mein Problem verständlich geschildert!

    MfG
    Uli
     
  2. maninweb
    maninweb MVP für Microsoft Excel
    Hi UK23...

    kannst statt ActiveCell auch folgendes verwenden...

    ThisWorkbook.Worksheets("DeineTabelle").Range("C6")....

    oder alternativ...

    ThisWorkbook.Worksheets("DeineTabelle").Cells(6,3)....

    Gruß
     
    maninweb, 26. Juli 2008
    #2
  3. UK23 Erfahrener User
    Hey maninweb!

    Super genauso hab ichs mir vorgestellt, läuft wie geschmiert :) Vielen Danke für die schnelle Hilfe!

    Gruß
    Uli
     
  4. UK23 Erfahrener User

    Makro in einer bestimmten Zelle ausführen?!

    Danke soweit,

    ich hätte nun eine anschließende Frage: Ist es möglich, das von maninweb erstellte VBA-Modul so umzuschreiben, dass man lediglich ein Mal den Button für die Anmeldezeit drücken kann, also nicht ausversehen ein zweites Mal drückt und somit die eigentliche Anmeldezeit löscht/mit einer neuen überschreibt?!

    Das wäre die Krönung :-D


    Außerdem habe ich noch ein weiteres Problemchen: Wie folgt habe ich eine laufende Uhr per Makro eingebunden:

    Option Explicit
    Public DaEt As Date

    Sub Zeitmakro()
    ThisWorkbook.Worksheets("Tabelle1").Range("A1") = Format(Time, "hh:mm:ss")
    DaEt = Now + TimeValue("00:00:01")
    Application.OnTime DaEt, "Zeitmakro"
    End Sub

    Funktioniert auch soweit, wenn ich das Makro ausführe. Leider läuft die Uhr bei erneutem öffnen der Arbeitsmappe nicht weiter, erst wenn ich das makro erneut ausführe. (Was ja nicht Sinn und Zweck der Sache ist) Wie bekomme ich es hin, dass die Uhr beim Öffnen der Mappe startet?!


    Gruß
    Uli
     
  5. maninweb
    maninweb MVP für Microsoft Excel
    Hi UK23...

    zur ersten Frage, Du kannst eine Zelle vorsehen, in der Du, sobald einmal gedrückt wurde, eine 1 hineingeschrieben wird.
    Dieses Feld fragst Du dann ab und verhinderst so ein zweites Drücken. Beispiel...

    Code:
    Sub AKTUELLEZEIT()
    
    ' Prüfen, ich nehme mal Zelle A1...
      
      If CLng(ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value) < 1 Then
      
    '   Da Du einen Wert schreibst, brauchst Du keine Formel, also statt FormulaRC eher Value
        
        ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value = 1
        ThisWorkbook.Worksheets("Tabelle1").Cells(3, 6).Value = Right(Now(), 8)
        ThisWorkbook.Worksheets("Tabelle1").Cells(3, 6).NumberFormat = "hh:mm:ss"
      
      Else
      
        MsgBox "Bereits eingetragen"
        
      End If
      
    End Sub
    
    Wenn Du eine Prozedur automatisch beim Öffen der Datei ausführen möchtest, kannst Du dies im entsprechenden Ereignis tun.
    Öffne das Codemodul zu "DieseArbeitsmappe" und kopieren den Code hier darein...
    Code:
    Private Sub Workbook_Open()
    
      Zeitmakro
    
    End Sub
    
    Gruß
     
    maninweb, 27. Juli 2008
    #5
  6. UK23 Erfahrener User
    Ich bin begeistert :-D Vielen, vielen Dank maninweb, ich glaub ich muss ab sofort VBA lernen, es ist faszinierend, was man alles machen kann :shock:
    Danke auch für deine gute Beschreibung, hat alles (fast) auf Anhieb funktioniert!
     
  7. UK23 Erfahrener User
    ich hätte da noch eine (hoffentlich) letzte, abshcließende Frage :roll: :
    Kann ich in den von maninweb beschriebenen Code (Sub AKTUELLEZEIT()) zusätzlich mit einbauen, dass bei einem Klick auf den Button die Datei gespeichert wird und zwar mit dem aktuellen Datum als Dateinamen?
    Alternativ möglich wäre auch noch, dass ein extra Button erstellt wird, mit dem dann die gewünschte Speicherfunktion ausgeführt werden kann (eben mit aktuellem Datum als Dateiname)

    Ich hoffe, ich belaste euch nicht übermäßig :-?

    Gruß
    Uli
     
  8. maninweb
    maninweb MVP für Microsoft Excel

    Makro in einer bestimmten Zelle ausführen?!

    Hi nochmal...

    hmm, wer nicht fragt, bleibt dumm. Insofern ist's keine Belastung, zumindestens für mich nicht. Hier ein Beispielcode...
    Code:
    Public Sub Beispiel()
    
      ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & Format(Date + Time, "DD.MM.YYYY-hh.mm.ss") & ".xls"
      
    End Sub
    
    Der Code hängt die Uhrzeit noch dran. Macht das Leben einfacher, so dass Du nicht prüfen musst, ob's die Datei schon gibt.

    Gruß
     
    maninweb, 28. Juli 2008
    #8
  9. miriki Erfahrener User
    Nur mal so als Tip, da ich genau das da auch öfters benutze: Es ist durchaus empfehlenswert, das Datum nicht nach deutschem, sondern nach amerikanischem Format zusammenzustellen.

    Durch die Anordnung Jahr-Monat-Tag läßt sich später eine bestimmte Datei in einem Wust von Dateien im Verzeichnis bedeutend leichter wiederfinden.

    Gruß, Michael
     
    miriki, 28. Juli 2008
    #9
  10. maninweb
    maninweb MVP für Microsoft Excel
    Hi miriki - stimmt :-) Gruß
     
    maninweb, 28. Juli 2008
    #10
  11. UK23 Erfahrener User
    Danke, auch das funktioniert bestens :)
     
  12. UK23 Erfahrener User
    ich bins nochmals... :roll:



    Dieses Skript funktioniert genauso, wie ich es haben möchte, allerdings würde ich es gerne etwas allgemeiner gestalten. Anstatt "Tabelle1" soll sich das Skript (wenn möglich) auf das aktuelle Tabellenblatt beziehen. Gibt es hierfür einen Code? (so in die richtung "ActiveSheet" anstatt "Tabelle1" o.Ä.?)

    Gruß
    Uli
     
  13. miriki Erfahrener User

    Makro in einer bestimmten Zelle ausführen?!

    Ja, das geht, mehr oder weniger flexibel.

    Ändere
    Code:
    Sub AKTUELLEZEIT()
    in
    Code:
    Sub AKTUELLEZEIT(wkb$,sht$)
    Füge am Anfang der Prozedur
    Code:
    dim w as workbook
    dim s as worksheet
    set w = workbooks(wkb)
    set s = w.worksheets(sht)
    ein. Das ist nicht unbedingt notwendig, erspart in der Folge aber etwas Tipparbeit und vermeidet dadurch auch Tippfehler. Und wenn Du nur im aktuellen Workbook arbeitest, kannst Du das Geraffel um wkb und w auch weglassen.

    Der Aufruf von
    Code:
    aktuellezeit
    ändert sich dann in z.B.
    Code:
    aktuellezeit thisworkbook.name, activesheet.name
    Damit wird dann der Name des Workbooks und des Worksheets an die Routine übergeben und kann dort verwendet werden.

    Eine ähnliche Methode wäre, es mit "with workbooks(wkb)" bzw. "with workbooks(wkb).worksheets(sht)" zu kapseln. Aber ich persönlich bin kein großer Freund von WITH.

    Dann ändere Zeilen wie
    Code:
    ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value = 1
    in
    Code:
    s.Cells(1, 1).Value = 1
    Bei der Gelegenheit:
    Code:
    ThisWorkbook.Worksheets("Tabelle1").Cells(3, 6).Value = Right(Now(), 8)
    Das läßt sich auch "stilvoller" als
    Code:
    ThisWorkbook.Worksheets("Tabelle1").Cells(3, 6).Value = Now() - Int(Now())
    schreiben. Ich bevorzuge dies, weil: Datums- und Zeit-Informationen sind numerische Werte. Deine Methode umgeht das, indem der Zeit-String genommen wird, aus dem der Datums-Teil abgeschnitten wird. Beim Einsetzen des Zeit-Strings in die Zelle ist Excel "intelligent" genug, den String wieder in das numerische Format zurück umzuwandeln. Aber dieses ganze Hin und Her ist unschön und kann ggf. auch mal schiefgehen.

    Just my $ 0,02... ;-)

    Gruß, Michael
     
    miriki, 30. Juli 2008
    #13
  14. UK23 Erfahrener User
    Hi Michael,



    Was genau muss ich da in meinem Skript ändern? Im Moment habe ich es wie folgt verändert:

    Code:
    Sub AKTUELLEZEIT(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(8, 8).Value = Now() - Int(Now())
       s.Cells(8, 8).NumberFormat = "hh:mm:ss"
       
     
      Else
     
        MsgBox "Bereits eingetragen!"
       
      End If
     
    End Sub
    
    Leider bekomme ich nach dieser Eingabe die Fehlermeldung: "Argument ist nicht optional!"

    Gruß
    Uli
     
  15. miriki Erfahrener User
    Irgendwo rufst Du ja die Routine "aktuellezeit" auf. Dort müßte es nach den Anpassungen auch zum Fehler kommen. Die Anpassungen selbst sehen, so auf den ersten Blick, ja völlig ok aus.

    Aber ich schrieb ja:
    Diese Änderung muß also noch gemacht werden.

    Ich gehe mal davon aus, daß die Routine "aktuellezeit" sich in einem Extra-Modul ("modul1" oder wie auch immer) befindet und der Aufruf aus einem Worksheet ("tabelle1" z.B.) heraus passiert.

    Nachdem Du die Routine in "modul1" angepaßt hast, mußt du jetzt noch den Aufruf im Source der "tabelle1" anpassen.

    Ähm, in der Hoffnung, jetzt nicht zu viel Verwirrung zu stiften, aber Du könntest ev. noch (totally untested):
    Code:
    Sub AKTUELLEZEIT(wkb$, sht$)
    ändern in
    Code:
    sub AKTUELLEZEIT(sht$, optional wkb$=thisworkbook.name)
    Der Aufruf der Routine müßte als 1. Parameter dann natürlich jetzt den Sheet-Namen bekommen. Als 2. kann, muß aber nicht, der Book-Name folgen. Wird der weggelassen, wird das aktuelle Book genommen. Leider geht das optional-Konstrukt nicht für den Sheet-Namen, wenn die Routine sich nicht auch innerhalb des Sheets befindet.

    Gruß, Michael
     
    miriki, 30. Juli 2008
    #15
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