Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Privat Sub vs. Sup

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Privat Sub vs. Sup (9993 mal gelesen)
Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



Sehen Sie sich das Profil von Bernd P an!   Senden Sie eine Private Message an Bernd P  Schreiben Sie einen Gästebucheintrag für Bernd P

Beiträge: 3358
Registriert: 07.06.2001

erstellt am: 08. Sep. 2006 08:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi

Mir ist aufgefallen das es 2 Verschieden Befehlsaufrufe in Excel gibt. Privat Sub und Sub

Was ist der Unterschied zwischen den 2?
Hintergrund ist das ich mit Makroaufzeichnung diverse Makros aufzeichne, diese funktionieren unter Sub nicht aber unter Privat Sub.

------------------
"Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark  Bernd P.
Bitte Supportangaben eintragen, warum siehst du hier

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 08. Sep. 2006 09:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Meine Meinung: unterstützt von wer-weiß-was 

Sub = Public Sub
Private Sub: Variablen, Anweisungen usw. sind nur innerhalb dieser Sub zu sehen, von außerhalb kann man nicht drauf zugreifen.

Public Sub: alles was hier steht kann auch von woanders verwendet werden.

deshalb auch Dein Fehler bei Private Sub.

Gruß,
Nicole


[e] btw haste mal die Hilfe von Excel VBA dazu befragt? 

Code:
Syntax

[Private | Public] [Static] Sub Name [(ArgListe)]


Public: Optional. Auf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul (mit einer Option Private-Anweisung) kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden.

Private: Optional. Auf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde.

Static: Optional. Die lokalen Variablen der Sub-Prozedur bleiben zwischen Aufrufen erhalten. Das Attribut Static wirkt sich nicht auf Variablen aus, die außerhalb der Sub-Prozedur deklariert wurden, auch wenn sie in der Prozedur verwendet werden.


[/e]
------------------
Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
----------------
Erfinnder-Gilden-Lehrling Stufe: 0,5

