Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
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

VBA: Wert aus einer Liste auslesen

VBA: Wert aus einer Liste auslesen
26.05.2023 22:30:01
Matthias

Liebes Forum.

ich stehe wieder auf dem Schlauch! Aus einer Liste, die auf einem Tabellenblatt steht, soll mittels VBA in einem anderen Blatt ein bestimmter Wert ausgelesen werden.

Zugriff auf die Liste habe ich über den Namen, den ich mit dem Namensmanager vergeben habe: Application.Names("Daten"). Nun möchte ich aus dieser Liste z.B. den dritten Eintrag auslesen. Welche VBA-Code brauche ich dazu?

Die EXCEL-Funktion INDEX (Beispiel INDEX("Daten";3) geht so in VBA nicht.

Ich freue mich auf Unterstützung. Vielen Dank!

Matthias

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Wert aus einer Liste auslesen
27.05.2023 01:04:23
Luschi
Hallo Matthias,

in einem normalem Modul (nicht Klassenmodul der Tabellen) folgende Funktion erstellen:
Function HoleWert(xName As String, pos As Integer) As Variant
    HoleWert = Names(xName).RefersToRange.Cells(pos, 1).Value
End Function
In 1 Zelle die Formel =HoleWert("Tirallala"; 3) eintragen, wobei "Tirallala" zu ersetzen ist mit Deinem vergebenen Excelnamen für den Zellbereich.

Gruß von Luschi
aus klein-Paris


AW: VBA: Wert aus einer Liste auslesen
27.05.2023 08:50:38
ralf_b
wenn der Name Mappenweit deklariert wurde, könnte es so gehen, ungetestet
Worksheetfunction.INDEX(Range("Daten"),3)


Anzeige
AW: VBA: Wert aus einer Liste auslesen
27.05.2023 09:40:30
Pappawinni
Da gibt es mehrere Möglichkeiten, dabei auch die WorksheetFunction

Dim myValue As Variant
myValue = Application.WorksheetFunction.Index(Range("Daten"), 3, 1)
Debug.Print myValue
oder z.B. auch

Dim myValue As Variant
myValue = Range("Daten").Item(3, 1)
Debug.Print myValue


AW: VBA: Wert aus einer Liste auslesen
28.05.2023 14:11:30
Matthias
Liebes Forum,

erstmal vielen Dank für die bisherigen Antworten.

Aber: leider haben sie nicht funktioniert. Ich bekomme Fehlermeldungen wie z.B. "Laufzeitfehler '1004': Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen".

Ich präzisiere nochmal, worum es geht: Auf einem Tabellenblatt "Daten" habe ich per Namensmanager einen Bereich "Daten123" definiert; der besteht aus 5 untereinanderstehenden Zellen mit sich häufig ändernden Daten (v.a. Zeilennummern). Nun sollen über eine Sub-Prozedur Einträge in einem bestimmten Bereich eines anderen Tabellenblatt in Großbuchstaben geändert werden; der Code dazu lautet

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B5:AF30")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Target.Value > "k" Then
        Target.Value = UCase(Target.Value)
    End If
    Application.EnableEvents = True
End Sub
Das funktioniert auch, allerdings ist die Angabe des Bereichs, in dem die Änderung stattfinden soll, durch
 Range("B5:AF30")
festgelegt. Wenn sich dieser Bereich ändert, wird das in die dritte Zeile des Datenbereichs "Daten123" eingetragen; dort steht dann z.B. "B5:AF16"). Und jetzt weiß ich nicht, wie ich die Codezeile ändern muss, damit das Programm im Bereich "Daten123" nachschaut, wo die Großschreibung vorgenommen werden soll. Der Code

Range("B5:AF30")
müsste quasi in

