Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit 'Case' zerstört Verweise

mit 'Case' zerstört Verweise
11.02.2015 16:17:26
Adrian
Hallo Zusammen,
in meiner Datei soll ein Makro nach den Werten aus einem Dropdown-menü Verweis-Formeln in Zellen umschreiben, die Daten aus anderen Sheets mit variablen Namen ziehen.
Wenn ich das Ganze ohne 'Case' durchlaufen lasse, funktioniert es und er zieht erfolgreicht die Daten aus den entsprechenden Sheets.
Mit Case jedoch findet er die Sheets plötzlich nicht mehr.
Dim Projekt1 As String
Dim Projekt2 As String
Dim Projekt3 As String
Dim Projekt4 As String
Dim Projekt5 As String
Projekt1 = Range("B25").Value
Projekt2 = Range("B26").Value
Projekt3 = Range("B27").Value
Projekt4 = Range("B28").Value
Projekt5 = Range("B28").Value
Preisliste1 = "Preise(" & Projekt1 & ")"
Preisliste2 = "Preise(" & Projekt2 & ")"
Preisliste3 = "Preise(" & Projekt3 & ")"
Preisliste4 = "Preise(" & Projekt4 & ")"
Preisliste5 = "Preise(" & Projekt5 & ")"
If Selection.Address = "$H$4" Then
With ActiveSheet
Select Case Target
Case Projekt1
Worksheets("Eingabe").Range("D4").ClearContents
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('" & Preisliste1 & "'!$  _
_
A$1:$A$1995=B4);'" & Preisliste3 & "'!$C$1:$C$1995)"
Case Projekt2
Worksheets("Eingabe").Range("D4").ClearContents
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('" & Preisliste2 & "'!$  _
_
A$1:$A$1995=B4);'" & Preisliste3 & "'!$C$1:$C$1995)"
Case Projekt3
Worksheets("Eingabe").Range("D4").ClearContents
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('" & Preisliste3 & "'!$  _
_
A$1:$A$1995=B4);'" & Preisliste3 & "'!$C$1:$C$1995)"
Case Projekt4
Worksheets("Eingabe").Range("D4").ClearContents
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('" & Preisliste4 & "'!$  _
_
A$1:$A$1995=B4);'" & Preisliste3 & "'!$C$1:$C$1995)"
Case Projekt5
Worksheets("Eingabe").Range("D4").ClearContents
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('" & Preisliste5 & "'!$  _
_
A$1:$A$1995=B4);'" & Preisliste3 & "'!$C$1:$C$1995)"
End Select
End With
End If

Ohne case fügt er die korrekten verweise ein:
=VERWEIS(2;1/('Preise(Variable)'!$A$1:$A$1995=B10);'Preise(SalesPromotion)'!$C$1:$C$1995)
Mit Case fehlt aus irgendeinem Grund die Variable und er fügt nur folgendes ein
=VERWEIS(2;1/('Preise()'!$A$1:$A$1995=B10);'Preise(SalesPromotion)'!$C$1:$C$1995)

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit 'Case' zerstört Verweise
11.02.2015 17:12:49
ChrisL
Hi Adrian
Target = Range
Projekt1 = String
Du vergleichst zwei verschiedene Datentypen, darum gibt es keine Übereinstimmung.
Ich weiss leider nicht, was in deinem String steht. Aber vielleicht ändern in:
Select Case Target.Value
cu
Chris

AW: mit 'Case' zerstört Verweise
11.02.2015 18:09:01
Adrian
Die Variablen sind die jeweiligen Projektnamen, also Text.
In der Datei kann man Projektnamen eintragen, dementsprechend werden automatisch neue Sheets mit Preislisten für das jeweilige Projekt angelegt.
In einem Dropdown-Menu möchte ich auswählbar machen, aus welchen Sheets die Preise gezogen werden.
Ich habe also ein Dropdown Menü in H4, welches die sich die Projektnamen zieht. Darunter einen Button "Preise aktualisieren" der das oben gezeigte Makro aktiviert.
Mit diesem Makro versuche ich den Verweis in D4 so zu ändern, dass er sich die Preise der Produkte in B4 aus den jeweiligen Sheets zieht, die im Dropdown ausgewählt werden.
Habe ich evtl einen falschen Lösungsansatz?

