Sub prozedur mit Makro öffnen

Hallo Mitstreiter,

ich versuche unter MSOffice2013 derzeit folgendes (leider noch vergeblich):

Habe eine Sub prozedur erstellt und versuche diese mit einem Makro öffnen zu lassen.
Doch schon bei der Makroerstellung kann ich die Prozedur, die ich erstellt habe nicht auswählen, da diese in den vorgegebenen Prozeduren nicht beinhaltet ist.

Es geht um Folgende simple Prozedur:

Sub Zugangsberechtigung()

Dim strEingabe As String
Dim fml_status As Form

strEingabe = InputBox(„Bitte Anmeldenamen eingeben“, Environ(„UserName“))

If strEingabe = „Name“ Then
DoCmd.OpenForm „Formular“
Else
MsgBox „Zugriff verweigert!“
DoCmd.CloseDatabase
End If

End Sub

Wenn ich Sub in Function ändere, dann wird dieser Code in der Auflistung des Makros gefunden. Aber dann läuft der Code nicht mehr.

Hoffe ihr könnt mir helfen!!!
Wäre euch dankbar.

Gruß
Andreas

Hallo,

ich versuche unter MSOffice2013 derzeit folgendes (leider noch
vergeblich):

Habe eine Sub prozedur erstellt und versuche diese mit einem
Makro öffnen zu lassen.

WO ist diese Prozedur erstellt?

WARUM soll die Prozedur mir einem MAKRO „geöffnet“ (ausgeführt) werden?

WELCHES Makro (Makrobefehl) wird verwendet?

Doch schon bei der Makroerstellung kann ich die Prozedur, die
ich erstellt habe nicht auswählen, da diese in den
vorgegebenen Prozeduren nicht beinhaltet ist.

Mit Makros kann nur eine Funktion (Function) ausgeführt werden.

Es geht um Folgende simple Prozedur:

Sub Zugangsberechtigung()

Dim strEingabe As String
Dim fml_status As Form ’ für was ist diese Deklaration?

strEingabe = InputBox(„Bitte Anmeldenamen eingeben“,
Environ(„UserName“))

If strEingabe = „Name“ Then
DoCmd.OpenForm „Formular“
Else
MsgBox „Zugriff verweigert!“
DoCmd.CloseDatabase
End If

End Sub

Wenn ich Sub in Function ändere, dann wird dieser Code in der
Auflistung des Makros gefunden.

Ja, siehe oben…

Aber dann läuft der Code nicht mehr.

Was genau ist denn vorher gelaufen?
Was läuft jetzt GENAU nicht mehr? Gibt es Fehlermeldungen?

Statt Makros zu benutzen, kann ein solcher Code besser gleich in einer Ereignisprozedur eines geeigneten Ereignisses eingebaut werden.

Gruß
Franz,DF6GL

Hallo Andreas,

ich kenne mich leider mit Office2013 nicht aus bin noch bei 2003 bzw. 2010 im Beruf.

In welcher Anwendung nutzt Du denn das Makro  - in Excel?
Hast du mal die Prozedur im Schrittmodus abgearbeitet? Funktioniert die InputBox?
Bei StrEingabe steht „name“ oben ist „UserName“ und wo ist der Vegleich mit den erlaubten Werten ? Da scheint einiges zu fehlen?

Dann wäre meine Frage wie hast du wo die Sub erstellt? Normalerweise war es immer so das alle Prozeduren in einem Makro stehen und halt als SUB Endsub voneinander getrennt wurden. Glaube nicht das das in Office 2013 anders ist . Könnte aber sein?

Die Funktion liefert soweit ich weiss keine Rückgabewerte, deshalb funktioniert die gar nicht.
Viel Erfolg noch

Armin

In welcher Anwendung nutzt Du denn das Makro  - in Excel?

Access 2013

Hast du mal die Prozedur im Schrittmodus abgearbeitet?

Nein, nciht nötig. Manuell läuft das Makro einwandfrei.

Funktioniert die InputBox?

Ja

Bei StrEingabe steht „name“ oben ist „UserName“ und wo ist der
Vegleich mit den erlaubten Werten ? Da scheint einiges zu
fehlen?

Mittels UsernName wird der am System angemeldete User abgefragt.

Dann wäre meine Frage wie hast du wo die Sub erstellt?

Mit „Erstellen Makro“

Normalerweise war es immer so das alle Prozeduren in einem
Makro stehen und halt als SUB Endsub voneinander getrennt
wurden. Glaube nicht das das in Office 2013 anders ist .
Könnte aber sein?

Nein ,das ist noch gleich

Die Funktion liefert soweit ich weiss keine Rückgabewerte,
deshalb funktioniert die gar nicht.

Der am System angemeldete UserName wird mit der Eingabe verglichen.
Übereinstimmung --> Formular wird geöffnet
Keine Übereinstimmung --> Datenbank wird geschlossen.

WO ist diese Prozedur erstellt?

Als Modul

WARUM soll die Prozedur mir einem MAKRO „geöffnet“
(ausgeführt) werden?

Weil sie in der AutoExec stehen soll, damit die beim Öffnen der DB ausgeführt werden soll.

WELCHES Makro (Makrobefehl) wird verwendet?

Doch schon bei der Makroerstellung kann ich die Prozedur, die
ich erstellt habe nicht auswählen, da diese in den
vorgegebenen Prozeduren nicht beinhaltet ist.

Mit Makros kann nur eine Funktion (Function) ausgeführt
werden.

Das ist ja genau mein Problem.
Wie kann ich erreichen, dass diese Sub-Prozedur beim starten der DB ausgeführt wird?

Es geht um Folgende simple Prozedur:

Sub Zugangsberechtigung()

Dim strEingabe As String
Dim fml_status As Form ’ für was ist diese Deklaration?

strEingabe = InputBox(„Bitte Anmeldenamen eingeben“,
Environ(„UserName“))

If strEingabe = „Name“ Then
DoCmd.OpenForm „Formular“
Else
MsgBox „Zugriff verweigert!“
DoCmd.CloseDatabase
End If

End Sub

Was genau ist denn vorher gelaufen?

Das makro hat nach dem manuellen starten den angemeldeten „UserName“ mit der Eingabe verglichen und korrekt gehandelt.

Was läuft jetzt GENAU nicht mehr? Gibt es Fehlermeldungen?

Alles ist gut. Makro läuft. Mein Problem ist nur, dass ich das Makro beim Öffnen der DB automatisch ausführen lassen will. Dazu wollte ich es in die AutoExec einbauen.
Dann wird die Prozedur aber nicht mehr erkannt.

Statt Makros zu benutzen, kann ein solcher Code besser gleich
in einer Ereignisprozedur eines geeigneten Ereignisses
eingebaut werden.

