Итак, вчера я опубликовал свой первый вопрос SO, и он спустился, как тонна кирпичей. Тем не менее, я подобрал себя, пыхтел, и, надеюсь, этот вопрос будет более приемлемым ... :-)Excel VBA: ошибки компилятора
Я пытаюсь удалить дубликаты данных из списка анкет по вопросам здравоохранения, которые я должен контролировать, но сложный бит, с которым я боролся, заключался в том, чтобы найти дубликат в одном столбце, а затем проверить, что данные в той же строке для 3 соседних столбцов также являются дубликатами. Хранение поиска «дублированной строки» - это бит, который меня отбрасывал.
Вот код, который я вымотал из других аналогично функционирующих скриптов. Я сейчас в режиме отладки и продолжаю получать ошибки ... У меня нет большого опыта работы с VBA, поэтому у меня заканчиваются варианты.
В настоящее время я получаю ошибки несоответствия типа с переменной g
, а также firstAddress
. Почему эти проблемы?
Могу ли я позвонить firstAddress.Row
или я лаю неправильное дерево?
Вот фрагмент кода:
g = .Find(Range("G" & i).Text, LookIn:=xlValues)
If Not g Is Nothing Then
firstAddress = g.Address
dupRow = firstAddress.Row
И вот весь код ниже. Любая помощь приветствуется!
Sub FindCpy()
Dim lw As Long
Dim i As Integer
Dim sh As Worksheet
Dim dupRow As Integer
Dim g As Integer
Dim firstAddress As Integer
'Used for the new worksheet we are pasting into
Dim objNewSheet As Worksheet
Dim rngNextAvailbleRow As Range
'Used to narrow down the logical operators for duplicates
Dim rngFirst As Range
'Set the ranges
rngFirst = Range("G" & 1, "G" & lw)
Set sh = Sheets("Completed")
lw = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To lw 'Find duplicates from the list.
If Application.CountIf(Range("A" & i & ":A" & lw), Range("A" & i).Text) = "Complete" Then
'if COMPLETE, check the rest of the sheet for any 'in progress' duplicates...
With Worksheets("Still In Progress").rngFirst
g = .Find(Range("G" & i).Text, LookIn:=xlValues)
If Not g Is Nothing Then
firstAddress = g.Address
dupRow = firstAddress.Row
If Range("H" & dupRow).Text = Range("H" & i).Text _
And Range("I" & dupRow).Text = Range("I" & i).Text _
And Range("J" & dupRow).Text = Range("J" & i).Text Then
'select the entire row
Range.EntireRow.Select
'copy the selection
Selection.Cut
'Now identify and select the new sheet to paste into
Set objNewSheet = ThisWorkbook.Worksheets("Completed")
objNewSheet.Select
'Looking at your initial question, I believe you are trying to find the next available row
Set rngNextAvailbleRow = objNewSheet.Range("A1:A" & objNewSheet.Cells(Rows.Count, "A").End(xlUp).Row)
Range("A" & rngNextAvailbleRow.Rows.Count + 1).Select
ActiveSheet.Paste
'delete the initial row
rngCell.EntireRow.Delete
Set g = .FindNext(g)
Loop While Not g Is Nothing And g.Address <> firstAddress
End If
End With
Next i
End Sub
Попробуйте добавить параметр Явно перед Sub и Dim g как Range, а не Integer. – pnuts
спасибо, pnuts, это здорово. Я думал, что g будет возвращать целое число, но вы правы, диапазон действительно то, что он ищет. СЕЙЧАС, это говорит мне, что Range.EntireRow.Select недействителен, потому что аргумент не является обязательным ... Эта строка кода работала до ... Любые мысли? – user2674568
Может быть, Range (R, 1). а не Range. ? – pnuts