Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Übergeben einer Variable (schnell Hilfe bitte)

Forumthread: Übergeben einer Variable (schnell Hilfe bitte)

Übergeben einer Variable (schnell Hilfe bitte)
Maxer
Hallo Forum,
ich habe im meinen Augen ein großen Problem. Ich habe schon sehr viel mir VBA-Programmierung gemacht und konnte bis heute die Übergabe von Variablen vermeiden.
Doch nun ist es soweit. Ich komme nicht drum rum. Mein Problem dreht sich um die Übergabe einer Variable in einen andere Excelmappe. Hier meine aktuelle Vorgehensweise was ich alles per Makro mache:
-ich habe eine Steuerdatei. In dieser Steuerdatei befinden sich viele Pfade von verschiedenen Dateien.
Diese öffne ich nun per Klick auf einen Button nach einander. Hier definiere ich den steuerparameter.
Option Explicit
Public steuerparameter As String
Public Sub Update_selber_starten()
steuerparameter = "ok"
With Sheets("Zentrale")
.Activate
arbeitszeile = 60
anz_dateien = .Range("O7").Value
uf_Importinfo.Show vbModeless
For ii = 1 To anz_dateien
If .Cells(arbeitszeile, 15).Value  Empty Then
Workbooks.Open .Cells(arbeitszeile, 15).Value
-nun öffnet sich die erste Datei und in dieser Datei gibt es zum Anfang diess Makro

Private Sub Workbook_Open
Dim ctrl As CommandBarPopup
Set ctrl = Application.CommandBars.FindControl(ID:=30026) 'ID für Blatt im Menü Format
If ctrl Is Nothing Then Else ctrl.Enabled = False
Set ctrl = Application.CommandBars.FindControl(ID:=30029) 'ID für Blattschutz im Menü Extra
If ctrl Is Nothing Then Else ctrl.Enabled = False
If Sheets("Update").Range("E1").Value = "x" Then Updatelauf
End Sub

- in dem nächsten Makro "Updatelauf" soll nun dieser Parameter abgefragt werden mit dem Makro:
Option Explicit
Option Private Module
Public Sub Updatelauf()
kz2 = "update"
Application.ScreenUpdating = False
With Sheets("Update")
.Activate
If steuerparameter  "ok" Then
If .Range("E1") = "x" Then
z = MsgBox("Ein neues Update ist vorhanden. " & _
vbLf & _
vbLf & _
vbLf & _
vbLf & "Das Plantool wir nun auf den aktuellen Stand gebracht." & _
vbLf & "Klicken Sie bitte auf den OK-Button um das Update zu starten.", vbOKOnly)
If z = vbOK Then
GoTo weiter
Else
Exit Sub
End If
End If
End If
weiter:
Nun noch mal meine Frage. Wie bekomm ich den Wert des Steuerparameter in das andere Makro?
Danke für eure Hilfe.
Gruß Ron


		
Anzeige
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 10:12:34
Dirk
funktioniert es nicht wenn du deine Variable Publkizierst?
bsp.
Public i as integer
oder halt als was du sie brauchst
normalerweise kannst du die dann auch in einem anderen makro wieder abfagen
Gruß Dirk
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 10:13:44
Luschi
Hallo Ron,
hier mal ein Beispiel dazu: https://www.herber.de/bbs/user/68508.zip
Entpacke die Zip-Datei in einem leeren Ordner und starte Mappe1.xls. In der 'Tabelle1' gibt es ein Button mit der Bezeichnung 'Start'. Wenn Du hier raufklickst, wird die Variable 'steuerParameter" mit dem Wert "ok" belegt und die Mappe2.xls geöffnet. Den Rest siehst Du dann im Vba-Code der Mappe2.xls.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 10:20:29
Maxer
also Luschi danke für dein Beispiel. Ich muss es mir jetzt in Ruhe anschauen wie es funktioniert. Aber so wie es funktioniert hatte ich es mir gedacht. Danke.
Gruß maxer
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 11:09:19
Maxer
Hallo Luschi,
ich habe noch 2 Fragen zu deinem Beispiel. 1. Frage muss die Parameterübergabe in der Mappe1 zwingend eine Function sein oder kann es auch eine Public sub sein? 2. Frage. Ist das der einzigste Weg zur Variablenübergabe oder gibt es da noch andere Möglichkeiten (Wissenserweiterung meinserseit :-))
Danke für deine Info.
Gruß Maxer
Anzeige
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 11:18:00
Uwe
Hallo Maxer,
besser wäre, die Steuerung nicht über Workbook_Open, sondern ein eigens dafür vorhandenes Makro zu steuern.
Siehe z.B. hier: http://www.ms-office-forum.net/forum/showpost.php?p=1115189&postcount=3
Gruß Uwe
Anzeige
AW: Übergeben einer Variable (schnell Hilfe bitte)
11.03.2010 12:12:04
Luschi
Hallo Ron,
wenn Der Variablenwert von der Mappe2.xls geholt werden soll, dann ist das mit einer Funktion am einfachsten zu machen. Mit einer Prozedur (Sub) ginge es auch, ist aber etwas Komplizierter.
Einen anderen Weg der direkten Variablenübergabe kenne ich nicht. Man könnte es auch noch mit einem definierten Namen machen, den könnte man dann direkt ansprechen und bräuchte keine Funktion oder Prozedur.
Gruß von Luschi
aus klein-Paris
Anzeige
Übergeben einer Variable per Zwischenablage
11.03.2010 21:05:12
Uwe
Hallo Maxer,
da hätte ich auch noch eins.
Steuerdatei:

Public Sub StarteUpdate()
Dim Startparameter As String
Startparameter = "OK"
SchreibeTextInDieZwischenablage Startparameter
Workbooks.Open ThisWorkbook.Path & "\Clientdatei.xls"
End Sub
'benötigt einen Verweis auf die
'Microsoft Forms 2.0 Objektlibrary
'(einfach eine Userform einfügen und dann wieder entfernen)
Private Sub SchreibeTextInDieZwischenablage(sText As String)
Dim oData As New DataObject
With oData
.SetText sText
.PutInClipboard
End With
End Sub
Clientdatei:

Private Sub Workbook_Open()
Dim Startparameter As String
Startparameter = HoleTextVonZwischenablage
If Len(Startparameter) Then
MsgBox Startparameter
End If
End Sub
'benötigt einen Verweis auf die
'Microsoft Forms 2.0 Objektlibrary
'(einfach eine Userform einfügen und dann wieder entfernen)
Private Function HoleTextVonZwischenablage() As String
Dim oData As New DataObject
On Error Resume Next ' Brutal um falsche Formate abzuwürgen, gibt dann einen Leerstring
oData.GetFromClipboard
HoleTextVonZwischenablage = oData.GetText
End Function

https://www.herber.de/bbs/user/68522.zip
Gruß Uwe
Anzeige
AW: Übergeben einer Variable per Zwischenablage
11.03.2010 22:50:52
maxer
Also an euch alle vielen Dank für die Hilfe. ich werde mir in den nächsten Tagen die Infos genauer anschauen. Und noch mal fragen wenn ich was wissen möchte.
;
Anzeige
Anzeige

Infobox / Tutorial

Variablenübergabe in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Variable in Excel VBA zu übergeben, befolge diese Schritte:

  1. Definiere die Variable: Stelle sicher, dass die Variable, die du übergeben möchtest, als Public deklariert ist. Dies ermöglicht den Zugriff auf die Variable von anderen Modulen oder Arbeitsmappen.

    Public steuerparameter As String
  2. Setze den Wert der Variable: Weisen Sie der Variable innerhalb eines Makros einen Wert zu. Zum Beispiel:

    steuerparameter = "ok"
  3. Öffne die andere Arbeitsmappe: Verwende Workbooks.Open, um die Arbeitsmappe zu öffnen, in der du die Variable abfragen möchtest.

    Workbooks.Open "Pfad_zur_Datei"
  4. Greife auf die Variable zu: In der geöffneten Arbeitsmappe kannst du den Wert der Variable abfragen, indem du einfach auf die Public-Variable zugreifst.


Häufige Fehler und Lösungen

  • Variable nicht gefunden: Dieser Fehler tritt auf, wenn die Variable nicht als Public deklariert wurde. Stelle sicher, dass deine Variable richtig deklariert ist.

  • Wert ist leer: Wenn der Wert der Variable nicht wie erwartet erscheint, überprüfe, ob die Variable vor dem Zugriff darauf richtig gesetzt wurde.

  • Objekt nicht gefunden: Dieser Fehler kann auftreten, wenn die Arbeitsmappe nicht vorhanden ist oder der Pfad falsch ist. Überprüfe den Dateipfad sorgfältig.


Alternative Methoden

Eine andere Möglichkeit, um Variablen zwischen verschiedenen Makros oder Arbeitsmappen zu übergeben, ist die Verwendung von:

  • Funktionen: Du kannst eine Funktion erstellen, die den Wert der Variablen zurückgibt.

    Public Function GetSteuerparameter() As String
       GetSteuerparameter = steuerparameter
    End Function
  • Zwischenablage: Du kannst den Wert in die Zwischenablage schreiben und in der anderen Arbeitsmappe wieder abrufen.

    ' Schreiben
    Dim oData As New DataObject
    oData.SetText steuerparameter
    oData.PutInClipboard
    
    ' Lesen
    Dim Startparameter As String
    oData.GetFromClipboard
    Startparameter = oData.GetText

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du einen excel startparameter übergeben kannst:

  1. In der Steuerdatei:

    Public Sub StarteUpdate()
       steuerparameter = "OK"
       Workbooks.Open "Pfad_zur_Clientdatei"
    End Sub
  2. In der Clientdatei:

    Private Sub Workbook_Open()
       MsgBox "Der Parameter ist: " & steuerparameter
    End Sub

Tipps für Profis

  • Vermeide globale Variablen: Nutze, wenn möglich, lokale Variablen und übergebe Parameter an Funktionen oder Subroutinen, um den Code sauberer und wartbarer zu halten.

  • Verwende klare Namen: Achte darauf, dass deine Variablen aussagekräftige Namen haben, um die Lesbarkeit des Codes zu verbessern.

  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Logik deines Codes zu erklären. Dies ist besonders hilfreich, wenn du später auf deinen Code zurückkommst oder ihn mit anderen teilst.


FAQ: Häufige Fragen

1. Muss die Parameterübergabe in der Mappe unbedingt eine Funktion sein?
Nein, es kann auch eine Public Sub verwendet werden, aber eine Funktion ist oft einfacher, um Werte zurückzugeben.

2. Gibt es andere Methoden zur Variablenübergabe?
Ja, du kannst auch definierte Namen verwenden oder auf die Zwischenablage zugreifen, um Werte zu übergeben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige