Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Rückgabewert in Variable speichern

Forumthread: VBA Rückgabewert in Variable speichern

VBA Rückgabewert in Variable speichern
29.08.2016 10:50:49
snoopjav
Hallo Community,
folgendes Problem macht mich verrückt:
Ich habe ein Programm im File "codeneu" (es ist sehr umständlich geschrieben, ich weiß), das im Grunde nachschaut, ob in der Tabelle Master in gewissen Zellen ein Wert drinsteht (es kommen im Programm weitere Bedingungen dazu) und falls einer drinsteht, dann wird in einer anderen Tabelle das heutige Datum in der dazugehörigen Spalte geschrieben. Das funktioniert soweit.
Nun habe ich ein weiteres Programm geschrieben, das in der Tabelle Master in Betracht kommende Spalten mit ihren Spaltennamen durch das Programm gefunden werden, falls die Spalten in der Tabelle Master, die ich brauche verschoben werden.
Davor habe ich die Zelle, in der nachgeschaut werden soll, genau definiert, also beispielsweise Cells(i,9). Jetzt soll der Column-Wert aber von dem zweiten Programm (File spaltefinden) geliefert werden.
Wenn ich aber in meinem Hauptprogramm folgenden Code schreibe:

Dim spaltenindex as Integer
spaltenindex = spaltefinden(spaltenindex = spaltefinden("Teile-Typ", Range("A8:CT8"))

Dann bekomme ich einen Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler.
Mit der Sub Aufruf in spaltefinden liefert das Programm den richtigen Wert, sobald ich die Funktion spaltefinden jedoch in dem Programm in "codeneu" benutzen möchte, liefert spaltefinden einen falschen Wert.
Kann mir jemand helfen? Vielen Dank!
spaltefinden: https://www.herber.de/bbs/user/107866.txt
codeneu(Hauptprogramm): https://www.herber.de/bbs/user/107867.txt
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Rückgabewert in Variable speichern
29.08.2016 11:06:07
Michael
Hallo!
Nur Schnell drüber geschaut:
Hier
spaltenindex = spaltefinden(spaltenindex = spaltefinden("Teile-Typ", Range("A8:CT8"))
bezieht sich Range("A8:CT8") auf das aktive Blatt - das ist möglicherweise nicht das gewünschte Blatt, je nachdem woher Du das aufrufst. Sicherer wäre hier der Range auch das zugehörige Worksheet mitzugeben...
LG
Michael
Anzeige
AW: VBA Rückgabewert in Variable speichern
29.08.2016 11:16:28
snoopjav
Danke erstmal!
Habe es folgendermaßen ergänzt:

spaltenindex = spaltefinden(spaltenindex = spaltefinden("Teile-Typ", Workbooks(this).Worksheets( _
"Master").Range("A8:CT8")))
Leider kommt trotzdem ein Kompilierfehler: Argument ist nicht optional
Das erste "spaltefinden" im obigen Code ist dabei markiert. Ich komme leider auf keine weitere Idee...
Anzeige
AW: VBA Rückgabewert in Variable speichern
29.08.2016 11:28:14
baschti007
Ich weiß zwar nicht was du suchst aber du du deine Funktion 2 mal dort aufrufst musst du auch 2 Range angeben.
Vielleicht so

With ThisWorkbook.Worksheets("Master")
spaltenindex = spaltefinden(spaltenindex = spaltefinden("Teile-Typ", .Range("A8:CT8")), .Range(" _
A8:CT8"))
End With

Anzeige
AW: VBA Rückgabewert in Variable speichern
29.08.2016 13:56:18
snoopjav
Danke für die Verbesserung...
Syntaktisch ist zwar alles einwandfrei, jedoch wird in die Variable spaltenindex einer falscher Wert gespeichert, woraufhin das ganze Programm fehlschlägt. Die Funktion spaltefinden an sich ist aber richtig, da sie mit der sub Aufruf (siehe File) funktioniert...ich bin ratlos
Anzeige
AW: VBA Rückgabewert in Variable speichern
29.08.2016 14:02:22
snoopjav
Inwiefern kann denn ein Fehler auftauchen, wenn ein Programm einmal den richtigen Wert zurückgibt und ein anderes Programm einen Falschen?
VBA Rückgabewert in Variable speichern
29.08.2016 19:10:02
baschti007
Da ich ja nicht mal deine Datei kenne kann ich dir leider auch nix dazu sagen was du damit bezwecken willst ;)
Gruß Basti
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Rückgabewert in Variable speichern


Schritt-für-Schritt-Anleitung

  1. Definieren der Funktion: Stelle sicher, dass die Funktion spaltefinden korrekt definiert ist und einen Rückgabewert liefert, den Du in einer Variable speichern möchtest.

  2. Richtige Verwendung der Range: Achte darauf, dass Du den richtigen Worksheet angibst, wenn Du auf die Range zugreifst. Verwende ThisWorkbook.Worksheets("Master").Range("A8:CT8"), um sicherzustellen, dass Du auf das gewünschte Blatt zugreifst.

  3. Speichern des Rückgabewertes: Verwende den folgenden Code, um den Rückgabewert in einer Variable zu speichern:

    Dim spaltenindex As Integer
    spaltenindex = spaltefinden("Teile-Typ", ThisWorkbook.Worksheets("Master").Range("A8:CT8"))

    Dadurch wird der Zellwert in der Variable spaltenindex gespeichert.

  4. Fehlerbehebung: Falls Du einen Kompilierfehler erhältst, überprüfe, ob die Funktion spaltefinden die richtigen Parameter erwartet und ob diese korrekt übergeben werden.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn die Range auf ein nicht aktives Blatt verweist. Stelle sicher, dass Du das richtige Worksheet angibst.

  • Argument ist nicht optional: Dieser Fehler deutet darauf hin, dass Du die Funktion spaltefinden falsch aufrufst. Achte darauf, die Anzahl der Argumente zu überprüfen, die Du übergibst.

  • Falscher Rückgabewert: Wenn der Rückgabewert in der Variable nicht stimmt, überprüfe, ob die Logik in der Funktion spaltefinden korrekt ist und ob die gesuchte Zelle tatsächlich einen Wert enthält.


Alternative Methoden

  • Direkter Zellzugriff: Anstatt eine Funktion zu verwenden, kannst Du direkt auf die Zelle zugreifen, wenn Du den Spaltenindex kennst:

    Dim wert As Variant
    wert = ThisWorkbook.Worksheets("Master").Cells(8, spaltenindex).Value
  • Verwendung von Named Ranges: Wenn Du oft auf bestimmte Zellen zugreifst, könnte es sinnvoll sein, benannte Bereiche zu verwenden, um die Lesbarkeit Deines Codes zu verbessern.


Praktische Beispiele

Hier sind einige praktische Beispiele, die Dir helfen könnten:

  1. Speichern eines Zellwertes in einer Variablen:

    Dim zellwert As Variant
    zellwert = ThisWorkbook.Worksheets("Master").Cells(1, 1).Value
  2. Zellwert in einer anderen Tabelle setzen:

    ThisWorkbook.Worksheets("ZielTabelle").Cells(1, 1).Value = zellwert
  3. Nutzung einer Funktion, die einen Wert zurückgibt:

    Dim ergebnis As Integer
    ergebnis = spaltefinden("Teile-Typ", ThisWorkbook.Worksheets("Master").Range("A8:CT8"))

Tipps für Profis

  • Debugging: Nutze die Debugging-Funktion in VBA, um die Werte von Variablen während der Ausführung zu überprüfen. Dies hilft, Fehler schneller zu identifizieren.

  • Kommentare: Füge Kommentare zu Deinem Code hinzu, um die Logik für Dich und andere verständlicher zu machen.

  • Modularer Code: Halte Deinen Code modular, indem Du häufig verwendete Funktionen in separate Subroutinen oder Funktionen auslagerst.


FAQ: Häufige Fragen

1. Wie kann ich einen Wert aus einer Zelle in eine Variable speichern?
Verwende den Befehl wert = ThisWorkbook.Worksheets("Blattname").Cells(Zeile, Spalte).Value, um den Zellwert in einer Variablen zu speichern.

2. Was sind häufige Fehler bei der Verwendung von VBA-Funktionen?
Häufige Fehler sind falsche Argumente, nicht vorhandene Referenzen auf Worksheets und Laufzeitfehler aufgrund von falschen Zellbereichen.

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