Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
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
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Namensdefinition in Makros verwenden

Namensdefinition in Makros verwenden
29.10.2007 20:40:04
Andreas
Hallo liebe Excel Freunde,
ich probiere mich derzeit an der Problemstellung, die Bezüge von Makros auf Zellen relativ auszugestalten. Ähnlich wie bei den Formeln. D.h. wenn ich im VBA Code auf eine Zelle verweise (bspw. C1), in der ein Suchstring steht, dann soll diese Zelle auch noch vom Code gefunden werden, wenn ich eine Spalte eingefügt habe und der String dann in D1 steht. (Analog für das Einfügen von Zeilen, der String dann in C2 stünde)
Im Forum habe ich einen guten Hinweis dazu erhalten, aber meine VBA Kenntnisse reichen noch nicht aus, um diesen adäquat in den bestehenden Code einzubetten. Der Tip war, über „Einfügen – Namen definieren“ die Zellen als Namensdefinitionen zu hinterlegen, die vom Makro angesprochen werden können.
In einem kleinen Testmodul hat das auch funktioniert. Ich habe über Range(„Namensdefinition“) in einer Messagebox den Inhalt wiedergeben können, der in der Zelle steht, die sich hinter „Namensdefinition“ verbirgt.
Was ich dabei jedoch nicht hinbekommen habe war, die Namensdefinition auch über cell(…) anzusprechen.
Ist es korrekt über Range zu gehen, um eine Namensdefinition in VBA zu verwenden? Ich habe keinen Hinweis dazu im Forum finden können? Was wäre der richtige/ optimale Weg?
In meinem Beispielmakro hat es nicht funktioniert, statische Zellbezüge gegen relative auszutauschen. Es kommt nicht einmal eine Fehlermeldung, ich kann also über den Debugger nirgendwo ansetzen, um über die Hilfe weiter zu kommen.
Ich wäre sehr dankbar, wenn mir jemand den Hinweis gibt, wie ich Namensdefinitionen korrekt und sicher in VBA Codes integrieren kann oder irgendeinen anderen Weg aufzeigt, Bezüge in VBA Codes relativ zu gestalten.
Beispieldatei:
https://www.herber.de/bbs/user/47238.xls
Vielen Dank für Eure Mühe und einen angenehmen Abend.
Gruß, Andreas Hanisch

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Namensdefinition in Makros verwenden
29.10.2007 20:54:00
{Boris}
Hi Andreas,
da waren ein paar kleine Fehlerchen drin - ich habe die Änderungen markiert:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim suchArea As Range, Zelle As Range
Set suchArea = Range("String_C_Eins")
Dim lRow As Long, x As Long
Dim strSuchbegriff As String
If Target.Address = Range("String_C_Eins").Address Then '
For Each Zelle In suchArea
If Zelle.Value = "" Then Zelle.Value = "Bitte Suchbegriff eingeben"
Next Zelle
Set suchArea = Nothing
With Tabelle1
strSuchbegriff = "*" & UCase(.Range("String_C_Eins")) & "*"
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
For x = 3 To lRow
If .Cells(x, 1) = 1 And UCase(.Cells(x, 3)) Like strSuchbegriff Then
.Range("C" & x).Interior.ColorIndex = 44 '
ElseIf .Cells(x, 1) = 1 Then
.Range("C" & x).Interior.ColorIndex = 36 '
End If
Next x
End With
End If
End Sub


Mit der Cells-Eigenschaft kannst Du übrigens keine Namen ansprechen.
Grüße Boris

Anzeige
AW: Namensdefinition in Makros verwenden
29.10.2007 21:27:00
Andreas
Hallo Boris,
vielen Dank für Deine Änderungen. Es läuft nun in Bezug auf die Zelle mit dem Suchstring. Ich kann also Zeilen darüber einfügen und das Makro funktioniert trotzdem. Sehr gut. Dort, wo Du die 2. und 3. Änderung durchgeführt hast, hatte ich vorher auch eine Namensdefinition, die den Spaltenbezug relativ setzen soll.
Welche Möglichkeiten gibt es an dieser Stelle? Mit der column Funktion, die gibt aber doch den Spaltenindex als Zahl raus. Mal ganz laienhaft und mit meinem Formelwissen gesprochen würde mir da folgende Syntax einfallen:
.Range((Spaltenbuchstabe von "String_C_Eins") & x)
oder den Range irgendwie mit dem Spaltenindex ansprechen; diesen als "Sting_C_Eins".column.adress (0,0) bestimmen.
Ich kann kaum noch klar denken. Es war ein langer Tag. Ich werde nun wohl Feierabend machen. Würde mich freuen von Dir zu hören, ob diese Ansätze Erfolg versprechen.
Habe einen guten Abend, Boris.
Grüße, Andreas

Anzeige
AW: Namensdefinition in Makros verwenden
29.10.2007 22:01:11
{Boris}
Hi Andreas,
dann so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim suchArea As Range, Zelle As Range
Set suchArea = Range("String_C_Eins")
Dim lRow As Long, x As Long
Dim strSuchbegriff As String
If Target.Address = Range("String_C_Eins").Address Then
For Each Zelle In suchArea
If Zelle.Value = "" Then Zelle.Value = "Bitte Suchbegriff eingeben"
Next Zelle
Set suchArea = Nothing
With Tabelle1
strSuchbegriff = "*" & UCase(.Range("String_C_Eins")) & "*"
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
For x = 3 To lRow
If .Cells(x, 1) = 1 And UCase(.Cells(x, Range("Spalte_C").Column)) Like strSuchbegriff  _
Then
.Range("Spalte_C")(x, 1).Interior.ColorIndex = 44 '


Die Spalte des benannten Bereiches wird mit
Range("Spalte_C").Column
ausgelesen.
Und ein bestimmter Eintrag aus diesem benannten Bereich mit
Range("Spalte_C")(x, 1)
Grüße Boris

Anzeige
AW: Namensdefinition in Makros verwenden
30.10.2007 13:28:00
Andreas
Hallo Boris,
vielen Dank. Ich habe gestern noch Deine Antwort gesehen, war aber zu kaputt, sie noch zu testen. Das habe ich gerade getan und sie funktioniert fehlerfrei!
Auch Deine Hinweise am Ende des Codes erschließen sich mir nach dem Testen einigermaßen plausibel.
Du bist in diesen Makro- Fragen eine der Stützen dieses Forums! Hast mir ja nicht das erste Mal geantwortet...
Dank und Gruß aus Berlin,
Andreas Hanisch

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige