Microsoft Excel

Herbers Excel/VBA-Archiv

Neuen Datensatz einfügen über VBA

Betrifft: Neuen Datensatz einfügen über VBA von: Tom
Geschrieben am: 19.11.2014 09:16:42

Guten Morgen zusammen,

ich möchte per Button eine von mir definierte Zeile mit allen darin enthaltenen Formatierungen kopieren und als neuen Datensatz einfügen. Wie lässt sich das über VBA am besten lösen?
Zudem soll das manuelle Einfügen einer Zeile unterbunden werden.

Wie lässt sich das über VBA am besten lösen?

Vielen Dank schon einmal vorab.

Gruß Tom

  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Werner
Geschrieben am: 19.11.2014 10:00:27

Hallo Tom,

schau dir das Beispiel mal an, das habe ich vor einiger Zeit mal für jemanden gemacht. Bei Doppelklick in eine Zelle der Spalte A öffnet sich eine Eingabebox in der du eingeben kannst, wieviele Leerzeilen eingefügt werden sollen. Im weiteren Verlauf wird die angeklickte Zeile kopiert, darunter eingefügt und die Werte aus der eingefügten Zeile entfernt. So hast du dann eine "leere" Zeile mit den Formeln und Formatierungen der Zeile darüber.
Vielleicht kannst du damit ja was anfangen.

https://www.herber.de/bbs/user/92171.xlsm

Gruß Werner


  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Tom
Geschrieben am: 19.11.2014 10:50:20

Hallo Werner,

super, das ist es!!!!! Die Eingabebox nehme ich raus und erweitere um eine Zeile nach jedem Doppelklick.


Vielen DANK!!!

Gruß Tom


  

Betrifft: AW: Danke für die Rückmeldung owT von: Werner
Geschrieben am: 19.11.2014 10:59:36




  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Tom
Geschrieben am: 19.11.2014 11:15:28

Hallo noch einmal,

ich hätte da noch eine Frage.

Durch den Doppelklick der eine neue Zeile einfügt, soll gleichzeitig in der angeklickten Zelle das heute Datum eingefügt werden. Wie muss der Code erweitert werden?

Gruß Tom


Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, cancel As Boolean)
Dim zeilenanzahl As Long
Dim x As Integer
Dim i As Integer
x = 1
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If target.Column = 1 Then
On Error GoTo Notausgang
zeilenanzahl = 1
With ActiveCell
For i = 1 To zeilenanzahl
If ActiveCell = "" Then
.EntireRow.Copy
.EntireRow.Offset(x, 0).Insert shift:=xlDown
.EntireRow.Offset(x, 0).PasteSpecial
ActiveCell = 1
.EntireRow.Offset(x, 0).SpecialCells(xlCellTypeConstants).ClearContents
Else
.EntireRow.Copy
.EntireRow.Offset(x, 0).Insert shift:=xlDown
.EntireRow.Offset(x, 0).PasteSpecial
.EntireRow.Offset(x, 0).SpecialCells(xlCellTypeConstants).ClearContents
ActiveCell.Offset(-x, 0).Select
End If
x = x + 1
Next i
.Offset(1, 0).Select
End With
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Notausgang:
cancel = True
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub
End If
End Su


  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Werner
Geschrieben am: 19.11.2014 11:46:26

Hallo Tom,

so?

Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, cancel As Boolean)
Dim zeilenanzahl As Long
Dim x As Integer
Dim i As Integer
x = 1
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If target.Column = 1 Then
On Error GoTo Notausgang
zeilenanzahl = 1
With ActiveCell
For i = 1 To zeilenanzahl
If ActiveCell = "" Then
.Value = Date
.EntireRow.Copy
.EntireRow.Offset(x, 0).Insert shift:=xlDown
.EntireRow.Offset(x, 0).PasteSpecial
.EntireRow.Offset(x, 0).SpecialCells(xlCellTypeConstants).ClearContents
Else
.EntireRow.Copy
.EntireRow.Offset(x, 0).Insert shift:=xlDown
.EntireRow.Offset(x, 0).PasteSpecial
.EntireRow.Offset(x, 0).SpecialCells(xlCellTypeConstants).ClearContents
ActiveCell.Offset(-x, 0).Select
.Value = Date
End If
x = x + 1
Next i
.Offset(1, 0).Select
End With
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Notausgang:
cancel = True
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub
End If
End Sub
Gruß Werner


  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Tom
Geschrieben am: 19.11.2014 13:10:53

Hallo Werner,

noch nicht ganz....das Datum soll sofort bei der Erstellung der neuen Zeile in der neuen Zelle einfügt werden. Aktuell wird das Datum für die Zelle davor, beim Neueinfügen einer Zeile gesetzt.

Gruß Tom


  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Werner
Geschrieben am: 19.11.2014 14:26:21

Hallo Tom,

dann schau dir mal an was du geschrieben hattest: "In der angeklickten Zelle soll das Datum eingefügt werden". Tatsächlich soll das Datum jetzt aber in der neuen Zelle eingetragen werden.

Ich hab jetzt mal die ganzen Variablendeklarationen und das For - Next raus geschmissen, das war nur nötig in Verbindung mit der Eingabebox. Zudem habe ich die IF-Abfrage raus geschmissen, die war/ist nur nötig wenn auch bei/nach leeren Zellen in Spalte A eine Leerzeile eingefügt werden sollte.

Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, cancel As Boolean)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
If target.Column = 1 Then
On Error GoTo Notausgang
With ActiveCell
.EntireRow.Copy
.EntireRow.Offset(1, 0).Insert shift:=xlDown
.EntireRow.Offset(1, 0).PasteSpecial
.EntireRow.Offset(1, 0).SpecialCells(xlCellTypeConstants).ClearContents
.Offset(1, 0) = Date
.Offset(1, 0).Select
End With
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Notausgang:
cancel = True
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub
End If
End Sub
Gruß Werner


  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Tom
Geschrieben am: 20.11.2014 10:49:56

Hallo Werner,

stimmt, sorry! Ja, jetzt ist es perfekt. Herzlichen Dank!


Gruß Tom


  

Betrifft: AW: Danke für die Rückmeldung von: Werner
Geschrieben am: 20.11.2014 17:53:56




  

Betrifft: AW: Neuen Datensatz einfügen über VBA von: Matthias L
Geschrieben am: 19.11.2014 11:48:42

Hallo

Ganz schön viel Aufwand um nur eine Zeile zu kopieren

'Rows(DeineZeile).Copy Destination:=Rows(ZielZeile)

 Rows(2).Copy Destination:=Rows(4)

So wird die Zielzeile allerdings überschrieben.




So wird nach unten verschoben

Rows(DeineZeile).Copy
Rows(ZielZeile).Insert Shift:=xlDown
Application.CutCopyMode = False

Ein Beispiel:
https://www.herber.de/bbs/user/93869.xlsm

Gruß Matthias


 

Beiträge aus den Excel-Beispielen zum Thema "Neuen Datensatz einfügen über VBA"