Registriert seit: 15.10.2019
Version(en): 2019
16.10.2019, 10:56
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 10:56 von Jimmy_Pulp.)
Vielen Dank Uwe, das war genau die Antwort auf meine Frage! Es läuft auch. "Codes im Hintergrund" war mir noch gar nicht bekannt, ich habe immer nur mit Markos gespielt. Aber das ist sehr hilfreich und bringt mich bei meinen Basteleien auf jeden Fall weiter! Ich werde aber mit Werners Vorschlag weiterarbeiten, da ich gerne nur bei Bedarf die Abfrage starten möchte, denn sonst habe ich ja nicht die Möglichkeit, individuell in eine Zelle zu klicken und einen Wert einzugeben. Dazu zwei Fragen: Wie kann man Werners Code umändern, damit man nicht nur Zahlen, sondern auch Text eingeben kann? denn varWert = Variant müsste das doch ermöglichen? Aber die Eingabeaufforderung akzeptriert nichts anderes als eine Zahl. Kann man auch zusätzlich zum Eingabefeld Buttons integrieren, damit man die Zahlen von 0-15 sowie die Texte "e1", "e2", "u1", "u2", "s1", "s2" eingeben kann?
Vielen Dank für alle Unterstützung!
Registriert seit: 05.09.2019
Version(en): Office 365
Hallo nochmal Code: varWert = Application.InputBox(Cells(i, 1), "Wert erfassen", , , , , , 1)
der letzte Parameter der inputbox ist auf 1 eingestellt. Das bedeutet ZAHL. Entweder eine 2 (=Text) eintragen oder weglassen (=Voreinstellung) Code: varWert = Application.InputBox(Cells(i, 1), "Wert erfassen", , , , , , 2)
LG UweD
Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:1 Nutzer sagt Danke an UweD für diesen Beitrag 28
• Jimmy_Pulp
Registriert seit: 15.10.2019
Version(en): 2019
Hallo, vielen Dank. Das bedeutet, dass nur entweder Zahl oder Text geht, richtig? Wenn ich auf "2" Stelle erhalte ich einen Laufzeitfehler, debuggen liefert: If varWert = False Then
Registriert seit: 05.09.2019
Version(en): Office 365
Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:1 Nutzer sagt Danke an UweD für diesen Beitrag 28
• Jimmy_Pulp
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
16.10.2019, 13:10
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 13:28 von Kuwer.)
Hallo Jimmy, (16.10.2019, 10:56)Jimmy_Pulp schrieb: Kann man auch zusätzlich zum Eingabefeld Buttons integrieren, damit man die Zahlen von 0-15 sowie die Texte "e1", "e2", "u1", "u2", "s1", "s2" eingeben kann? füge folgenden Code zu Werners Code hinzu: Function Notenvergabe() Dim i As Long Static oAC As CommandBarControl
On Error Resume Next 'falls Menü noch vorhanden ist, wird es gelöscht, 'da es neu erstellt werden soll Application.CommandBars("Noten").Delete On Error GoTo 0 Set oAC = Application.CommandBars.ActionControl If Not oAC Is Nothing Then Exit Function
With Application.CommandBars.Add("Noten", msoBarPopup, False, True) .Controls.Add(msoControlEdit, 1, , , True).OnAction = "Notenvergabe" For i = 0 To 15 With .Controls.Add(msoControlButton, 1, , , True) .Caption = CStr(i) .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "e" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "u" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "s" & i .OnAction = "Notenvergabe" End With Next i .ShowPopup If Not oAC Is Nothing Then Notenvergabe = oAC.Caption Else Notenvergabe = False End If .Delete End With End Function Ändere anschließend in Werners Code die Zeile varWert = Application.InputBox(Cells(i, 1), "Wert erfassen", , , , , , 1) so varWert = Notenvergabe Gruß Uwe
Hallo Jimmy, mein Code war noch unvollständig und fehlerhaft. Jetzt noch mal komplett inklusive geändertem Code von Werner: Public Sub Eintragen() Dim loLetzte As Long, i As Long, varWert As Variant Application.DisplayAlerts = False loLetzte = Cells(Rows.Count, 1).End(xlUp).Row If ActiveCell.Row > 1 Then For i = ActiveCell.Row To loLetzte varWert = Notenvergabe If varWert = Null Then Exit Sub Cells(i, ActiveCell.Column) = varWert Next i End If End Sub
Function Notenvergabe() Dim i As Long Static oAC As CommandBarControl
Set oAC = Application.CommandBars.ActionControl If Not oAC Is Nothing Then Exit Function
On Error Resume Next 'falls Menü noch vorhanden ist, wird es gelöscht, 'da es neu erstellt werden soll Application.CommandBars("Noten").Delete On Error GoTo 0 With Application.CommandBars.Add("Noten", msoBarPopup, False, True) .Controls.Add(msoControlEdit, 1, , , True).OnAction = "Notenvergabe" For i = 0 To 15 With .Controls.Add(msoControlButton, 1, , , True) .Caption = CStr(i) .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "e" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "u" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "s" & i .OnAction = "Notenvergabe" End With Next i .ShowPopup If Not oAC Is Nothing Then If oAC.Type = 1 Then Notenvergabe = oAC.Caption Else Notenvergabe = oAC.Text End If Else Notenvergabe = Null End If .Delete End With End Function
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Jimmy_Pulp
Registriert seit: 15.10.2019
Version(en): 2019
16.10.2019, 13:29
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 13:36 von Jimmy_Pulp.)
Danke, soweit klappt alles.
Wie kann ich es umbauen, dass ich per Button den Wert in die Zelle schreiben kann? Dazu brauche ich ein Formular, UserForm. Das kann ich ja beliebig mit Buttons und Eingabefelder "designen", jedoch fehlt mir die Kenntnis, wie ich das so programmieren kann, dass der Klick auf den Button den Buttonwert (0-15, e1, e2 usw) in die Zelle schreibt.
Ich brauche also den bisherigen Code, nur statt einer einfachen InputBox muss dann das UserForm kommen und der varWert wird duch die Buttons gegeben. Hilft mir jemand auf die Sprünge?
Hallo Uwe, das ist ja schonmal super!!!! Gibt es jetzt noch die Möglichkeit, das sozusagen als "Titel" der Auswahlleiste der Inhalt aus Spalte 2, entsprechende Zeile (in diesem Fall der Schülername) steht? DANKE!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Jimmy, jetzt mit Überschrift: Option Explicit
Public Sub Eintragen() Dim loLetzte As Long, i As Long, varWert As Variant loLetzte = Cells(Rows.Count, 1).End(xlUp).Row If ActiveCell.Row > 1 Then For i = ActiveCell.Row To loLetzte varWert = Notenvergabe(i) If IsNull(varWert) Then Exit Sub Cells(i, ActiveCell.Column) = varWert Next i End If End Sub
Function Notenvergabe(Optional Zeile As Long) 'Kuwer 201910 Dim i As Long Static oAC As CommandBarControl
Set oAC = Application.CommandBars.ActionControl If Not oAC Is Nothing Then Exit Function
On Error Resume Next 'falls Menü noch vorhanden ist, wird es gelöscht, 'da es neu erstellt werden soll Application.CommandBars("Noten").Delete On Error GoTo 0 With Application.CommandBars.Add("Noten", msoBarPopup, False, True) If Not IsMissing(Zeile) Then .Controls.Add(msoControlButton, 1, , , True).Caption = Cells(Zeile, 2).Value End If .Controls.Add(msoControlEdit, 1, , , True).OnAction = "Notenvergabe" For i = 0 To 15 With .Controls.Add(msoControlButton, 1, , , True) .Caption = CStr(i) .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "e" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "u" & i .OnAction = "Notenvergabe" End With Next i For i = 1 To 2 With .Controls.Add(msoControlButton, 1, , , True) .BeginGroup = i = 1 .Caption = "s" & i .OnAction = "Notenvergabe" End With Next i .ShowPopup If Not oAC Is Nothing Then If oAC.Type = 1 Then Notenvergabe = oAC.Caption Else Notenvergabe = oAC.Text End If Else Notenvergabe = Null End If .Delete End With End Function
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Jimmy_Pulp
Registriert seit: 15.10.2019
Version(en): 2019
Hallo Uwe, das ist ja wunderbar! Eine sehr große Arbeitserleichterung für mich. Jetzt noch eine eher kosmetische Frage: kann man die Position, an der das Command.Bar bzw. PopUp auf dem Bildschrim auftaucht, fixieren? Z.B. dass es immer in der Mitte des Bildschirms auftaucht? Die Position ist recht egal, hauptsache immer gleich. Sonst wirkt das drücken der Buttons am Touchscreen eher wie ein Computerspiel Ich habe gegooglet und das gefunden: .ShowPopup([x],[y]) Bin ich auf der richtigen Spur? Wie gehe ich mit x und y um? Tausend Dank!
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Jimmy, Du bist auf der richtigen Spur. Bei mir passt es z.B. mit .ShowPopup 400, 200 x ist der Pixelabstand vom linken Monitorrand, y vom oberen. Da musst Du ein bisschen experimentieren. Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Jimmy_Pulp
Registriert seit: 15.10.2019
Version(en): 2019
Hallo Uwe! Vielen Dank, genau so habe ich es mir vorgestellt! DANKE LG Jimmy
|