MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 31.08.2017, 13:19   #1
Raphael-2017
Neuer Benutzer
Neuer Benutzer
Standard Excel 2013 - Variablen füllen und Global nutzen

Hallo zusammen,

wieder einmal wende ich mich mit einer bitte um Hilfe an Euch!

Mein kleines Projekt soll nun Abteilungsintern genutzt werden und weiter ausgebaut werden.
Nun möchte ich mir einiges an Tipparbeit sparen und auch meinen Code optimieren.

Jetzt zum Problem:
bisher habe ich für jede Funktion meine Variablen Deklariert und dann mit Dateien aus einem Excelsheet befüllt.
Jetzt würde ich gerne diese Variablen in (vorerst) nur diesem Modul für alle Funktionen nutzen!

Bisher habe ich eine Zelle in der Zeile markiert aus welcher ich die Daten benötige und dann mit VBA die benötigten Zellen ausgelesen und an die Variablen übergeben. So weit so gut.

Wie kann ich nun die Variablen befüllen und im Modul bekannt geben?

Hier eine Beispiel Funktion:
Code:

Public Function Mat_vobe_Deckblatt()

    '*** Variablen Deklarieren ***
    Dim Adresse         As String
    Dim neueAdresse     As String
    Dim EQNR            As String
    Dim AENR            As String
    Dim RPAM            As String
    Dim RPAMK           As String
    Dim CCSNR()         As String
    Dim CCSNRO          As String
    Dim CCSNRNeu        As String
    Dim sNumber         As String
    Dim Kunde           As String
    Dim Liefertermin    As Date
    Dim Sachbearbeiter  As String
    
     '*** Aktive Zeile auslesen ***
    ThisWorkbook.Worksheets("CCS-2016").Activate
    Adresse = ActiveCell.AddressLocal(False, False)
    neueAdresse = Mid(Adresse, 2)
    
    '*** Variablen mit Daten befüllen ***
    'CCSNR = Range("E" & neueAdresse).Value
    AENR = Range("R" & neueAdresse).Value
    RPAM = Range("G" & neueAdresse).Value
    EQNR = Range("T" & neueAdresse).Value
    RPAM = Range("G" & neueAdresse).Value
    Kunde = Range("V" & neueAdresse).Value
    Liefertermin = Range("P" & neueAdresse).Value
    Sachbearbeiter = Range("AF" & neueAdresse).Value
    
    If EQNR = "Start" Then
    ElseIf EQNR = "io" Then
    ElseIf EQNR = "-" Then
    ElseIf EQNR = "" Then
    Else
        '*** Variablen bearbeiten ***
        '*** RPAM-Nr. bearbeiten ***
        CCSNRO = Range("E" & neueAdresse).Value
        '*** Prüfen ob der String ein "-" enthält ***
         If InStr(CCSNRO, "-") > 0 Then
            '*** Returns an array containing ***
            CCSNR() = Split(CCSNRO, "-")
            sNumber = CCSNR(1)
            ' führende Nullen entfernen
            CCSNR(1) = Format$(sNumber, "#")
            CCSNRNeu = CCSNR(0) & CCSNR(1)
         Else
            CCSNRNeu = CCSNRO
         End If
         
        '*** das jetzt benötigte Tabellenblatt wechseln ***
        ThisWorkbook.Worksheets("Mat-Vorbe").Activate
    
        '*** Daten eintragen für... ***
        '*** RPAM ***
        Range("G3") = RPAM
        '*** CCS-Nr ***
        Range("D3") = CCSNRNeu
        '*** AE-Nr ***
        Range("D7") = AENR
        '*** EQ-Nr ***
        Range("G7") = EQNR
        '*** Aufbau ***
        Range("D9") = Kunde
        '*** Liefertermin ***
        Range("D11") = Liefertermin
        '*** Sachbearbeiter ***
        Range("G11") = Sachbearbeiter
        
        '*** Tabelle Activieren ***
        ThisWorkbook.Worksheets("Mat-Vorbe").Activate
    
        '*** Zulieferer/Hersteller auswählen ***
        If Range("D9") = "intern" Then
            Range("G9") = "intern"
        ElseIf Range("D9") = "RS" Then
            Range("G9") = "Roland Schrade"
            Range("D9") = "intern"
        ElseIf Range("D9") = "Stoll" Then
            Range("G9") = "Beistellung/Ergänzung"
        ElseIf Range("D9") = "KSV" Then
            Range("G9") = "Ergänzung"
        Else: Range("G9") = ""
        End If
        
        '*** Tabelle ausdrucken ***
        ThisWorkbook.Worksheets("Mat-Vorbe").PrintOut
        
        '*** zurück zur CCS-2016 Tabelle ***
        ThisWorkbook.Worksheets("CCS-2016").Activate
        Range("C" & neueAdresse).Select
    End If
End Function
Vielen Dank für Eure Hilfe und Eure Mühe.

Gerne bin ich bereit dem Helfer eine Tüte Gummibären zukommen zu lassen oder aber eine Spende an die KinderKrebsStiftung in Tübingen zu tätigen.
Raphael-2017 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.08.2017, 14:07   #2
R J
MOF Meister
MOF Meister
Standard

Hi Raphael,

ich entscheide mich für die Spende an die Kinderkrebshilfe...

Du hast zwar eine Public Function (die eigentlich ein Sub ist, weil sie keinen Wert zurückgibt), die von überall aus aufgerufen werden kann, aber die Variablen darin sind nur innerhalb dieser Function bekannt.

Du könntest ein neues Modul erstellen. Benenne es um in modDeklarationen.

Dort kannst Du nun die globalen Variablen und/oder Konstanten dimensionieren. Allerdings müssen sie Public sein, wenn sie auch außerhalb dieses Moduls bekannt sein sollen.
Ich nehme jetzt mal exemplarich die Variable Adresse:

In das neue Modul:
Code:

Public Adresse as String
'....usw...
Dort könntest Du auch Deine Funktion /Sub zum einlesen unterbringen, falls erforderlich.
Bsp.: (Wenn Adresse zwar immer aus A2 aber jedesmal aus einem anderen Blatt gelesen werden soll)
Code:

Public Sub LiesVariablen(ausBlatt as String)
With ThisWotkbook.WORKSHEETS(ausBlatt)
    Adresse = .Range("A2")
  'nächsteVaribale = .Cells(3,1) 'Aus A3
'usw....
end with
Aufrufen kannst Du dann diese Prozedur aus jedem Modul heraus, auch aus Formularen heraus . Bsp. Aufruf über einen Button mit
Code:

Sub cmdEinlesen_Click()
      LiesVariablen "Tabelle1"
End Sub

__________________

Ciao, Ralf

Auf, zum Markplatz der Ideen!
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Aus aktuellem Anlass: Mein Postfach quilt hier regelmäßig über.
Ich betrachte mich nicht als der persönliche Mentor von wem auch immer. Persönliche Nachrichten daher bitte nur nach vorheriger Absprache. Fragen zum Thema immer im betreffenden Thread stellen. Danke!



Geändert von R J (31.08.2017 um 14:09 Uhr).
R J ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.08.2017, 14:08   #3
Beverly
MOF Guru
MOF Guru
Standard

Hi,

deklariere die Variablen als Public in einem allgemeinen Modul (dann stehen sie in allen Codemodulen zur Verfügung) und belege sie z.B im Worksheet_Activate-Ereignis, wenn sich die Daten nicht während der Laufzeit ändern.


GrußformelBeverly's Excel - Inn

__________________

Bitte im Beitrag eine kurze Rückmeldung auch in dem Fall geben, wenn ein Problem gelöst wurde - dies hilft auch anderen Usern, wenn sie den betreffenden Thread lesen.
Möchtest du dich außerdem für die Hilfe bei der Lösung deines Problems bedanken? Das kannst du ganz einfach durch die Bewertung eines Beitrags (Schalter unten links).
Beverly ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.09.2017, 08:09   #4
Raphael-2017
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Vielen Dank Ihr 2

Hallo Ihr 2,

vielen lieben Dank für Eure Hilfe.
Ich werde versuchen dies umzusetzen ... hatte mal wieder in eine völlig andere Richtung gedacht :-)

Spende an die K.K.Stiftung werde ich veranlassen.

Nochmals Danke für Eure Hilfe und Mühe

LG
Raphael
Raphael-2017 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.