Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Variable von Sub1 an Sub2 übergeben

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:  Variable von Sub1 an Sub2 übergeben (20194 mal gelesen)
piston
Mitglied
Konstrukteur


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

Beiträge: 140
Registriert: 18.05.2004

Pro/E WF4<P>Windows XP 64bit

erstellt am: 28. Aug. 2012 14:05    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

Hallo!


Ich habe folgendes Problem:

Ich habe mir ein ziemlich umfangreiches Makro erstellt (Rekorder, Foren,...) und es klappt auch soweit. Programmiertechnisch ist es wahrscheinlich katastrophal, aber das ist ein anderes Thema.

Ich führe über eine Übergeordnete Sub (alles in einem Modul) über mehrere CALL Befehle weiteres Sub's aus. Nun mein Problem:

Ich lese in einer Sub einen Zellenwert aus, welchen ich zu einem späteren Zeitpunkt in einer anderen Sub in eine Zelle schreiben lassen will. Ich schaffe es aber nicht, das der Wert übergeben wird.

Habe mal hier mal einen verkürzten Code zusammengestellt, damit ihr sehen könnt, was ich machen will und eventuell, woran es scheitert:

Sub Uebung()

    Call GetName
    Call Showname

End Sub

Sub GetName()

    Dim GetName As String

    GetName = [A1]
        MsgBox GetName 'Wert wird testhalber ausgegeben - i.O.

   
End Sub


Sub Showname()

    Dim FileName As String
    Dim GetName As String 'war mal ein Versuch

    FileName = GetName 'war mal ein Versuch

    MsgBox FileName 'Wert wird nicht angezeigt - n.i.O.
    [A4] = FileName 'Zelle bleibt leer
   
End Sub


Könnte mir bitte jemand helfen - DANKE!!!

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

carsten-3m
Mitglied
Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)


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

Beiträge: 950
Registriert: 08.05.2007

Excel 2010

erstellt am: 28. Aug. 2012 14:58    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 piston 10 Unities + Antwort hilfreich

Solche in "Subs" definierten Variablen sind nur lokal in der sie definierenden Prozedur gültig. Wird die Prozedur verlassen, sind sie verschwunden. Es gibt, glaub ich, eine Möglichkeit, global gültige Variablen vorab zu definieren, allerdings wüßte ich jetzt aus dem Stehgreif nicht wie.

Eine mögliche Lösungsvariante für Dein Variablenproblem stellt die Definition einer Funktion dar (Function). Diese übergibt ihr Ergebnis an die aufrufende Prozedur und funktioniert dann wie eine mit Wert belegte Variable. Und mehr benötigst Du augenscheinlich nicht.

Das könnte so aussehen (nur getippt, nicht getestet):

Code:
Function Getname(Name as String)
    Name = [A1]
End Function

Sub Showname()
    Dim FileName As String
    Dim Name As String
    FileName = GetName(Name)
    MsgBox FileName
    [A4] = FileName
End Sub


------------------
Gruß, Carsten

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

Beverly
Mitglied
Dipl.-Geologe (Rentner)


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

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 28. Aug. 2012 16: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 piston 10 Unities + Antwort hilfreich

Hi,

du kannst den Wert direkt an die andere Sub übergeben

Code:
Sub Uebung()
    Showname Range("A1")
End Sub

Sub Showname(FileName As String)
    MsgBox FileName
    Range("A4") = FileName
End Sub


oder du deklarierst eine Variable, die in beiden Subs benutzt werden kann. Dabei musst du beachten, dass diese Variable als Public deklariert werden muss, wenn sie in unterschiedlichen Codemodulen verwendet werden soll. Stehen die Subs im selben Modul, reicht die Deklarierun mittels Dim.

Code:
Option Explicit
Dim FileName As String     ' <== für Nutzung im selben Codemodul
'Public FileName As String ' <== für Programmweite Nutzung

Sub Uebung()
    FileName = Range("A1")
    Showname
End Sub

Sub Showname()
    MsgBox FileName
    Range("A4") = FileName
End Sub



------------------
Bis später,
Karin

[Diese Nachricht wurde von Beverly am 28. Aug. 2012 editiert.]

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

RSchulz
Ehrenmitglied V.I.P. h.c.
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 28. Aug. 2012 17: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 piston 10 Unities + Antwort hilfreich

Hallo Piston,
du kannst es auch einfach folgendermaßern machen...

Code:

Sub Uebung()

    Dim Name as String

    Name = GetName()
    Showname(Name)

End Sub

Public Function GetName()as String

    Dim Name As String

    Name = [A1]
    return Name 'oder Getname = Name
   
End Function

Sub Showname(ByVal Name as String)

    MsgBox Name
    [A4] = Name
   
End Sub


...oder du arbeitest wirklich mit globalen Variablen, die allerdings mehr als nur verpöhnt sind, wenn sie vermeidbar wären.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

piston
Mitglied
Konstrukteur


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

Beiträge: 140
Registriert: 18.05.2004

Pro/E WF4<P>Windows XP 64bit

erstellt am: 29. Aug. 2012 13:37    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

Hallo!


Danke!

Habe die Lösung von carsten-3m aufgegriffen, noch etwas angepasst und es fuktioniert - Vielen Dank an Alle!

Schönen Gruß!

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