그래서 어제 나는 내 첫 번째 질문을 올렸고, 벽돌 더미처럼 쓰러졌다. 그러나 나 자신을 털어 내고, 가루를 벗고, 잘하면이 질문은 받아 들일 만하다. :-)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보다 먼저 Option Explicit를 추가하고 Integer가 아닌 Dim g As Range를 추가하십시오. – pnuts
감사합니다. 나는 g가 정수를 반환 할 것이라고 생각했지만, 여러분이 맞습니다. 범위는 찾고자하는 것이 었습니다. 지금 Range.EntireRow.Select는 인수가 선택 사항이 아니기 때문에 유효하지 않습니다 ...이 코드 줄은 이전에 작동했습니다 ... 어떤 생각이 들었습니까? – user2674568
아마도 Range (R, 1)입니다. 범위보다는 오히려. ? – pnuts