Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Code

Betrifft: VBA Code von: Jürgen Michel
Geschrieben am: 30.07.2014 20:05:39

Hallo, ich habe mich im Netz jetzt gut umgesehen und habe auch schon etwas zusammen getragen was auch funktioniert.Der Grundgedanke ist das ich in einer Zelle wo schon eine Zahl darin steht eine weitere dazu zählen kann und das Ergebnis in der Zelle angezeigt wird.Das klappt auch.Der zweite Schritt war dann das das Makro startet wenn ich die Zelle anklicke. Das klappt auch, aber mit meinem Code im Moment nur in der Zelle B11. Meine Frage: Wie Bewerkstellige ich es das das Makro über die Zellbereiche B11 - G23 ausgeführt wird.

Hier mein Code:



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$B$11" Then Call Tabelle1.AddierenFeld
End Sub

Sub AddierenFeld()
Dim Text As String, Text2 As String, Neu As Double, FehlerWahl As Integer
On Error GoTo Fehler
Text = "dieser Wert wird zum " & vbCrLf
Text = Text & "aktuellen Zellwert addiert "
Neu = InputBox(Text, "Addition")
If Val(Neu) <> 0 Then ' nur addierten wenn Wert eine Zahl ist
ActiveCell.Value = ActiveCell.Value + Neu
End If
Exit Sub
Fehler:
Text2 = "Sie haben keine Zahl eingegeben," & vbCrLf
Text2 = Text2 & "wollen Sie die Eingabe wiederholen?"
FehlerWahl = MsgBox(Text2, vbYesNo)
Select Case FehlerWahl
Case vbYes
Resume
Case Else
Exit Sub
End Select
End Sub
Ich würde mich sehr über eure Hilfe freuen.
Gruß
Jürgen

  

Betrifft: AW: VBA Code von: Martin
Geschrieben am: 30.07.2014 20:17:01

Hallo Jürgen,

mein Vorschlag:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("B11:G23")) Is Nothing Then
        Call Tabelle1.AddierenFeld
    End If
End Sub
Viele Grüße

Martin


  

Betrifft: AW: VBA Code von: Matze Matthias
Geschrieben am: 30.07.2014 20:47:51

Hallo Jürgen, Hallo Martin,

der Vorschlag von Martin wird dir sicherlich geholfen haben, ich selber mag dieses "selection" Ereignis nicht unbedingt und nutze meist dafür den "double_click"

Weder bei selection noch double_click wird eine nochmalige Eingabe der selben Zelle nicht möglich sein,
da man erst die Zelle verlassen muss um das Ereignis erneut darauf anzusprechen.
Das war zwar keine gestellte Aufgabe aber mit erlaub ein Tipp:

Ich springe einfach eine Zelle unter die gerade "active" Zelle, hier mit Double_click

Im Sinne von Martin :-)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("B11:G23")) Is Nothing Then
        Call Tabelle1.AddierenFeld
            Application.EnableEvents = False
            ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
            Application.EnableEvents = True
    End If
End Sub
Gruß Matze


  

Betrifft: AW: VBA Code von: Jürgen Michel
Geschrieben am: 30.07.2014 21:14:26

Hallo Leute,
danke für die schnelle und vor allem guten Antworten.
Antwort 1 von Martin war ja genau das was ich wollte.
Antwort 2 von Matze ist natürlich auch gut ( vor allem das Doppelclick ist super ) hat aber den Nachteil das ich den Wert durch das Einfache anklicken der Zelle ohne Makro manuell ändern kann.
Das heißt: In der Zelle steht die Zahl 5 - ich klicke die Zelle einfach an - gebe 8 ein und es wird 8 angezeigt.Den Wert der Zelle darf man nur mit dem Makro ändern können.
Gruß
Jürgen


  

Betrifft: AW: VBA Code von: Matze Matthias
Geschrieben am: 31.07.2014 13:16:02

Hallo Jürgen,

wenn du den Doppelklick verwenden möchtest , müsste wie du schon bemerkt hast die direkte Eingabe
der Zellen vermieden werden.
Das könnte mit dem Blattschutz erledigt werden, was aber eventuelle Andere Eingaben aber wieder behindern könnte, ich kenne ja deine Mappe nicht oder das was du vorhast.

Eine weitere Lösung mit Application.Undo arbeiten um eine gemachte Eingabe zurück zusetzten.
Die Prüfung im Selection_Change Ereignis muss daher auf False gesetzt werden.

hier mal die Zeilen dazu:

Option Explicit

 Dim Check As Boolean 'Prüfung
 
 Sub AddierenFeld()
 Dim Text As String, Text2 As String, Neu As Double, FehlerWahl As Integer
 On Error GoTo Fehler
 Text = "dieser Wert wird zum " & vbCrLf
 Text = Text & "aktuellen Zellwert addiert "
 Neu = InputBox(Text, "Addition")
 If Val(Neu) <> 0 Then ' nur addierten wenn Wert eine Zahl ist
    ActiveCell.Value = ActiveCell.Value + Neu
 End If
 Exit Sub
Fehler:
 Text2 = "Sie haben keine Zahl eingegeben," & vbCrLf
 Text2 = Text2 & "wollen Sie die Eingabe wiederholen?"
 FehlerWahl = MsgBox(Text2, vbYesNo)
 Select Case FehlerWahl
 Case vbYes
 Resume
 Case Else
 Exit Sub
 End Select
 End Sub


 Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B11:G23")) Is Nothing Then
   If Not Check Then
     Application.EnableEvents = False
     Application.Undo
     Application.EnableEvents = True
   End If
 End If
 End Sub

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Check = True
     If Not Intersect(Target, Range("B11:G23")) Is Nothing Then
        Call Tabelle1.AddierenFeld
            Application.EnableEvents = False
            ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
            Application.EnableEvents = True
    End If
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Check = False
 End Sub
Gruß Matze


  

Betrifft: AW: VBA Code von: Jürgen Michel
Geschrieben am: 31.07.2014 16:42:41

Hallo Matze, du bist genial. Das ist die optimale Lösung. Danke und nochmal Danke.
Eine Frage habe ich aber jetzt doch noch, so etwas kommt mir immer wenn ich ins Bett gehe.
- Wäre es zu Bewerkstelligen das ich genauso, wie ich im Moment eine Zahl dazu zählen kann auch eine abziehen kann? Muss jetzt nicht sein, diese Lösung ist reicht mir,das andere wäre eine Nützliche Erweiterung.
Danke nochmals für das was du bis jetzt für mich getan hast.
Gruß
Jürgen


  

Betrifft: AW: VBA Code von: Matze Matthias
Geschrieben am: 31.07.2014 21:07:42

Hallo Jürgen,

du bist mir ja einer, schon mal eine negative Zahl in deine Inputbox eingegeben??

Die Zahlen im angegebenen Bereich bekommst du nur noch auf 0 wenn du genau den Gegenwert in die Box eingibst, somit sollte die Frage mit minus rechnen doch erledigt sein.

Gruß Matze


  

Betrifft: AW: VBA Code von: Jürgen Michel
Geschrieben am: 01.08.2014 15:03:30

Hallo Matze,
das hatte ich noch gar nicht ausprobiert. Ich war so glücklich über das andere, das ich mir da echt keine Gedanken gemacht habe, um so mehr bin ich jetzt total zufrieden.
Noch einmal vielen Dank.
Grüße aus Bechenheim
Jürgen