VB Lösung für zwei Variablen zurückgeben

kellerlanplayer

www.Blog2Help.com
ID: 10624
L
29 April 2006
2.280
247
Hallo,

irgendwie stehe ich auf dem Schlauch.

Ich habe mir eine Funktion programmiert, welches in einem anderen File einen gewünschten Wert sucht. Die Funktion soll mir anschließend die Zellenposition zurückgeben, damit ich damit weiterarbeiten kann. Also ich bräuchte am Ende zwei Variablen "Zeile" und "Spalte"

Derzeit habe ich es folgendermaßen gelöst:

Der gefundene Wert wird in einem String in folgendem Format gespeichert "Zelle|Zeile" . Meine Idee dahinter war, den String dann später aufzudröseln und so nur einmal die Funktion aufrufen zu müssen, für das Ergebnis. Aber das klappt ja auch nicht, weil dann bräuchte ich zwei Funktionen bspw. positionZelle () und positionZeile() die beide ja wieder du Ursprungsfunktion aufrufen, was wiederum performance kostet.

Ich hoffe, ihr versteht was ich meine...

Hier ist nun die Funktion, wäre über Hilfe sehr dankbar :)

Code:
Function suchenInZweiFiles(file1 As Workbook, zuFindenderWert As String, startZeileFile1 As Integer, startZelleFile1 As Integer) As String

Dim startZeileFile1TMP As Integer
Dim startZelleFile1TMP As Integer
Dim anzahlZeilen As Integer


startZelleFile1TMP = startZelleFile1
startZeileFile1TMP = startZeileFile1

anzahlZeilen = leereZeile(startZeileFile1TMP, startZelleFile1TMP, file1)

Dim nCounter1 As Integer
Dim nCounter2 As Integer

Dim PositionZelle As Integer
Dim PotisitonZeile As Integer

suchenInZweiFiles = "leer"

    For nCounter1 = startZeileFile1 To anzahlZeilen 'Schleife für Zeilendurchlauf
    anzahlZellen = leereZelle(nCounter1, "Daten", file1)
         
        For nCounter2 = 1 To anzahlZellen     'Schleife für Spaltendurchlauf
         
            If (zuFindenderWert = file1.Worksheets(1).Cells(nCounter1, nCounter2).Value And zuFindenderWert <> "") Then
         
            PositionZelle = nCounter2
            PositionZeile = nCounter1
        Exit For
    Exit For
            End If
         
         Next nCounter2
      
    
    Next nCounter1
     


suchenInZweiFiles = CStr(PositionZelle) & "|" & CStr(PositionZeile)

End Function
 
Type ist das Zauberwort

Code:
Type Complex
  real As Integer
  ima As Integer
End Type

Function Foo() As Complex
  Dim c As Complex
  c.real = 42
  c.ima = 4711
  Foo = c
End Function

Dim x As Complex
x = Foo()

x.real  ' -> 42
x.ima ' -> 4711
Als Beispiel. Kann sein, dass die Syntax n bissle falsch is; hab schon lang kein Basic mehr geschrieben :ugly:
 
Vielen Dank für deine super Hilfe :)

Ein kleiner Fehler hat sich in deine Erinnerung geschlichen, so müsste dein Beispiel aussehen:

Code:
Type Complex
  real As Integer
  ima As Integer
End Type

Function [B][COLOR="red"]Foo[/COLOR][/B]() As Complex
  Dim c As Complex
  [B][COLOR="Red"]Foo[/COLOR][/B].real = 42
  [B][COLOR="red"]Foo[/COLOR][/B].ima = 4711
  
End Function

Dim x As Complex
x = Foo()

x.real  ' -> 42
x.ima ' -> 4711

Nur falls jemand mal das gleiche Problem hat :)

Zu erwähnen wäre auch, dass der Type-Block ganz am Anfang des Moduls muss, vor allen Subs und vor allen Funktionen.
 
Ein kleiner Fehler hat sich in deine Erinnerung geschlichen, so müsste dein Beispiel aussehen
Nö, wieso? TheHacker bastelt sich in der Funktion eine Variable vom Typ Complex zusammen und gibt die am Ende als Funktionsergebnis zurück. Ist völlig korrekt...
Ja, deine Variante funktioniert auch (auch wenn dann die Deklaration der Variablen c überflüssig wäre), üblicherweise wird das Ergebnis einer Funkion aber erst ganz am Ende gesetzt (insbesondere im Zusammenhang mit der Verwendung von ErrorHandlern oder ähnlichem, aber das führt jetzt ein bisschen weit).
 
ich stimme dem zu, was theHacker da gebastelt hat!
Völlig korrekt so.

Und Dein Code sieht ja nach VBA aus, geht vll sogar eleganter, nur sind meine VBA Kenntnisse ein wenig beschränkt, da ich nicht soviel Zeit hatte mich intensive mit allemzu beschäftigen.
Die End For's stehen for dem End If, irgenwie nicht richtig aber ist wohl eher ein TipFehler bei Dir gewesen
 
Zuletzt bearbeitet: