Ich habe ein einfaches Makro erstellt, um Daten zu filtern und zu einem bestimmten Blatt [ISRisks] nach der letzten Zeile hinzuzufügen. Mir ist jedoch klar, dass ich nicht sicher bin, wie überprüft werden kann, ob die Daten bereits im [ISRisks] -Blatt vorhanden sind! Bitte könnte jemand helfen - Spalte a in [ISRisks] enthält das einzigartige RISKID-Feld zur Überprüfung. Das ist, was ich habe, so weit:Kopieren von Daten in ein neues Blatt nur, wenn keine Daten mit einem Makro vorhanden sind
Sub ISRISKCOPY()
'
Dim lMaxRows As Long
Dim ws As Worksheet
Dim rng As Range
Dim LR As Long
Dim rTable As Range
For Each ws In ActiveWorkbook.Worksheets
If (ws.Name <> "ISRisks") And (ws.Name <> "Closed Risks") And (ws.Name <> "Risk Grading Matrix ") And (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") Then
Application.DisplayAlerts = False
With ws
If .FilterMode Then .AutoFilterMode = False
Sheets(ws.Name).Range("$A$2:$W$2").AutoFilter Field:=5, Criteria1:=Array("IS", "IS - Information Security"), Operator:=xlFilterValues
Set rTable = Sheets(ws.Name).AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible)
rTable.Copy
lMaxRows = Sheets("ISRisks").Cells(Rows.Count, "a").End(xlUp).Row
Range("a" & lMaxRows + 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Else
End If
Next ws
'sorting unique id column
Sheets("ISRisks").Range("A1").Select
ActiveWorkbook.Worksheets("ISRisks").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ISRisks").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("ISRisks").Sort
.SetRange Range("A2:A10000")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.DisplayAlerts = True
End Sub
Sie gefunden Sie überprüfen möchten, ob es * keine * Daten gibt oder bestimmte Daten? Außerdem schlage ich *** *** vor, durchzulesen und anzuwenden, [wie man die Verwendung von '.Select' /' .Activate' vermeidet (https://stackoverflow.com/questions/10714251/how-to-avoid) -using-select-in-excel-vba-macros) – BruceWayne
Hallo @BruceWayne - danke, ich bin nicht so vertraut mit VBA, aber werde das berücksichtigen. Sehr geschätzt – AJCT
Sie können 'Range (" A3 ") ersetzen. Wählen Sie Range (Auswahl, Selection.End (xlToRight)). Wählen Sie Range (Auswahl, Selection.End (xlDown)). Wählen Sie Selection.Copy' mit diesem Zeile, um dasselbe zu tun, ohne Select zu verwenden - 'Bereich (" A3 ", Zellen (Bereich (" A3 "). Ende (xlDown) .Row, Bereich (" A3 "). Ende (xlToRight) .Column)) ' – tjb1