Hallo liebes VBA Forum Team,
Ich bin ein absolter Neuling auf dem Gebiet VBA und habe mein wissen nur von Youtube Videos bitte seid nett zu mir =)
Ich habe ein Makro gebaut:
Option Explicit
Const ws_DB As String = "Bestand"
Const ws_Eingabe As String = "Ersatzteil_Anlegen"
Sub Ersatzteil_Anlegen_EingabeDB()
Dim tbl As ListObject
Dim header As Variant
Dim Spalte As Long
Spalte = 1
With Worksheets(ws_DB)
'Tabelle einlesen
Set tbl = .ListObjects(1)
'Zeile einfügen
tbl.ListRows.Add
'Zeilenhöhe einfügen
.Rows(tbl.DataBodyRange.Rows.Count + tbl.HeaderRowRange.Row).RowHeight = .Rows(tbl.HeaderRowRange.Row + 1).RowHeight
End With
With Worksheets(ws_Eingabe)
'Schleife über allen Tabellenheader
For Each header In tbl.HeaderRowRange
If header <> "Differenz" Then ' Wenn der Header nicht "Differenz" ist, fahre fort
tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, Spalte).Value = _
.Range(.Cells.Find(What:=header, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Address).Value
Spalte = Spalte + 1
End If
Next header
End With
End Sub
Dieses Funktioiert wunderbar, nun wollte ich das Makro um die Funktion erweitern, das es vor der Eingabe in die Tabelle prüft ob der einzugebende Wert in der Spalte Artikelnummer schon vorhanden ist und falls dies der Fall ist eine Fehlermeldung auswirft.
Option Explicit
Const ws_Bestand As String = "Bestand"
Const ws_Eingabe As String = "Ersatzteil_Anlegen"
Const ArtikelnummerZelle As String = "Q17"
Sub Ersatzteil_Anlegen_EingabeDB()
Dim tbl As ListObject
Dim header As Variant
Dim Spalte As Long
Dim Artikelnummer As Variant
Dim ZielZelle As Range
Spalte = 1
With Worksheets(ws_Eingabe)
'Die Artikelnummer aus dem Eingabeblatt lesen
Artikelnummer = .Range(ArtikelnummerZelle).Value
End With
With Worksheets(ws_Bestand)
'Die Tabelle "Bestand" einlesen
Set tbl = .ListObjects(1)
'Die Zelle mit der Überschrift "Artikelnummer" in der Tabelle "Bestand" finden
Set ZielZelle = .Range("E11")
'Überprüfen, ob die Artikelnummer bereits vorhanden ist
If Not ZielZelle Is Nothing Then
Dim letzteZeile As Long
letzteZeile = .Cells(.Rows.Count, ZielZelle.Column).End(xlUp).Row
If Not IsError(Application.Match(Artikelnummer, .Range(.Cells(ZielZelle.Row + 1, ZielZelle.Column), .Cells(letzteZeile, ZielZelle.Column)), 0)) Then
MsgBox "Die eingegebene Artikelnummer ist bereits vorhanden!", vbExclamation
Exit Sub
End If
Else
MsgBox "Die Überschrift 'Artikelnummer' wurde nicht gefunden!", vbExclamation
Exit Sub
End If
End With
With Worksheets(ws_Eingabe)
'Schleife über allen Tabellenheader
For Each header In tbl.HeaderRowRange
If header <> "Differenz" Then
' Wenn der Header nicht "Differenz" ist, fahre fort
tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, Spalte).Value = _
.Range(.Cells.Find(What:=header, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2).Address).Value
Spalte = Spalte + 1
End If
Next header
End With
End Sub
Dies Funktioniert auch, aber jetzt ist es so das wenn die Artikelnummer nicht vorhahnden ist keine weitere Soalte in der Tabelle hinzufügt sondern es wird einfach immer die erste Spalte ersetzt.
Ich hoffe ihr könnt mir helfen,
Gruß Alex
|