Marko Eingabeaufforderung eine Zelle nach der anderen
#11
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!
Antworten Top
#12
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:
  • Jimmy_Pulp
Antworten Top
#13
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
Antworten Top
#14
https://docs.microsoft.com/de-de/office/...n.inputbox
[-] Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:
  • Jimmy_Pulp
Antworten Top
#15
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. Blush
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:
  • Jimmy_Pulp
Antworten Top
#16
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!
Antworten Top
#17
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:
  • Jimmy_Pulp
Antworten Top
#18
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 Wink
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!
Antworten Top
#19
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:
  • Jimmy_Pulp
Antworten Top
#20
Hallo Uwe!
Vielen Dank, genau so habe ich es mir vorgestellt!
DANKE LG
Jimmy
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste