Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
648to652
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
648to652
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 17:00:24
Micha
Hallo Spezis,
aus nachfolgendem code geht hervor:
Bei Auswahl einer bestimmten Celle oder eines bestimmten Zellbereiches (za As Range, wobei nur Zellen ausgewählt werden können, die 66.75x45 groß sind) wird ein UserForm aufgerufen, in dem wiederum 1 Wert ausgewählt werden muß, der dann za zugewiesen werden soll.
za ist aber dem UserForm nicht bekannt. Was kann ich tun?
das ist der Code vom Blatt:
Public za As Range
-----------------------------------------------------------------

Private Sub Worksheet_SelectionChange(ByVal za As Range)
If za.Width / za.Count = 66.75 And za.Height = 45 Then Artikelwahl.Show
End Sub

das ist der Code vom UserForm 'Artikelwahl':
Public za As Range
Option Explicit
------------------------------------------------------------------
Public Sub box1_KeyDown(ByVal Taste As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case Taste
Case 13 'Enter
Range("N6").Value = box1.ListIndex
Range("N7").Value = box1.Value
!!!Range(za.Address).Value = box1.Value!!!
Unload Me

Case 27 'ESC
Unload Me
End Select
End Sub
Die Zeile mit den 6x! ist die um die es geht.
!!!Range(za.Address).Value = box1.Value!!!
Wenn ich aber statt dessen "Range(za.Address).Value = Range("N7").Value" in der ersten Routine nach der If Anweisung, also nach dem Userform, aufrufe, geht es.
Ich möchte aber gern den "Umweg" über N7 vermeiden!! Habt ihr eine Idee?
Gruß Micha

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 17:17:18
IngGi
Hallo Micha,
die Variable za muss in einem benutzerdefinierten Modul deklariert werden. Füge im VBA-Editor ein solches Modul ein (Einfügen-Modul) und setze die Zeile "Public za As Range" aus dem Modul deiner UserForm in dieses benutzerdifinierte Modul um.
Gruß Ingolf
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 17:29:14
Micha
Sorry, Fehler 91 nach wie vor.
Die Declarierung von az in einem Modul nützt nix. Hast du noch eine Idee?
Gruß Micha
az oder za ?
08.08.2005 17:53:59
ransi
hallo micha
Die Declarierung von "az"..
wenn du wirklich "az" geschrieben hast kanns nicht gehn.
ransi
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 17:38:28
Micha
warscheinlich von euch nicht registriert, desshalb nochmal:
Die Variable in einem Modul zu declarieren nützt nichts!! Nach wie vor kommt Fehler 91 !!!
Habt ihr noch eine Idee?
Gruß Micha
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 18:39:31
IngGi
Hallo Micha,
ich bin leider mit meinem Latein am Ende. Mir ist schleierhaft, wie das über den Umweg über Zelle N7 funktionieren soll, denn die Variable za ist - da nicht global deklariert - im Makro der UserForm zwar deklariert, aber nicht definiert (müsste auf nothing stehen). Demzufolge müsstest du bei Range(za.Address)... eine Fehlermeldung bekommen (Variable nicht definiert), und zwar unabhängig davon, ob hinten box1... oder Range("N7")... steht. Bin selbst mal gespannt, wie sich das auflöst ;-)
Gruß Ingolf
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 18:28:52
PeterW
Hallo Micha,
probier das mal so:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Width / Target.Count = 66.75 And Target.Height = 45 Then
Set za = Target
Artikelwahl.Show
End If
End Sub

