Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

  Makro in einer bestimmten Zelle ausführen?!
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 30.07.2008, 14:14 Nach oben

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...!??!?!
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 31.07.2008, 08:00 Nach oben

UK23 hat Folgendes geschrieben:
Du meinst mit "Routine" den Code in den Modulen oder?

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.

Zitat:
die Worksheets, bzw. Worbook sind leer...!??!?!

Ä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
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 31.07.2008, 15:29 Nach oben

aaah, ich glaub ich sehe dank dir etwas Licht am Ende des Tunnels Very Happy
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 . Smile 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
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 01.08.2008, 07:26 Nach oben

UK23 hat Folgendes geschrieben:
Code:
ActiveSheet.Cells(1, 1) = StartVM(ThisWorkbook.Verzeichnis, ActiveSheet.Bauer)

Ä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. Wink

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
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 01.08.2008, 07:44 Nach oben

UK23 hat Folgendes geschrieben:
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?

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
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 03.08.2008, 23:32 Nach oben

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
Benutzer-Profile anzeigenPrivate Nachricht senden
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 03.08.2008, 23:33 Nach oben

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
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5572

BeitragVerfasst am: 04.08.2008, 00:21 Nach oben

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

_________________

Viele Grüße vom Schatzi

------------------------
Dies ist meine Signatur und sie trägt eigentlich nichts zur Lösung deines Problems bei. Sollte sie es dennoch tun, dann bist du definitiv im falschen Forum...Image
Ein Feedback zum ursprünglichen Problem wäre trotzdem nett!
Windows XP, Office2000, Office2007
Benutzer-Profile anzeigenPrivate Nachricht senden
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 04.08.2008, 09:10 Nach oben

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
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5572

BeitragVerfasst am: 04.08.2008, 09:49 Nach oben

Uuups...war schon spät...

StartVM ThisWorkbook.Name, ActiveSheet.Name
oder
Call StartVM(ThisWorkbook.Name, ActiveSheet.Name)

_________________

Viele Grüße vom Schatzi

------------------------
Dies ist meine Signatur und sie trägt eigentlich nichts zur Lösung deines Problems bei. Sollte sie es dennoch tun, dann bist du definitiv im falschen Forum...Image
Ein Feedback zum ursprünglichen Problem wäre trotzdem nett!
Windows XP, Office2000, Office2007
Benutzer-Profile anzeigenPrivate Nachricht senden
UK23
Newbie
Newbie


Anmeldedatum: 25.07.2008
Beiträge: 14

BeitragVerfasst am: 04.08.2008, 10:04 Nach oben

Ich bin der letzte, der sich beschweren wird Laughing

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... Very Happy )
In diesem Sinne nochmals Dankeschön!

Gruß
Uli
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 303
Wohnort: Kiel

BeitragVerfasst am: 04.08.2008, 10:09 Nach oben

UK23 hat Folgendes geschrieben:
Muss ich nicht excel noch sagen, was es mit diesem "StartVM(...)" machen soll?

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
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen


Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Anzahl in einer Spalte Herfra Microsoft Excel Hilfe 1 08.09.2008, 08:48 Letzten Beitrag anzeigen
Keine neuen Beiträge [Excel 2003] Formel: Leere Zelle als ... Sniper Microsoft Excel Hilfe 2 06.09.2008, 13:23 Letzten Beitrag anzeigen
Keine neuen Beiträge Makro gesucht Zeile kopieren und in j... philipp.geyer Microsoft Excel Hilfe 4 05.09.2008, 15:59 Letzten Beitrag anzeigen
Keine neuen Beiträge Text einer Zelle in drei Zellen aufte... Viktoria Microsoft Excel Hilfe 2 04.09.2008, 13:53 Letzten Beitrag anzeigen
Keine neuen Beiträge Makro das email loescht stom Microsoft Outlook Hilfe 0 03.09.2008, 13:20 Letzten Beitrag anzeigen


 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de