INDEX(Range("Daten123," 3)
geändert werden; aber das funktioniert halt nicht.

Wer hat die zündende Idee?

Vielen Dank nochmal, und schöne Pfingsttage!

Matthias


Anzeige
AW: VBA: Wert aus einer Liste auslesen
28.05.2023 17:58:53
Pappawinni
also
INDEX(Range("Daten123," 3)
wäre auch falsch, aber mal ne Frage:
Wie hast du denn die Gültigkeit deines Datenbereichs "Daten123" festgelegt, für die Arbeitsmappe (Workbook) oder für eine bestimmte Tabelle (Worksheet)?


AW: VBA: Wert aus einer Liste auslesen
28.05.2023 22:47:46
Matthias
Hallo Pappawinni,

vielen Dank für Deine Mühe!

Ich habe den Bereich im Namens-Manager festgelegt und gehe davon aus, dass er in der gesamten Arbeitsmappe gültig ist. Jedenfalls kann ich in EXCEL von jedem anderen Arbeitsblatt korrekt darauf zugreifen, und ich wüsste gar nicht, wo man die Gültigkeit im Namens-Manager festlegen könnte.

Dein Vorschlag
 If Intersect(Target, Range(Range("Daten123").Item(3, 1))) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
führt leider zum gleichen Laufzeitfehler.

Grüße

Matthias


Anzeige
AW: VBA: Wert aus einer Liste auslesen
28.05.2023 22:53:29
Matthias
Sorry für den Nachtrag:

Ich habe gerade nochmal nachgesehen und festgestellt, dass der Gültigkeitbereich "Arbeitsmappe" ist. Das sollte doch passen ...

Matthias


AW: VBA: Wert aus einer Liste auslesen
29.05.2023 00:14:29
Pappawinni
Dann schlage ich vor, du setzt mal
debug.print Range("Daten123").Item(3,1)
um zu sehen, ob das a) den richtigen Wert liefert oder b) einen Fehler bringt
die ausgabe von debug.print erfolgt im Direktfenster.


AW: VBA: Wert aus einer Liste auslesen
29.05.2023 02:45:27
Pappawinni
Ich hab jetzt doch mal ein wenig getestet und meine, dass
if Intersect(Target, Range(Application.Names("Daten123").RefersToRange.Cells(3, 1).Value)) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
funktionieren muss, weil mir sonst nichts mehr einfällt...


Anzeige
AW: VBA: Wert aus einer Liste auslesen
29.05.2023 17:37:10
Pappawinni
Besser

if Intersect(Target, Range(ThisWorkbook.Names("Daten123").RefersToRange.Cells(3, 1).Value)) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
es ginge auch:
if Intersect(Target, Range(Application.WorksheetFunction.Index(ThisWorkbook.Names("Daten123").RefersToRange, 3, 1)) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
Was mich tatsächlich wundert ist, dass auf dem Worksheet problemlos =INDEX(Daten123;3;1) angewandt werden kann, aber in VBA selbst bei der Worksheetfunction index dann Klimmzüge nötig sind.


Anzeige
AW: VBA: Wert aus einer Liste auslesen
28.05.2023 18:06:40
Pappawinni
Hier
If Intersect(Target, Range("B5:AF30")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
müsste das dann eher so aussehen
If Intersect(Target, Range(Range("Daten123").Item(3, 1))) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub


AW: VBA: Wert aus einer Liste auslesen
27.05.2023 17:15:49
snb
Reicht schon:

=F_snb("namen",3)
Function F_snb(c00, y)
  F_snb = Range(c00)(y, 1)
End Function
https://www.herber.de/bbs/user/159349.xlsb


Anzeige
AW: VBA: Wert aus einer Liste auslesen
27.05.2023 17:46:19
Pappawinni
Neee, nicht ernsthaft ne Funktion, oder wenn, dann vielleicht mit ner Überprüfung, z.B. ob row in einem gültigen Bereich liegt, sonst bringt die Funktion ja überhaupt keinen Mehrwert.


AW: VBA: Wert aus einer Liste auslesen
27.05.2023 18:23:39
snb
Ein Funktion setzt richtige Struktur voraus.


AW: VBA: Wert aus einer Liste auslesen
27.05.2023 19:32:01
Pappawinni
Was setzt deine Funktion voraus, was nicht ohnehin Voraussetzung ist?

321 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige