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

VBA: Variablem mit selbem Inhalt/Verweis

VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 11:59:50
Tigerente
Hallo zusammen,
dieses Forum hat mir bei einigen meiner VBA-Probleme schon sehr gut weitergeholfen. Nun stoße ich allerdings an den ein oder anderen Punkt, bei dem ich auch aufgrund der mir fehlenden/passenden Such-Schlagworte, keine Lösung gefunden habe.
Worum geht es?
Ich habe mir u.a. eigene Funktionen geschrieben, mit denen ich Daten aus anderen Tabellenblättern ermitteln kann. Funktioniert soweit sehr gut.
Nun ist es so, dass ich für die Bezeichnung "Code" unterschiedliche Eingabemöglichkeiten in meiner Excel-Tabelle habe, die dann auf die entsprechenden Tabellenblätter (Bezeichnung "Bereich_Code") verweisen.
Manche "Code" sind eineindeutig, da gibt es nur ein passendes Tabellenblatt dazu. Jetzt gibt es aber auch die Möglichkeit, dass beispielsweise Code = KF, Code = TF, Code = GF und Code = DF alle dieselben Grundlagendaten haben.
Ich möchte also nicht 4 Tabellenblätter, sondern nur 1 Tabellenblatt erstellen und pflegen. Da die Kombination aus "Bereich" und "Code" viele Varianten hat, möchte ich die identischen Inhalte eben nicht mehrfach pflegen. Wird mit so vielen Tabellenblättern ja auch sehr unübersichtlich.
Ich hoffe ihr versteht, was ich meine.......
Der kursiv stehende Teil ist der, mit dem ich versucht habe die Namen für ein Tabellenblatt zusammenzufassen.
Ergebnis ist, dass Excel zwar „rechnet“, aber das Ergebnis „0“ ist, und somit nicht stimmt.
Sind die Anführungszeichen zu viel? Ohne hat es aber auch nicht funktioniert.
Muss ich "Code" noch zuweisen? Ich hätte gedacht, dass ich es nicht tun muss, da "Code", sowie " _ Bereich" Variablen der Funktion sind.

Function Isolierung(DN, Bereich, Code, Temp)
Dim i As Integer, j As Integer
If Len(DN) = 0 Then
Isolierung = ""
ElseIf Code = "-" Or Bereich = "-" Then
Isolierung = 0
Else
Dim MappenName As String
Dim Isocode As String
Isocode = Code & Temp
If Code = "KF" Or Code = "TF" Or Code = "GF" Then
MappenName = Bereich & "_" & "DF"
ElseIf Code = "KO" Or Code = "TO" Or Code = "GO" Then
MappenName = Bereich & "_" & "DO"
ElseIf Code = "K" Or Code = "T" Or Code = "G" Then
MappenName = Bereich & "_" & "D"
ElseIf Code = "M1" Then
MappenName = Bereich & "_" & "W1"
ElseIf Code = "M2" Then
MappenName = Bereich & "_" & "W2"
Else
MappenName = Bereich & "_" & Code

For i = 5 To 26
If Worksheets(MappenName).Cells(i, 1).Value = DN Then
For j = 3 To 43
If Worksheets(MappenName).Cells(3, j).Value = Isocode Then
Isolierung = Worksheets(MappenName).Cells(i, j).Value
End If
Next j
End If
Next i
End If
End If
End Function

Vielen Dank im Voraus für eure Hilfe!
Möglicherweise sehe ich den Wald vor lauter Bäumen nicht mehr. Ich denke entweder zu einfach, oder was auch gerne mal vorkommt, viel zu kompliziert.
Grüße,
Tigerente

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 12:43:12
Michael
Hi,
daß "nichts" zurückgegeben wird, liegt daran, daß die For-Schleife, die sich einen Wert "holt", innerhalb des letzten Else-Zweiges liegt: d.h. der Code kommt überhaupt nur dann zur Schleife, wenn alles andere vorher nicht zutrifft.
Das Makro läßt sich besser strukturieren:
Function Isolierung(DN, Bereich, Code, Temp)
Dim i As Integer, j As Integer
Dim MappenName As String
Dim Isocode As String
If Len(DN) = 0 Then Isolierung = "": Exit Function
If Code = "-" Or Bereich = "-" Then Isolierung = 0: Exit Function
Isocode = Code & Temp
If Code = "KF" Or Code = "TF" Or Code = "GF" Then
MappenName = Bereich & "_" & "DF"
ElseIf Code = "KO" Or Code = "TO" Or Code = "GO" Then
MappenName = Bereich & "_" & "DO"
ElseIf Code = "K" Or Code = "T" Or Code = "G" Then
MappenName = Bereich & "_" & "D"
ElseIf Code = "M1" Then
MappenName = Bereich & "_" & "W1"
ElseIf Code = "M2" Then
MappenName = Bereich & "_" & "W2"
Else
MappenName = Bereich & "_" & Code
End If
For i = 5 To 26
If Worksheets(MappenName).Cells(i, 1).Value = DN Then
For j = 3 To 43
If Worksheets(MappenName).Cells(3, j).Value = Isocode Then
Isolierung = Worksheets(MappenName).Cells(i, j).Value
Exit Function  ' raus, sobald gefunden
End If
Next j
End If
Next i
End Function
Schöne Grüße,
Michael
Anzeige
AW: VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 13:00:29
Tigerente
Hallo Michael,
vielen Dank für Deine Rückmeldung.
Dann war meine Idee ja schon gar nicht so falsch, nur die Umsetzung hat noch nicht so wirklich gepasst.
Ich habe es nun getestet, auch mit Deiner "aufgeräumten" Version meines Codes.
Aktuell kommt leider noch immer "0" heraus, ich werde jetzt aber noch ein wenig rumprobieren, woran das liegen kann.
Ich gebe dann nochmal Feedback!
Danke und Grüße,
Tigerente
AW: VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 13:13:35
Tigerente
Hier nun noch nach kurzem Testen mein versprochenes Feedback......Frau sollte dann auch alle Variablen durchexerzieren und nicht nur die Tabellenblätter.
Mit der Ergänzung, dass der Isocode auch definiert werden muss, funktioniert es:
If Code = "KF" Or Code = "TF" Or Code = "GF" Then
MappenName = Bereich & "_" & "DF"
Isocode = "DF" & Temp
ElseIf Code = "KO" Or Code = "TO" Or Code = "GO" Then
MappenName = Bereich & "_" & "DO"
Isocode = "DO" & Temp
ElseIf Code = "K" Or Code = "T" Or Code = "G" Then
MappenName = Bereich & "_" & "D"
Isocode = "D" & Temp
ElseIf Code = "M1" Then
MappenName = Bereich & "_" & "W1"
Isocode = "W1" & Temp
ElseIf Code = "M2" Then
MappenName = Bereich & "_" & "W2"
Isocode = "W2" & Temp
Else
MappenName = Bereich & "_" & Code
Isocode = Code & Temp
End If
Nochmal danke für die schnelle Hilfe!
Grüße,
Tigerente
Anzeige
freut mich, danke für die Rückmeldung,
02.01.2017 13:26:28
Michael
Hi,
hatte Deine übernächste Nachricht gar nicht gesehen gehabt; aber dann paßt's ja.
Schöne Grüße,
Michael
zum Testen kannst Du,
02.01.2017 13:18:23
Michael
Tigerente,
ja mal eine msgbox zwischen dem Endif und dem For platzieren und Dir die Werte ausgeben lassen:
msgbox mappenname
und vor das Exit Function in der inneren Schleife noch eine mit
msgbox "Innen" & Worksheets(MappenName).Cells(i, j).Value
dann siehst Du, welche "erreicht" wird - oder auch nicht, weil der Wert vielleicht gar nicht vorhanden ist (Schreibweisen, Unterstriche usw.).
Gruß,
M.
AW: VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 13:14:59
Gerd
Hallo,
soo wie unten sortiert, fällt dir vielleicht etwas im Blick auf deine Vorstellungen auf.
Von mir erst nur soviel:
Variablen inmitten der Prozedur zu deklarieren, bringt nichts. Sie werden stets zu Beginn der Laufzeit initiert. Deshalb sollte man die Dim-Anweisungen wegen Übersichtlichkeit an den Anfang stellen.
Die Schleife weist, sofern die Bedingungen (Else-Zweig u. DN) zutreffen, dem Funktionswert ggf. 22 x 41 mal Zellenwerte zu. Er hat dann stets den Wert der letzten Zuweisung vor dem Verlassen der Schleife (Wert von "rechtsunten").
Teste mal mit der F8-Taste Einzelschrittmodus u. beobachte die Variablen im Lokalfenster.
Gruß Gerd
Function Isolierung(DN, Bereich, Code, Temp)
Dim i As Integer, j As Integer
Dim MappenName As String
Dim Isocode As String
If Len(DN) = 0 Then
Isolierung = ""
ElseIf Code = "-" Or Bereich = "-" Then
Isolierung = 0
Else
Isocode = Code & Temp
If Code = "KF" Or Code = "TF" Or Code = "GF" Then
MappenName = Bereich & "_" & "DF"
ElseIf Code = "KO" Or Code = "TO" Or Code = "GO" Then
MappenName = Bereich & "_" & "DO"
ElseIf Code = "K" Or Code = "T" Or Code = "G" Then
MappenName = Bereich & "_" & "D"
ElseIf Code = "M1" Then
MappenName = Bereich & "_" & "W1"
ElseIf Code = "M2" Then
MappenName = Bereich & "_" & "W2"
Else
MappenName = Bereich & "_" & Code
For i = 5 To 26
If Worksheets(MappenName).Cells(i, 1).Value = DN Then
For j = 3 To 43
If Worksheets(MappenName).Cells(3, j).Value = Isocode Then
Isolierung = Worksheets(MappenName).Cells(i, j).Value
End If
Next j
End If
Next i
End If
End If
End Function

Anzeige
AW: VBA: Variablem mit selbem Inhalt/Verweis
02.01.2017 13:37:23
Tigerente
Hallo Gerd,
auch Dir vielen Dank für die Hilfe!
Die Erklärung von Michael mit der Schleife hat mir für den ersten Schritt schon sehr weitergeholfen.
Und dann ist mir im zweiten Schritt noch aufgefallen, dass ich noch eine Variable vergessen habe.
Nun funktioniert es wie es soll!
Top, dass hier so schnell dabei geholfen wird, dass "die Tomaten von den Augen fallen".
Grüße,
Tigerente

333 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige