나는 아마추어 vba 코더입니다. 루프에서 세 번째 시간이 실행될 때 일치 함수가 "1004, 워크 시트 기능의 일치 속성을 가져올 수 없습니다."오류를 발생시키는 이유를 파악하려고합니다.Excel VBA - 일치 함수에서 루프 오류가 발생합니다.
내 코드는 다음과 같습니다
Sub com_emp()
'Defining variables
Application.Run "set_var"
c_row_now = db_r_datastart
row_now = ce_r_datastart
Do While cy.Cells(c_row_now, db_c_ident) <> ""
On Error GoTo skip_emp 'In case employee is not found in historical, error redirect
h_row_now = Application.WorksheetFunction.Match(cy.Cells(c_row_now, db_c_ident), hy.Columns(db_c_ident), 0)
If h_row_now > 0 And hy.Cells(h_row_now, db_c_englev) <> "" Then 'If person is found and also has engagement level
ce.Cells(row_now, ce_c_ident) = cy.Cells(c_row_now, db_c_ident)
ce.Cells(row_now, ce_c_his_englev) = hy.Cells(h_row_now, db_c_englev)
ce.Cells(row_now, ce_c_his_eng) = hy.Cells(h_row_now, db_c_eng)
ce.Cells(row_now, ce_c_cur_englev) = cy.Cells(c_row_now, db_c_englev)
ce.Cells(row_now, ce_c_cur_eng) = cy.Cells(c_row_now, db_c_eng)
ce.Cells(row_now, ce_c_lev1) = cy.Cells(c_row_now, db_c_lev1)
ce.Cells(row_now, ce_c_lev2) = cy.Cells(c_row_now, db_c_lev2)
ce.Cells(row_now, ce_c_lev3) = cy.Cells(c_row_now, db_c_lev3)
ce.Cells(row_now, ce_c_lev4) = cy.Cells(c_row_now, db_c_lev4)
ce.Cells(row_now, ce_c_lev5) = cy.Cells(c_row_now, db_c_lev5)
row_now = row_now + 1
End If
skip_emp:
c_row_now = c_row_now + 1
Loop
End Sub
나는 세트를 다른 매크로에 의해 사용되는 몇 가지 전역 변수를 호출하고 함수입니다.
'''''DECLARATIONS'''''
'Current and Historical Year Sheet
Public db_c_ident As Integer
Public db_c_say1 As Integer
Public db_c_say2 As Integer
Public db_c_stay1 As Integer
Public db_c_stay2 As Integer
Public db_c_strive1 As Integer
Public db_c_strive2 As Integer
Public db_c_lev1 As Integer
Public db_c_lev2 As Integer
Public db_c_lev3 As Integer
Public db_c_lev4 As Integer
Public db_c_lev5 As Integer
Public db_c_avg As Integer
Public db_c_englev As Integer
Public db_c_eng As Integer
'Common Employees
Public ce_r_datastart As Integer
Public ce_c_ident As Integer
Public ce_c_his_englev As Integer
Public ce_c_his_eng As Integer
Public ce_c_cur_englev As Integer
Public ce_c_cur_eng As Integer
Public ce_c_lev1 As Integer
Public ce_c_lev2 As Integer
Public ce_c_lev3 As Integer
Public ce_c_lev4 As Integer
Public ce_c_lev5 As Integer
'Workbook, Sheets and other stuff
Public cy As Worksheet
Public hy As Worksheet
Public ce As Worksheet
Public bck As Worksheet
'Variables
Public db_r_datastart As Long
Public row_now As Long
Public h_row_now As Long
Public c_row_now As Long
''''Global Value Pick'''''
Private Sub set_var()
'Workbook, Sheets and other stuff
Set cy = ThisWorkbook.Worksheets("Current Year")
Set hy = ThisWorkbook.Worksheets("Historical Year")
Set ce = ThisWorkbook.Worksheets("Common")
Set bck = ThisWorkbook.Worksheets("Backend")
'Current and Historical Year Sheet
db_r_datastart = bck.Cells(4, 3)
db_c_ident = bck.Cells(5, 3)
db_c_say1 = bck.Cells(6, 3)
db_c_say2 = bck.Cells(7, 3)
db_c_stay1 = bck.Cells(8, 3)
db_c_stay2 = bck.Cells(9, 3)
db_c_strive1 = bck.Cells(10, 3)
db_c_strive2 = bck.Cells(11, 3)
db_c_lev1 = bck.Cells(12, 3)
db_c_lev2 = bck.Cells(13, 3)
db_c_lev3 = bck.Cells(14, 3)
db_c_lev4 = bck.Cells(15, 3)
db_c_lev5 = bck.Cells(16, 3)
db_c_avg = bck.Cells(17, 3)
db_c_englev = bck.Cells(18, 3)
db_c_eng = bck.Cells(19, 3)
'Common Employees
ce_r_datastart = bck.Cells(31, 3)
ce_c_ident = bck.Cells(32, 3)
ce_c_his_englev = bck.Cells(33, 3)
ce_c_his_eng = bck.Cells(34, 3)
ce_c_cur_englev = bck.Cells(35, 3)
ce_c_cur_eng = bck.Cells(36, 3)
ce_c_lev1 = bck.Cells(37, 3)
ce_c_lev2 = bck.Cells(38, 3)
ce_c_lev3 = bck.Cells(39, 3)
ce_c_lev4 = bck.Cells(40, 3)
ce_c_lev5 = bck.Cells(41, 3)
End Sub
나는 방금 배운만큼 코드가 효율적이지 않을 수 있으므로 어떤 권장 사항도 인정 될 것입니다.
당신은'오류에 고토 skip_emp'을 가지고 있지만 : 당신이 할 때마다 오류를 직접 처리하기 위해 더 좋을 것이다, 그러나
: 코드는 같은 모양 안 오류가 발생하면 'Resume'을 정상적으로 처리하므로 "오류 처리"모드가 계속됩니다. 따라서 첫 번째 또는 두 번째 반복에서 오류가 있었고 "오류 처리"모드에서 세 번째 반복에서 오류가 발생했기 때문에 루프를 통해 세 번째 오류가 발생했을 수 있습니다. – YowE3K