Gruß
Peter
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 19:22:05
Micha
Hallo Peter,
nee, tut mir leid, mit Set funzt es auch nicht.
Hallo Ingolf,
du hast mich bestimmt falsch verstanden: Range(za.Address).Value = Range("N7").Value steht nicht im UserForm, sondern im SelectionChange vom Woksheet, gleich nach der Show-Anweisung!!
Übrigens: die Variable heißt nach wie vor za!! (soviel wie Z ellen A uswahl)
Noch jemand eine Idee?
Gruß Micha
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 19:39:13
PeterW
Hallo Micha,
solche Sachen teste ich - und sei es um Tippfehler auszuschließen. ;-) Du hast den Parameter beim Aufruf der Routine von za auf Target geändert? Public za As Range steht in einem Standardmodul vor allen Prozeduren?
Gruß
Peter
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 19:46:02
Micha
ja, in einem Standartmodul in der Declarierung (Allgemein, Declaration).
Ich hab mir schon überlegt mit Copy und Paste zu arbeiten, nur hab ich von der UserForm 2 Werte zu übergeben, einen Range-Bezug wie schon gesagt und einen numerischen Wert.
Eigentlich muß das doch eine "Standartangelegenheit" sein, dem UserForm eine variable zu übergeben bzw. einen Wert von der UserForm zu "empfangen"....oder?
Gruß Micha
AW: Wie übergebe ich ein Range-Objekt zum Userform?
08.08.2005 19:54:46
PeterW
Hallo Micha,
leider keine weitere Idee - deswegen noch offen.
Gruß
Peter
AW: Wie übergebe ich ein Range-Objekt zum Userform
08.08.2005 23:57:09
Matthias
Hallo Micha,
vielleicht kann ich weiterhelfen...
Ich hab das Ganze mal in einfacher Form nachgebaut:
eine "Userform1" mit einem Button und diesem Code:

Option Explicit
Dim Bereich As Range
Sub Show2(b As Range)
Set Bereich = b
Me.Show
End Sub
Private Sub CommandButton1_Click()
Bereich.Value = 1
End Sub

und ins Tabellenblattmodul:

Private Sub Worksheet_SelectionChange(ByVal za As Range)
If Not Intersect(za, Columns(3)) Is Nothing Then UserForm1.Show2 za
End Sub

Wenn dann ein Bereich in Spalte 3 markiert wird, öffnet sich die Userform, beim Klick auf den Button wird der Bereich mit 1en gefüllt.
Hilft das weiter?
Gruß Matthias
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
09.08.2005 00:56:58
IngGi
Hallo Micha,
also jetzt wirds richtig spannend. Du sagst, die Zeile "Range(za.Address).Value = Range("N7").Value" steht in der Selection_Change-Prozedur im Worksheet-Klassenmodul. Laut deinen eigenen Codefetzen aus deiner ursprünglichen Frage steht diese Zeile aber eindeutig in der Key_down-Prozedur deiner Listbox im Klassenmodul deiner UserForm "Artikelwahl".
Wenn die fehlerhafte Programmzeile tatsächlich im Klassenmodul des Arbeitsblattes steht, ist der Bezug auf die Listbox in jedem Fall unvollständig, weil du die UserForm mit angeben musst, also: "Range(za.Address).Value = Artikelwahl.box1.Value".
Trotzdem verstehe ich nach wie vor nicht, warum der indirekte Weg über N7 funzt. Wenn das Ganze wie gesagt im Klassenmodul des Arbeitsblattes steht, dann dürfte "Range("N7").Value = box1.Value" nämlich genauso wenig funktionieren, es sei denn diese Zeile steht jetzt im Klassenmodul der UserForm.
Auf jeden Fall bin ich jetzt mal richtig gespannt, wie das Ganze ausgeht. Lad die Arbeitsmappe gegebenenfalls mal hoch, damit man nicht immer im Trüben fischen muss.
Gruß Ingolf
Anzeige
AW: Wie übergebe ich ein Range-Objekt zum Userform?
09.08.2005 09:25:17
Micha
Hallo Ingolf,
"Range(za.Address).Value = Range("N7").Value" steht natürlich in der Selection_Change-Prozedur im Worksheet-Klassenmodul, weil auch nur dort bis jetzt (solange mein Problem nicht gelöst ist) za bekannt ist und ich den Umweg nehmen muß.
Auf N7 hab ich ja von überall her zugriff!
Aber eigentlich will ich ja "Range(za.Address).Value = box1.Value" ins Klassenmodul der UserForm haben!! Und dort ist za nicht bekannt und desshalb auch kein Zugriff möglich.
Aber ich glaube Matthias hats!! Then UserForm1.Show2 za übergibt ja offensichtlich za mit ans UserForm. Habs noch nicht getestet, bin aber zuversichtlich.
Danke erst einmal, meld mich dann nochmal obs geht.
Gruß Micha
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige