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

Userform

Userform
03.07.2013 12:07:42
Jomo
Hallo,
habe mal wieder ein VBA-Problem das ich slleine nicht lösen kann und bei dem mir online suchen auch noch nicht weitergeholfen hat...
Ich versuche mal alles sehr ausführlich zu beschreiben:
Auf Tabellenblatt "Grundstück" soll wenn Zelle "N56" angekreutz wird durch folgende formel "=WENN(N56="O";Userformaufruf();"")" in Zelle "R56" ein Userform aufgerufen werden. Dafür benutze ich den Code:
Function Userformaufruf()
UserForm1.Show
End Function Soweit so gut das klappt eigentlich alles noch.
Dann befinden sich auf dem Userform 3 Textboxen und ein Button. In Textbox1 und Textbox2 soll der Nutzer später eintragen können wodurch in Textbox3 dann das Produkt der beiden Werte ausgerechnet werden soll.
Das wäre mein erstes Problem hierfür habe ich keinen Code!
Dann sollte der Wert der Textbox3 in das Tabellenblatt "Gewichtung" in Zelle AN8 übernommen werden sobald der Button gedrückt wird und das ganze soll gleichzeitig damit geschlossen werden. Das habe ich mit folgendem Code probiert funktioniert so aber nicht :P
Private Sub CommandButton1_Click()
Sheets("Gewichtung").Range("AN8").Value = TextBox3.Text
Unload Me
End Sub
Kann mir jemand weiterhelfen mit den benötigten Codes?
Danke für jeden Tipp grüße Jo

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform
03.07.2013 12:16:30
Klaus
Hi Jomo,
Auf Tabellenblatt "Grundstück" soll wenn Zelle "N56" angekreutz wird durch folgende formel "=WENN(N56="O";Userformaufruf();"")" in Zelle "R56" ein Userform aufgerufen werden. Dafür benutze ich den Code:
Function Userformaufruf()
UserForm1.Show
End Function

Wo hast du denn diese Schnapsidee aufgeschnappt?
ein wirklich gutgemeinter Rat: lass es!
Das mag ja erstmal funktionieren, aber du solltest NIE eine MsgBox, UserForm oder ein sonstiges Fenster aus einer FORMEL heraus aufrufen! Du musst nur einmal von irgendwo ein Calculate_Full auslösen oder irgendeinen Bezug zu der Formel irgendwie einen Bezug auf eine volatile Funktion generieren, schon klappt dir alles zusammen.
Soweit so gut das klappt eigentlich alles noch.
Betonung auf noch.
Alles weitere: den benötigen Code für die Userform-Buttons schreibe ich dir gerne, wenn du eine Musterdatei zur Verfügung stellst.
Grüße,
Klaus M.vdT.

Anzeige
AW: Userform
03.07.2013 13:07:03
Jomo
Hallo, danke für die schnelle Rückmeldung!
Hier mal eine beispieldatei ich hoff das passt so: https://www.herber.de/bbs/user/86184.xlsm
@ Klaus: Sorry hab wirklich keine Ahnung von VBA und wusste nicht dass man besser nicht via Formeln aufruft. Hab eben aber auch gemerkt, dass das nicht so richtig klappt, da wenn einmal N56=O ist, egal was man auf dem Tabellenblatt macht immer wieder die Userform aufgerufen wird! :(
@Hajo: sorry, versteh ich leider nicht, damit kann ich nichts anfangen?!
Gruß Jo

AW: Userform
03.07.2013 13:27:51
Klaus
Hallo Jo,
deine Tabelle ist ja der Horror. Verzichte auf horizontal verbundene Zellen, nutze stattdessen "Format - horizontal über auswahl zentrieren".
Hier der Code für deine Userform:
Private Sub CommandButton1_Click()
Sheets("Grundstück").Range("AN8").Value = Me.TextBox3.Text
Unload Me
End Sub
Private Sub TextBox1_Change()
On Error GoTo hell
'erzeugt ERROR wenn keine Zahlen in den Textboxen stehen
Debug.Print IsNumeric(Me.TextBox1.Text * 1)
Debug.Print IsNumeric(Me.TextBox2.Text * 1)
Me.TextBox3.Text = CInt(Me.TextBox1.Text * 1) * CInt(Me.TextBox2.Text * 1)
GoTo heaven:
hell:
Me.TextBox3.Text = "ungültige Eingabe"
heaven:
End Sub
Private Sub TextBox2_Change()
On Error GoTo hell
'erzeugt ERROR wenn keine Zahlen in den Textboxen stehen
Debug.Print IsNumeric(Me.TextBox1.Text * 1)
Debug.Print IsNumeric(Me.TextBox2.Text * 1)
Me.TextBox3.Text = CInt(Me.TextBox1.Text * 1) * CInt(Me.TextBox2.Text * 1)
GoTo heaven:
hell:
Me.TextBox3.Text = "ungültige Eingabe"
heaven:
End Sub
Anmerkung: der Code ist funktional, aber nicht gut! Ich habe gerade keine Idee, wie ich eine Textbox auf "IstZahl" überprüfe - darum der brutale Umweg über OnError Goto! Ich hoffe, einer der besseren VBA-ler zeigt noch eine elegantere Lösung (Hajo?).
Ich habe mich akribisch an deine Vorgaben gehalten. Warum du das Ergebniss in Zelle AN8 schreiben möchtest (weit ab vom Schuss, nicht formatiert, nix) bleibt mir schleierhaft.
Um die Userform auf an-x-en aufzurufen, ergänzt du am besten deine BeforeDobuleClick:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
[... dein alter Code ...]
If Not Intersect(Target, Range("N56")) Is Nothing Then
If Target.Value = "O" Then UserForm1.Show
End If
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Userform
03.07.2013 14:37:02
Jomo
Hallo Klaus
vielen Dank für deine Mühe!
In diesem Beispiel fehlen einige Daten und Tabellenblätter die hab ich raus genommen, die muss hier nicht jeder sehen können. Außerdem auf dem Tabellenblatt "Gewichtung" und nicht "Grundstück". Daher würde AN8 dann schon passen ;)
Könntest du dir eventuell an der Beispieldatei noch den Blattschutz anschauen?sollte beim öffnen funktionieren tut er aber nicht und außerdem wäre super wenn dabei "Gewichtung" nicht geschützt wird, da sonst die LinkedCells der Comboboxen nicht mehr gehen würde ich dass nämlich nur ausblenden...
Geht das oder besser neuer Thread?
Ach und kannst du mir erklären warum ich zellen nicht verbinden sollte?
Funktioniert so richtig gut nochmal vielen Dank! :)
Grüße Jo

Anzeige
Verbundzellen: Contra, Contra, Pro und Contra
04.07.2013 08:31:39
Klaus
Hi Jomo,
danke für das Lob! Mein Code ist, wie ich schon schrieb, ziemlich schlecht ... aber funktional ist funktional :-)
Den Blattschutz schaue ich mir gleich mal an, melde ich mich später zu.
Ach und kannst du mir erklären warum ich zellen nicht verbinden sollte?
Zum Thema "Zellen verbinden" findest du in der Recherche teils religios-fanatisch anmutende Meinungen! Wohl kaum ein anderes Thema teilt seit Jahren die Herber-Community in den Maße :-)
Mal ein Beispiel (neue Tabelle, schreib in A7 "Hallo")
folgendes VBA zeigt dir die letzte Zeile:
msgbox cells(rows.count,1).end(xlup).row
Aufgabe: Füge unter der letzten Zeile etwas ein! Das geht dann so:
range("A"& cells(rows.count,1).end(xlup).row + 1).value = "Welt"
jetzt steht in der Tabelle:
A7: Hallo
A8: Welt
probier das ganze nochmal von vorne, aber diesmal verbinde die Zellen A7:A10 und schreibe "Hallo" in den Zellenverbund!
Nächstes Beispiel:
verbinde A1:B1 horizontal.
Jetzt versuche irgendwo, die Formel =SUMMEWENN(A:A;"Hallo";B:B) zu erzeugen. Klar, tippen kannst du die ... aber normalerweise macht man das mit Mausclicks? Ganz schnell bekommst du die sinnfreie Formel
=SUMMEWENN(A:B;"Hallo";A:B) --- und das merkst du in der Hitze des Gefechts nicht, gerade wenn nicht nur oben, sondern auch "irgendwo" in der Tabelle Zellenverbünde bestehen!
Ganze Spalten / ganze Zeilen Formatieren funktioniert nicht mehr richtig, sobald Verbundzellen im Ziel sind
Dann könnte ich noch 100 Beispiele bieten, in denen valider VBA-Code bei verbundzellen nicht mehr funktioniert - aber das darfst du mir einfach glauben :-)
Die alternative zum horizontalen Zellenverbund, "Format, über auswahl zentrieren" bringt EXAKT das gleiche optische Ergebniss, aber keinerlei der Nachteile!
Für vertikalen Zellenverbund gibt es leider keine richtige Alternative - trotzdem rate ich auch von denen ab.
Damit Luc:-? nicht schimpft, werde ich noch ein paar Pro-Argumente nennen (mit meinen sarkastischen Anmerkungen in kursiv und Klammern)
- vertikal verbundene Zellen entsprechen dem aktuellen Tabellenstandart in HTML (weil wir den ganzen Tag nichts anderes machen, als XLSM nach HTML zu exportieren ..)
- es gibt tatsächlich eine Excelformel-Variation (oder ein Bug-Abusing) in der bestimmte Matrixfunktionen NUR innerhalb verbundzellen funktionieren (aber ... naja, das braucht man halt nur ganz ganz selten bis nie)
- man kann tatsächlich fast jedes VBA-Problem mit verbundzellen umgehen, indem man mit .mergearea die Bereiche richtig anspricht (oder man verzichtet drauf und spart sich 10 Zeilen Code pro Zellenaktion)
Wenn du mehr zu diesem Thema lesen willst, kannst du dir mal am Wochenende Zeit nehmen und die Worte "Verbundene Zellen Luc Boris" in die Forumsrecherche eingeben.
Grüße,
Klaus M.vdT.

Anzeige
Blattschutz automatisch
04.07.2013 08:39:13
Klaus
Hallo Jomo,
dein Blatschutz funktioniert doch! Du musst nur das Sub "Woorkbook_Open" aufrufen. Achso, automatisch beim öffnen des Workbooks ..
Du schreibst:
Private Sub Woorkbook_Open()
richtig wäre:
Private Sub Workbook_Open()
Tip: Die Namen der Ereignis-Routinen nicht selber schreiben, sondern über die Dropdowns oben im Codefeld erzeugen! Damit setzt du die Chance auf Tippfehler auf Null, ausserdem hast du immer alle nötigen Variablen (cancel, target usw) mit an Board auch wenn du an die grad gar nicht gedacht hast.
Das Blatt "Gewichtungen" soll vom automatischen Schutz ausgenommen werden? Das geht so:
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In Worksheets
If Not ws.Name = "Gewichtung" Then
ws.Protect Password:="xxx", DrawingObjects:=True, Contents:=True, Scenarios:=True,  _
UserInterfaceOnly:=True
ws.EnableSelection = xlUnlockedCells
ws.EnableAutoFilter = True
End If
Next
End Sub

Beim Ent-Schützen brauchst du das nicht nochmal, da VBA keinen Fehler verursacht wenn du ein ungeschütztes Blatt nochmal entschützt.
Grüße,
Klaus M.vdT.

Anzeige
AW: Blattschutz automatisch
05.07.2013 07:37:10
Jomo
Hallo!
Super danke für die Antwort und vor allem die ausführliched Erklärung zu den Verbundenen Zellen, wobei ich das nun natürlich versucht hab und mit über Auswahl zentrieren leider nicht immer genau das Ergebniss hinbekommen hab...Naja vllt stell ich mich auch noch dumm an und das wird noch^^ Den Code werd ich nachher auch gleich mal probieren und geb dann bescheid ob dann endlich alles funktioniert!
Danke! Gruß Jo

AW: Blattschutz automatisch
09.07.2013 13:47:24
Jomo
Hallo Klaus!
Danke nochmal der Blattschutz funktioniert mit deinem Code so prinzipiell, allerdings hab ich dann erstmal ein riesen durcheinander auf dem Bildscirm und muss erst das Tabellenblatt wechseln,dass ich wieder alles sauber angezeigt bekomme...Woran kann das liegen? hast du dazu eine Lösung?
Gruß Jo

Anzeige
AW: Userform
03.07.2013 12:17:59
Hajo_Zi
Du schreibst Text in die Zelle, Umwandlungsfunktionen.
Textbox3=Cint(textbox1)*Cint(Textbox2)
Ich bin davon ausgegangen das nur numerische Werte eingegeben wurden und das Werte drin stehen.
Gruß Hajo

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige