PDA

Vollständige Version anzeigen : Daten aus Userform übernehmen


Adrian1502
28.02.2008, 11:59
Hallo zusammen,
ich lasse über eine UserForm Text aus Textfeldern in dafür vorgesehene Zellen einfügen.
Zum "Start" klickt man in die Zelle (A9:A100), von der aus nach rechts weitere Zellen befüllt werden.
Daraufhin öffnet sich die Userform und die Textfelder werden befüllt. Per Klick werden dann die Zellen auf dem Sheet mit den Eingaben versehen.

Private Sub cmdEinfügen_Click()

Range("A9") = Text1
Range("B9") = Text2
Range("C9") = Text3
Range("D9") = Text4
Range("E9") = Text5
Range("F9") = Text6

Unload Me

End Sub


Dabei haben sich zwei Fragen ergeben:

1) Ich lege fest in welche Zellen (A9:A100) geklickt werden muss, damit sich die UserForm öffnet.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A9:A500], Target) Is Nothing Then UserForm1.Show

End Sub

Wie kann es abfangen, dass sich beim einem Klick in eine bereits gefüllte Zelle (hier A9) die UserForm nicht mehr öffnet?


2) Bislang ist der Code so gestrickt, dass die Eingaben aus der UserForm in die Zellen A9, B9, etc. eingefügt werden.
Es soll aber möglich sein weitere Zeilen anzulegen.
Also bei Klick in die nächste freie Zelle (das wäre dann A10), soll sich die UserForm wieder öffnen usw.

Über zahlreiche Tipps würde ich mich freuen!

cu Adrian

IngGi
28.02.2008, 13:23
Hallo Adrian,

zu 1):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A9:A500], Target) Is Nothing And Target.Resize(1, 1) = "" Then UserForm1.Show

End SubWobei mit dem Zusatz Resize(1, 1) der Fehler abgefangen wird, der entstehen würde, wenn ich nicht einfach in eine Zelle klicke, sondern einen Bereich markiere, der mehrere Zellen umfasst. In diesem Fall wird einfach die obere linke Zelle geprüft.

zu 2):
Private Sub cmdEinfügen_Click()

Range("A" & ActiveCell.Row) = Text1
Range("B" & ActiveCell.Row) = Text2
Range("C" & ActiveCell.Row) = Text3
Range("D" & ActiveCell.Row) = Text4
Range("E" & ActiveCell.Row) = Text5
Range("F" & ActiveCell.Row) = Text6

Unload Me

End Sub
Dabei werden die Daten immer in die Zeile geschrieben, in der sich die aktive Zelle befindet.

Gruß Ingolf

Adrian1502
28.02.2008, 14:43
Hallo Ingolf,
Frage 2 ist geklärt, das klappt. Danke schon mal.

Bei Frage 1 hauts noch nicht ganz hin.
Sowohl bei Klick in der Zelle A9, wie auch bei Klick auf die Markierung der ganzen Zeile poppt die Userform auf.
Ich habe jetzt in Tabelle 1 den folgenden Code stehen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([A9:A500], Target) Is Nothing Then UserForm1.Show

If Not Intersect([A9:A500], Target) Is Nothing And Target.Resize(1, 1) = "" Then UserForm1.Show
End Sub
Noch nicht ganz verstanden habe ich diese Range (1,1) bei Resize und wie ich das bei mir anpassen muss.

cu Adrian

IngGi
28.02.2008, 14:50
Hallo Adrian,

Resize(1, 1) verkürzt den Bereich einfach auf die obere linke Zelle der Markierung, d.h. es wird nur die obere linke Zelle in die Prüfung mit einbezogen. Ansonsten würde die Prüfung leer/nicht leer einen Laufzeitfehler erzeugen, da ich ja nur eine Zelle auf einmal prüfen kann.

Wenn ich dich jetzt aber richtig verstehe, willst du bei einer Auswahl von mehreren Zellen, dass das Userformular gar nicht erst eingeblendet wird. Dann musst du anders prüfen:
<FONT Color=Black FACE="Courier New,FixedSys" Size=2>
<Blockquote>
<FONT COLOR=#0000FF>Private&nbsp;Sub</FONT>&nbsp;Worksheet_SelectionChange(<FONT COLOR=#0000FF>ByVal</FONT>&nbsp;Target&nbsp;<FONT COLOR=#0000FF>As</FONT>&nbsp;Range)
<FONT COLOR=#0000FF>If&nbsp;Not</FONT>&nbsp;Intersect([A9:A500],&nbsp;Target)&nbsp;<FONT COLOR=#0000FF>Is&nbsp;Nothing</FONT>&nbsp;_
&nbsp;&nbsp;<FONT COLOR=#0000FF>And</FONT>&nbsp;Target.Count&nbsp;=&nbsp;1&nbsp;<FONT COLOR=#0000FF>Then</FONT>&nbsp;UserForm1.Show
<FONT COLOR=#0000FF>End&nbsp;Sub</FONT>

<FONT Size=2>
<p>Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.14</a></b></FONT></p>
</Blockquote><FONT FACE="Arial,FixedSys"Size=3>Gruß Ingolf

Adrian1502
28.02.2008, 15:34
Yep!
Jetzt passt es, danke Dir.

cu Adrian