Klingt gut. Aber das Ereignis ist das Öffnen der Datenbank.
Wo schreibe ich das dann rein`?

Gruß
Andreas

Hallo,

WO ist diese Prozedur erstellt?

Als Modul

Ich nehme jetzt an, es handelt sich dann um ein Standardmodul (Im Navi-Fenster unter Module) und kein Klassenmodul (z. B. Formularmodul)

WARUM soll die Prozedur mir einem MAKRO „geöffnet“
(ausgeführt) werden?

Weil sie in der AutoExec stehen soll, damit die beim Öffnen
der DB ausgeführt werden soll.

Ok, dieses Makro ist eines der beiden, die man verwenden kann :wink:))

Doch schon bei der Makroerstellung kann ich die Prozedur, die
ich erstellt habe nicht auswählen, da diese in den
vorgegebenen Prozeduren nicht beinhaltet ist.

Mit Makros kann nur eine Funktion (Function) ausgeführt
werden.

Das ist ja genau mein Problem.
Wie kann ich erreichen, dass diese Sub-Prozedur beim starten
der DB ausgeführt wird?

Niemand behauptet, dass es eine SUB sein MUSS, also mach eine Function daraus und deklariere die als PUBLIC…

Es geht um Folgende simple Prozedur:

Public Function Zugangsberechtigung()

Dim strEingabe As String
Dim fml_status As Form ’ für was ist diese Deklaration?

strEingabe = InputBox(„Bitte Anmeldenamen eingeben“,
Environ(„UserName“))

If strEingabe = „Name“ Then
DoCmd.OpenForm „Formular“
Else
MsgBox „Zugriff verweigert!“
DoCmd.CloseDatabase
End If
End Function

Was genau ist denn vorher gelaufen?

Das makro hat nach dem manuellen starten den angemeldeten
„UserName“ mit der Eingabe verglichen und korrekt gehandelt.

Das mag sein, ist das aber der Sinn und Zweck des Ganzen? Oder soll das eher eine Passwort-Abfrage werden?

Dazu wollte ich es in die AutoExec einbauen.

ok tu das und ruf die FUNKTION im Autoexec-Makro (AusführenCode) auf

Dann wird die Prozedur aber nicht mehr erkannt.

Statt Makros zu benutzen, kann ein solcher Code besser gleich
in einer Ereignisprozedur eines geeigneten Ereignisses
eingebaut werden.

Klingt gut. Aber das Ereignis ist das Öffnen der Datenbank.

Das Öffnen der DB hat an sich kein Ereignis… Ereignisse findet man in Formularen und Berichten (Abgesehen mal von den „Triggern“ in Tabellen und da auch nur in den neuesten A-Versionen)

Es ist möglich, das Formular „Formular“ als Startformular in den DB-Optionen zu definieren.

Dann kann der Code beim Open-Ereignis („Beim Öffnen“) ausgeführt werden. Entweder direkt in der Ereignisprozedur oder als Aufruf einer Public-Sub (!) oder Public-Funktion .

Sub Form_Open(Cancel as Integer)

Dim strEingabe As String
strEingabe = InputBox(„Bitte Anmeldenamen eingeben“,
Environ(„UserName“))

If strEingabe „Name“ Then
MsgBox „Zugriff verweigert!“
Cancel=true
End If

End Sub

oder als Prozedur-Aufruf:

Sub Form_Open(Cancel as Integer)
Zugangsberechtigung
End Sub

Gruß
Franz,DF6GL

PS:

Das makro hat nach dem manuellen starten den angemeldeten

:„UserName“ mit der Eingabe verglichen und korrekt gehandelt.

Das bezweifle ich.

Der eingegebene Name, der mit dem Windows-Anmeldenamen vorbesetzt(!) ist, wird mit dem Text „Name“ verglichen…

Wenn der eingegebene Name mit dem Anmeldnamen verglichen werden soll (was mir auch nicht einleuchtet, warum überhaupt), dann sollte das eher so lauten:

Sub Form\_Open(Cancel as Integer)

 Dim strEingabe As String
 strEingabe = InputBox("Bitte Anmeldenamen eingeben", "Bitte Ihren Anmeldenamen eingeben")

 If strEingabe Environ("UserName") Then
 MsgBox "Zugriff verweigert!"
 Cancel=true
 End If

 End Sub

Hallo Andreas,

wenn Du willst, dass Excel, Access, etc. ein Makro beim Öffnen der Datei starten, dann nimm AutoOpen, AutoNew, etc. (In Online-Hilfe unter „Auto-Makros“)

Sollte es Access sein, dann gibt es die Möglichkeit ein Start-Formular zu benennen (in Online-Hilfe unter „Start“)

Gruß
Harry

Hallo,

bevor sich mir noch weitere Haare sträuben,

verweise ich nochmal auf meine letzten beiden Postings, die vermutlich nicht gelesen wurden…

/t/sub-prozedur-mit-makro-oeffnen/7383760/7

Der Code vergleicht einen Inputbox-Eingabe-Text mit dem akt. Windows-Anmeldenamen…

Statt den Code im Form_Open-Ereignis eines „Start“-Formulares auszuführen, kann er auch als Public-Funktion (!) in einem Standardmodul (!!) eingesetzt werden, damit diese Public-Funktion über ein Makro mit Namen „AutoExec“ (!!!) aufgerufen werden kann (MakroBefehl: AusführenCode)

Alles Andere sind nur Spekulationen/Falschinformationen…

Gruß
Franz,DF6GL