Anzeige
AW: mit 'Case' zerstört Verweise
11.02.2015 18:22:48
ChrisL
Hi Adrian
Ich denke der Ansatz passt schon. Müsste morgen mal testen, aber ich vermute das Problem ist wie erwähnt der unterschiedliche Datentyp. Allerdings war mein Vorschlag leicht daneben.
Ändere
Select Case Target
in
Select Case Target.Text
oder
Select Case CStr(Target.Value)
Oder
Dim strTarg As String
strTarg = Target.Value
Select Case strTarg
Will damit nur sagen, dass du zwingend String mit String vergleichen solltest.
cu
Chris

AW: mit 'Case' zerstört Verweise
12.02.2015 16:52:16
Adrian
Hallo Zusammen,
danke an alle für die Hilfe.
Mit Select Case strTarg hats dann funktioniert.
Meine Version ist damit die vermutlich längst-mögliche Schreibweise aber es funktioniert:)

Anzeige
Ja, das stimmt, umständlich u.unelegant! ;-] owT
12.02.2015 19:33:37
Luc:-?
:-?

Das ist irrelevant, Chris, denn 'Select Case' ...
11.02.2015 19:11:44
Luc:-?
…sollte nicht Target als Range-Objekt, sondern seine Standard­Eigenschaft verwenden und das ist nunmal .Value!
Damit Select Case wie gewünscht fktioniert, Adrian,
muss die angeklickte Zelle H4 auch tatsächlich einen der Werte aus den Zellen, die deine String-Variablen speisen, enthalten. Da du kein CaseElse dabei hast, mit dem du das überprüfen könntest, bleibt der FmlEintrag im NegativFall leer.
Leider hast du beim Einstellen deines Pgms nicht beachtet, was dir der ForumsBetreiber im Kopf der NachrichtenVorschau mitteilt, nämlich das Pgm, auch mit eingefügten Umbrüchen ([Leerzeichen][Tiefstrich]) so zu strukturieren, dass es hier ordentlich angezeigt wdn kann. Die HTML-pre-Tags hast du ja wenigstens benutzt, aber die Forumssoftware fügt die ' _' bei überlangen Zeilen selbsttätig (und nicht immer an der richtigen Stelle!) ein. Dadurch wird dein Pgm-Ausschnitt unübersichtlich und lädt nicht gerade zur Begut­achtung ein.
Aber soviel kann ich doch sagen, das ganze Select Case-Konstrukt ist überflüssig, denn es handelt sich ja immer um dieselbe Fml, nur 1 Teil wird variiert. Das kann man auch anders lösen! Dabei wäre bspw hilfreich, wenn du nicht 5 verschiedene Projekt-Variablen angelegt hättest → ein Array würde es auch tun, also bspw so: Dim Projekt() As String
Falls die Doppel­Verwendung von Range("B28") für 2 Variablen ein Fehler sein und es im Wieder­holungs­fall eigentlich Range("B29") heißen sollte, könnte man diese Variable auch ganz einfach so füllen: (in der Dekla­ration Const adProBer$ = "B25:B29" ergänzen!)
Projekt = Split(Join(WorksheetFunction.Transpose(Range(adProBer)), "⋮"), "⋮"
Damit erhältst du die Variablen Projekt(0)…(4). Die Variable Preisliste könnte genauso aufgebaut wdn, was aber eigentl gar nicht nötig ist, denn die Fml kann auch wie folgt zusammen­gestellt wdn: (in der Deklaration Dim ProNr As Long ergänzen!)
On Error Resume Next
ProNr = WorksheetFunction.Match(Target, Projekt, 0): On Error GoTo 0 'hier besser F-Behdl!
If CBool(ProNr) Then
Worksheets("Eingabe").Range("D4").FormulaLocal = "=VERWEIS(2;1/('Preise(" & Projekt(ProNr _
- 1) & ")'!$A$1:$A$1995=B4);'Preise(" & Projekt(2) & ")'!$C$1:$C$1995)"
Else: MsgBox "Projekt nicht gelistet!", , vbCritical, "Projekt " & CStr(Target)
End If
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: mit 'Case' zerstört Verweise
11.02.2015 21:50:08
Uduuh
Hallo,
sollte das nicht z.B.
Case "Projekt1"
heißen?
Außerden musst du beachten, dass Case die Groß- und Kleinschreibung berücksichtigt.
Besser also
Select Case LCase(Target)
Case "projekt1"
Case "projekt2"
End Select
Gruß aus’m Pott
Udo

Wie kommst du darauf, Udo, das ist doch eine ...
12.02.2015 01:59:28
Luc:-?
String-Variable?!
Gruß, Luc :-?
Besser informiert mit …

wer lesen kann, .... owT :-(
12.02.2015 10:40:59
Uduuh

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige