Guten Abend
Kann man VB-Ranges globlal deklarieren? Ich finde keine Lösung?
Dazu meine Gedanken und Anforderungen.
Für meine Aufgabe will ich in einem Bereich in zwei Spalten Werte suchen. Das mache ich mit der nachfolgenden Code-Sequenz.
Wenn die aktive Zelle im Range1 ist, suche ich den Zellinhalt in der andern Spalte (Range2). Und manchmalaus der Büchse auch umgekehrt.
Diese Aufgabe kommt in ähnlicher oder gleicher Form in mehr als einer Prozedur vor. Aber immer in den gleichen Bereichen.
Die folgenden Deklarationen sind hier innerhalb der Prozedur. Ich möchte diese aber global machen um sie in mehren Prozeduren nutzen.
In der Suchzeile wäre sicher noch angenehm, Fehler abzufangen (keine Übereinstimmung gefunden)
Mit den folgenden Codesequenzen funktioniert es nicht. Nach zwei drei Clicks (neuen Abfragen) ist iTablength = 0 und Bereich_CD Nothing.
Deklarationen im Modul1
Die Werte iTablength und Bereich:C .. werden irgendwie überschrieben. Die Anwendung funktioniert so, dass bei Doppelklick auf eine Zelle sich das Formular öffnet und einige Werte angezeigt werden. Dann kann der Wert in einer Textbox geändert werden. Beim Ereignis Exit auf die Textbox wird das Formular aktualisiert. Das Formular kann auch mit einem Commandbutton geöffnet werden. Das Formular kann natürlich auch geschlossen werden. Dann kann das das Spiel wieder von vorne beginnen.
Zum Range-Objekt habe ich noch folgende Versuche gemacht. Warum gehen Methoden mit Bereich_C nicht
' Variante, mein Versuch. Was ist da falsch
Danke für Diskussionsbeiträge.
Schöne Grüsse
Fritz
Kann man VB-Ranges globlal deklarieren? Ich finde keine Lösung?
Dazu meine Gedanken und Anforderungen.
Für meine Aufgabe will ich in einem Bereich in zwei Spalten Werte suchen. Das mache ich mit der nachfolgenden Code-Sequenz.
Wenn die aktive Zelle im Range1 ist, suche ich den Zellinhalt in der andern Spalte (Range2). Und manchmalaus der Büchse auch umgekehrt.
Diese Aufgabe kommt in ähnlicher oder gleicher Form in mehr als einer Prozedur vor. Aber immer in den gleichen Bereichen.
Die folgenden Deklarationen sind hier innerhalb der Prozedur. Ich möchte diese aber global machen um sie in mehren Prozeduren nutzen.
Dim iTablength As Integer ' die Tabellenlänge kann erweitert (oder gekürzt) werden
Dim Bereich_CD, Bereich_C, Bereich_D As Range
iTablength = Sheets("Stammbaum.C.D.").Cells(Rows.Count, 3).End(xlUp).Row ' 3 für Spalte C
Set Bereich_C = Range("C2:C" & iTablength)
Set Bereich_D = Range("D2:D" & iTablength)
Set Bereich_CD = Range("C2:D" & iTablength)
If Not Intersect(ActiveCell, Bereich_CD) Is Nothing Then ' 2x negiert ist wahr
If Not Intersect(ActiveCell, Bereich_D) Is Nothing Then ' 2x negiert ist wahr
Bereich_C.Find(ActiveCell.Text, LookIn:=xlValues, lookat:=xlWhole).Activate 'ID_Vater in C suchen
End If
UserForm1.Show
End If
[/ISPOILER]In der Suchzeile wäre sicher noch angenehm, Fehler abzufangen (keine Übereinstimmung gefunden)
Mit den folgenden Codesequenzen funktioniert es nicht. Nach zwei drei Clicks (neuen Abfragen) ist iTablength = 0 und Bereich_CD Nothing.
Deklarationen im Modul1
Option Explicit
' Variablen
Public iTablength As Integer
' Ranges für Tabelle1(Stammbaum.C.D.) (Zugriff auf Zellen)
Public Bereich_C, Bereich_D, Bereich_CD As Range
Initialisierung der Variablen in der Prozedur Workbook_Open()
Private Sub Workbook_Open()
iTablength = Sheets("Stammbaum.C.D.").Cells(Rows.Count, 3).End(xlUp).Row '3 für Spalte C
Set Bereich_C = Range("C2:C" & iTablength)
Set Bereich_D = Range("D2:D" & iTablength)
Set Bereich_CD = Range("C2:D" & iTablength)
End Sub
Die Werte iTablength und Bereich:C .. werden irgendwie überschrieben. Die Anwendung funktioniert so, dass bei Doppelklick auf eine Zelle sich das Formular öffnet und einige Werte angezeigt werden. Dann kann der Wert in einer Textbox geändert werden. Beim Ereignis Exit auf die Textbox wird das Formular aktualisiert. Das Formular kann auch mit einem Commandbutton geöffnet werden. Das Formular kann natürlich auch geschlossen werden. Dann kann das das Spiel wieder von vorne beginnen.
Zum Range-Objekt habe ich noch folgende Versuche gemacht. Warum gehen Methoden mit Bereich_C nicht
Private Sub Test()
Range("C5:D10").Text ' funktioniert, nach dem Punkt zeigt VB eine Auswahl von Eigenschaften und Methoden
' Variante, mein Versuch. Was ist da falsch
Bereich_C = Range("C5:D10") oder Set Bereich_C = Range("C5:D10")
Bereich_C. ' nach dem Punkt werden keine Eigenschaften und Methoden angeboten
End Sub
Danke für Diskussionsbeiträge.
Schöne Grüsse
Fritz
Zuletzt bearbeitet: