Registriert seit: 15.10.2019
Version(en): 2019
16.10.2019, 09:56
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 09: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, 12:10
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 12:28 von Kuwer.)
Hallo Jimmy,
(16.10.2019, 09: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, 12:29
(Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2019, 12: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
|