So als Ansatz:
Die Parameternamen bei AddRecord sollten natürlich sinnvoll sein (also nicht Wert1, Wert2 usw. sondern z.B. Produktnummer, Produktname, usw.).
'
' in einem Modul
'
Option Explicit
Public Sub AddRecord( _
Wert1 As Variant, _
Wert2 As Variant, _
Wert3 As Variant _
)
Dim wksFehlersammelliste As Excel.Worksheet
Set wksFehlersammelliste = GetFehlersammelliste().Worksheets("Tabelle xyz") '< anpassen
'# der Teil wäre bei einer intelligenten Tabelle ein wenig anders
Dim rngCell As Excel.Range
'letzte Zelle mit Inhalt suchen (von unten nach oben)
Set rngCell = wksFehlersammelliste.Cells(wksFehlersammelliste.Rows.Count, "A").End(xlUp)
'Zelle unter der 'letzten Zelle mit Inhalt'
Set rngCell = rngCell.Offset(RowOffset:=1)
'Daten schreiben/übertragen
wksFehlersammelliste.Cells(rngCell.Row, "A").Value = Wert1
wksFehlersammelliste.Cells(rngCell.Row, "B").Value = Wert2
wksFehlersammelliste.Cells(rngCell.Row, "C").Value = Wert3
'...
'#
Call SaveFehlersammelliste
'OPTIONAL:
'Call CloseFehlersammelliste
' Es würde mehr Sinn machen, diese im Hintergrund offen zu lassen und erst dann zu schließen,
' wenn die Mappe - in welche dieses Makro hier läuft - geschlossen wird (siehe Event: Workbook_BeforeClose)
End Sub
Public Sub SaveFehlersammelliste()
Call GetFehlersammelliste().Save
End Sub
Public Sub CloseFehlersammelliste()
Dim wkb As Excel.Workbook
On Error Resume Next
Set wkb = Workbooks("Fehlersammelliste.xlsx")
On Error GoTo 0
If wkb Is Nothing Then
Exit Sub
End If
Call wkb.Close(SaveChanges:=True)
End Sub
Private Function GetFehlersammelliste() As Excel.Workbook
Dim wkb As Excel.Workbook
On Error Resume Next
Set wkb = Workbooks("Fehlersammelliste.xlsx")
On Error GoTo 0
If wkb Is Nothing Then
'ggf. anpassen
' Hier wird davon ausgegangen, dass die zu öffnende Mappe im gleichen Verzeichnis liegt
' wie die Mappe, in welcher dieses Makro ausgeführt wird.
Dim strFullFilename As String
strFullFilename = IIf(Right$(ThisWorkbook.Path, 1) <> "\", ThisWorkbook.Path & "\", ThisWorkbook.Path)
strFullFilename = strFullFilename & "Fehlersammelliste.xlsx"
On Error Resume Next
Dim errorCode As Long
Application.ScreenUpdating = False
Set wkb = Workbooks.Open(strFullFilename)
wkb.Windows(1).Visible = False
Application.ScreenUpdating = True
errorCode = Err.Number
On Error GoTo 0
If wkb Is Nothing Then
Call Err.Raise(errorCode, Description:="Die Mappe '" & strFullFilename & "' konnte nicht geöffnet werden - existiert diese?")
End If
End If
Set GetFehlersammelliste = wkb
End Function
Wenn du dann in deiner UserForm dann auf deinen Button zum übernehmen/speichern der Daten klickst, dann steht in dem Click-Event etwas drin wie z.B.:
AddRecord("Text", 2, CVErr(xlErrNA))
Grüße
|