Microsoft Excel

Herbers Excel/VBA-Archiv

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

Veränderung einer Zelle VBA | Herbers Excel-Forum


Betrifft: Veränderung einer Zelle VBA von: Paul
Geschrieben am: 25.02.2010 15:56:31

Hallo Excel Freaks,

ich stehe vor einer Herausforderung.
Bei jeglicher Veränderung in einer Zelle soll in einem seperaten Register einiges aufgezeichnet werden.
(z.B. Anwender, Dateiname, Registername, Datum,... usw.)
Dafür nutze ich folgenden VBA Code:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Sheets("Tabelle2").Cells(Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = _
Application.UserName & " " & ActiveWorkbook.Name & " " & _
ActiveSheet.Name & " " & Target.Address & " " & _
Date & " " & Format(Now, "HH:mm:ss") & " " & _
ActiveSheet.Cells(Target.Row, Target.Column)
End Sub

Wenn z.B. die Zelle A1 in Register Tabelle1 mit "Hallo" gefüllt wurde, wird folgender Eintrag in Register Tabelle2 generiert:
Paul Ereignisse fixieren.xls Tabelle1 $A$1 25.02.10 15:49:08 Halloo

Jetzt ändere ich die Zelle A1 nochmals und es wird ein neuer Eintrag in Register Tabelle2 generiert:
Paul Ereignisse fixieren.xls Tabelle1 $A$1 25.02.10 15:50:44 Hallo

Meine Frage ist folgende:
Wie muss ich den Code umschreiben, dass bevor ich die Zelle überschreibe eine Imputbox aufleuchtet, wo der Gurnd für die Änderung erfasst werden soll. Es soll dann folgender Eintrag in Register Tabelle2 generiert werden:
Paul Ereignisse fixieren.xls Tabelle1 $A$1 25.02.10 15:50:44 Hallo verschrieben

Ich bin mir sicher, dass mir jemand helfen kann?

Gruss
Paul

  

Betrifft: AW: Veränderung einer Zelle VBA von: fcs
Geschrieben am: 25.02.2010 17:27:51

Hallo Paul,

ich würde jede der Informationen in eine eigene Spalte schreiben, nicht in alles in eine Zelle. Das ist übersichtlicher, und du kannst die Liste sortieren/filtern.

Den Grund kann man per Inputbox eingeben. Ich hab es mal so eingerichtet, dass ein Grund eingegeben werden muss. Abbrechen startet die Eingabe erneut.

Bei vielen Eingaben wird das aber ziemlich nervig.

Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim wksAend As Worksheet, lZeile As Long, sGrund As String, sPrompt As String
  
  Set wksAend = Worksheets("Tabelle2")
  sPrompt = "Bitte den Grund für die Änderung eingeben"
  Do
    sGrund = InputBox(sPrompt, "Änderungs-Grund")
    If sGrund <> "" Then Exit Do
    sPrompt = "Bitte den Grund für die Änderung eingeben" & vbLf _
        & "Eingabe ist zwingend erforderlich!"
  Loop
  
  With wksAend
    lZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    'Jede Information in eine eigene Zelle
    .Cells(lZeile, 1) = Application.UserName
    .Cells(lZeile, 2) = ActiveWorkbook.Name
    .Cells(lZeile, 3) = ActiveSheet.Name
    .Cells(lZeile, 4) = Target.Address
    .Cells(lZeile, 5) = Format(Now, "YYYY-MM-DD hh:mm:ss")
    .Cells(lZeile, 6) = Target.Range("A1")
    .Cells(lZeile, 7) = sGrund
    
    'oder alles in eine Zelle
'    .Cells(lZeile, 1) = Application.UserName & " " & ActiveWorkbook.Name & " " & ActiveSheet. _
Name _
        & " " & Target.Address & " " & Format(Now, "YYYY-MM-DD hh:mm:ss") _
        & " " & Target.Range("A1") & " " & sGrund
  End With
End Sub



  

Betrifft: VOR der Veränderung, geht nicht... von: Renee
Geschrieben am: 25.02.2010 17:30:57

Paul,

Weil die Ereignisprozedur erst NACH der Veränderung angestossen wird.
Es gibt kein BeforeChange Ereignis, da EXCEL ja nicht wissen kann OB du was ändern willst.

Für eine Inputbox (nach der Veränderung) einfach noch ein

& InputBox("Grund:")
anhängen.

GreetZ Renée


  

Betrifft: AW: Veränderung einer Zelle VBA von: hary
Geschrieben am: 25.02.2010 18:12:40

Hallo Paul
evtl hilts Dir wenn Du den Inhalt vorher nacher vergleichst.

Option Explicit
Dim a
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim zusatz
If Target.Value <> a Then 'vergleicht Neu gegen Alt
zusatz = InputBox("Bitte Zusatz eintragen")
End If

End Sub
'---- liest erstmal Zelleninhalt aus---------
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
 a = Target.Value
End Sub

gruss hary


  

Betrifft: AW: Veränderung einer Zelle VBA von: Paul
Geschrieben am: 26.02.2010 09:53:32

Hallo zusammen,

erstmals vielen vielen Dank für die schnelle Hilfe.
Alle drei Makros laufen hervorragend!!
Gibt es die Möglichkeit das sich das "Grund-Fenster" nur dann öffnet, wenn die Zelle überschrieben werden soll.
D.h. bei einer Neueingabe soll kein Fenster geöffnet werden, nur bei Veränderung einer bestehenden.

Vielen Dank.
Paul


  

Betrifft: AW: Veränderung einer Zelle VBA von: Paul
Geschrieben am: 26.02.2010 09:56:11

Hallo zusammen,

erstmals vielen vielen Dank für die schnelle Hilfe.
Alle drei Makros laufen hervorragend!!
Gibt es die Möglichkeit das sich das "Grund-Fenster" nur dann öffnet, wenn die Zelle überschrieben werden soll.
D.h. bei einer Neueingabe soll kein Fenster geöffnet werden, nur bei Veränderung einer bestehenden.

Vielen Dank.
Paul


  

Betrifft: AW: Veränderung einer Zelle VBA von: hary
Geschrieben am: 26.02.2010 10:44:13

Hallo Paul
versuch mal so. Da erscheint die Inputbox nur wenn was drin steht.

Option Explicit
Dim a
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim zusatz
      If a <> "" Then 'wenn a nicht leer
   zusatz = InputBox("Bitte Zusatz eintragen")
      End If
End Sub
'---- liest erstmal Zelleninhalt aus---------
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
   a = Target.Value
End Sub

gruss hary


Beiträge aus den Excel-Beispielen zum Thema "Veränderung einer Zelle VBA"