我已經創建了一個簡單的宏來過濾數據並將其複製並添加到最後一行之後的特定工作表[ISRisks]中。然而我意識到,我不知道如何檢查數據是否已存在於[ISRisks]工作表中!請有人幫忙 - [ISRisks]中的列a包含唯一的RISKID字段進行檢查。 這是我到目前爲止有:僅當數據不存在時才使用宏將數據複製到新工作表
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
你想檢查是否有*有*的數據,或特定的數據?另外,我***高度***建議閱讀和申請,[如何避免使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macros) – BruceWayne
嗨@BruceWayne - 謝謝我對VBA並不熟悉,但會考慮到這一點。非常感謝 – AJCT
您可以替換範圍(「A3」)。選擇 範圍(選擇,選擇。結束(xlToRight))。選擇 範圍(選擇,Selection.End(xlDown))。選擇 Selection.Copy' with this (範圍(「A3」)。結束(xlDown)。行,範圍(「A3」)。結束(xlToRight).Column))。複製' – tjb1