Merhaba, bir cevabın bir kodunu 'How do I delete duplicates between two excel sheets quickly vba' sorgusuna kullandım ve bu kodu kendi VBA komut dosyamda değiştirmeye çalıştım. Kod, dizideki satırlarla aynı miktarda satır siler ancak yalnızca ilk 11 satırı siler. VBA’ya oldukça yeni ve neden bunu yaptığını tam olarak anlayamıyorum. Aşağıda kullandığım komut dosyasının bir kopyası.Yinelenen kaldırma vba içinde bir dizi kullanarak kaldırma
Dim overLayWB As Workbook 'Overlay_workbook
Dim formattedWB As Workbook 'Formatted_workbook
Dim formattedWS As Worksheet 'Current active worksheet (Formatted)
Dim overLayWS As Worksheet 'Worksheet in OverLay
Dim lastRowFormatted As Long
Dim lastRowOverLay As Long
Dim targetArray, searchArray
Dim targetRange As Range
Dim x As Long
'Update these 4 lines if your target and search ranges change
Dim TargetSheetName As String: TargetSheetName = "Formatted"
Dim TargetSheetColumn As String: TargetSheetColumn = "G22"
Dim SearchSheetName As String: SearchSheetName = "Overlay"
Dim SearchSheetColumn As String: SearchSheetColumn = "G22"
'open Overlay workbook
Set overLayWB = Workbooks.Open("C:\Documents\Templates\Overlaye.xls") 'Path for workbook Overlay to copy from
Set formattedWS = Workbooks("Formatted").Sheets("DLT Formatted")
Set overLayWS = Workbooks("Overlay").Sheets("Overlay")
Set formattedWB = ThisWorkbook
'Load target array
With formattedWS
Set targetRange = .Range(.Range(TargetSheetColumn & "7"), _
.Range(TargetSheetColumn & Rows.Count).End(xlUp))
targetArray = targetRange
End With
'Load Search Array
With overLayWS
searchArray = .Range(.Range(SearchSheetColumn & "7"), _
.Range(SearchSheetColumn & Rows.Count).End(xlUp))
End With
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
'Populate dictionary from search array
If IsArray(searchArray) Then
For x = 1 To UBound(searchArray)
If Not dict.exists(searchArray(x, 1)) Then
dict.add searchArray(x, 1), 1
End If
Next
Else
If Not dict.exists(searchArray) Then
dict.add searchArray, 1
End If
End If
'Delete rows with values found in dictionary
If IsArray(targetArray) Then
'Step backwards to avoid deleting the wrong rows.
For x = UBound(targetArray) To 1 Step -1
If dict.exists(targetArray(x, 1)) Then
targetRange.Cells(x).EntireRow.Delete
End If
Next
Else
If dict.exists(targetArray) Then
targetRange.EntireRow.Delete
End If
End If
kimse çok, eğer doğru komut dosyası değişmiş değil, ya da bir şey eksik appreicated olacağını bana bu konuda yardımcı olabilir misiniz?
Bir kesme noktası ayarlarsanız ve beklenmeyen davranışlar neyin sebep görebilirsiniz kod boyunca adım. Daha fazla bilmeden, olası bir şüpheli 'Rows.Count' --- --- niteleyici olmadan, hangi satırların varsayılan olarak ifade ettiğini bilmiyorum. Bir çalışma sayfası veya aralığı belirtmeniz gerekebilir, ör. .Range (some_range) .Rows.Count'un aradığınız davranışı elde etmesi. – xidgel