[Diese Nachricht wurde von runkelruebe am 08. Sep. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



Sehen Sie sich das Profil von Bernd P an!   Senden Sie eine Private Message an Bernd P  Schreiben Sie einen Gästebucheintrag für Bernd P

Beiträge: 3358
Registriert: 07.06.2001

erstellt am: 08. Sep. 2006 09:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

THX

Also Privat Sub funkt nur in der XLS in der es ist. (soweit ich das verstehe)

------------------
"Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark  Bernd P.
Bitte Supportangaben eintragen, warum siehst du hier

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 08. Sep. 2006 09:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

sogar noch eingeschränkter: Private funktioniert nur in dem Modul in dem sie steht.

------------------
Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
----------------
Erfinnder-Gilden-Lehrling Stufe: 0,5

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

okl
Mitglied
Wirtsch-Ing (Maschbau)


Sehen Sie sich das Profil von okl an!   Senden Sie eine Private Message an okl  Schreiben Sie einen Gästebucheintrag für okl

Beiträge: 157
Registriert: 21.04.2006

3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6

erstellt am: 08. Sep. 2006 10:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hallo!
Sub oder Function ohne vorangestelltes Public, Private etc ist IMHOIn my humble oppinion (Meiner Meinung nach) kein guter Programmierstil. Man sollte immer alles richtig deklarieren. Wie zB die Variablen, die man unter VBA auch einfach mit
Code:
Dim a
oder auch gar nicht deklarieren kann/muss. Kostet unnötig Speicherplatz und nimmt Performance. Vielleicht merkt man es bei der - Entschuldigung, möchte niemandem zu Nahe treten - "Hausgebrauch-Programmierung" nicht, aber bei größeren, komplexeren Anwendungen wird es sehr schnell sehr interessant.
Ist nur ein gutgemeinter Tipp, da ich früher auch nicht alles deklariert habe und jetzt durch meine Arbeit merke, wie wichtig das sein kann (nicht muss).
Grüße, okl

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 08. Sep. 2006 10:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hallo zusammen!

@okl: Richtig, sehe ich genauso. Dazu fällt mir noch unter "Extras-Optionen-Variablendeklaration erforderlich" im VBA-Editor ein: Option Explicit. Hat ECHT Vorteile, auch wenn´s manchmal (bei "mal schnell..." echt nerven kann:-)

@Nicole: Gute Arbeit!

@Bernd: Nur ´ne Kleinigkeit: Du schreibts wiederholt "Privat", es heißt jedoch "Private", mit "e" am Ende, englisch. Könnte Dir sonst auch ´ne Fehlermeldung bescheren bzw. den Text im Editor rot färben - rot = ungut. Apropos: Nix für ungut!
Gruß Frederik

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 08. Sep. 2006 10:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hi okl,
dann bring' dem Makro-rekorder bitte bei, daß er unsauber programmiert 

daher kommt nämlich das reine Sub

Zitat:
Original von Bernd P:
Hintergrund ist das ich mit Makroaufzeichnung diverse Makros aufzeichne

Schöne Grüße,
Nicole

------------------
Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...
----------------
Erfinnder-Gilden-Lehrling Stufe: 0,5

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 08. Sep. 2006 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Jo,
dazu nochmal ein Zitat aus der Hilfe zu VBA:
Zitat:
Sub-Prozeduren sind standardmäßig öffentlich, wenn sie nicht explizit mit Public oder Private festgelegt werden. Wird Static nicht angegeben, so bleiben die Werte lokaler Variablen zwischen den Aufrufen nicht erhalten.
Frederik

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

okl
Mitglied
Wirtsch-Ing (Maschbau)


Sehen Sie sich das Profil von okl an!   Senden Sie eine Private Message an okl  Schreiben Sie einen Gästebucheintrag für okl

Beiträge: 157
Registriert: 21.04.2006

3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6

erstellt am: 08. Sep. 2006 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hallo Nicole,
Zitat:
dann bring' dem Makro-rekorder bitte bei, daß er unsauber programmiert

Du meinst sicher "sauber".  Egal, ich glaube, wir meinen dasselbe. Der Recorder gibt erste Anhaltspunkte und mehr nicht. Dafür ist der gut, aber mehr kann er nicht und sollte auch IMHOIn my humble oppinion (Meiner Meinung nach) nicht können. Sonst wäre ich ganz schnell ganz viel Arbeit los. Und das wäre zum  !
Schüs, okl

PS: Nicole, Deine Sucherfolge in der Zeit sind echt beeindruckend! -> 10U

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 11. Sep. 2006 15:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Liebste Nicole,

da muss ich aber mal einen Wiederspruch einlegen  . Teste mal das:

Modul1:

Code:

Private Sub test1()
    MsgBox "Hallo Nicole"
End Sub

Modul2:

Code:

Public Sub test()
    Application.Run "test1"
End Sub


Starte den Code in Modul2.

------------------
Gruß
Nepumuk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 11. Sep. 2006 15:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hallo Nepumuk,
entschuldige, daß ich mich einmische, aber Du tust Nicole unrecht. Du müßtest stattdessen Bill widersprechen. Hier nochmal das Zitat aus der Hilfe zu "Private":
Zitat:
Optional. Auf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde.

Das Dein Test funktioniert, wundert mich auch - dürfte er nämlich nach obiger Beschreibung eigentlich nicht..? Du rufst ja die Private Sub aus einem anderen Modul auf. Seltsam. Sinn?
Frederik

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 11. Sep. 2006 16:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Ha! Geht doch!
Es liegt an Deinem "Application.Run"!!!
Laß´ mal eben dieses weg, also nur
Code:
Private Sub test()
    test1
End Sub

und ändere dann den Code im Modul1 zwischen Priv. und Public. Dein Befehl umgeht wohl diese (gelegentlich durchaus sinnvolle) Hürde.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 11. Sep. 2006 16:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hi,

ich wollte doch nur mal zeigen, dass der Zusatz "Private" bei einer Sub / Function nur bedingt vor einem externen Zugriff schützt. Nur in Klassen kannst du darauf nicht zugreifen. In Klassen gibt es auch noch das "halböffentliche" Friend mit dem du auf Subs / Funktions / Propertys zugreifen kannst. Das ist nicht so frei wie Public (alle können zugreifen) und weniger restriktiv wie Private (Nur Prozeduren im Modul selbst können zugreifen). Sondern lässt einen Zugriff innerhalb des Projektes, in dem sie deklariert ist, zu.

------------------
Gruß
Nepumuk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 11. Sep. 2006 16:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernd P 10 Unities + Antwort hilfreich

Hallo,
Zitat:
Ich wollte doch nur mal zeigen, dass der Zusatz "Private" bei einer Sub / Function nur bedingt vor einem externen Zugriff schützt...
Das ist Dir - zumindest was mich angeht - perfekt gelungen. Man lernt nie aus!
Frederik

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz