2016-06-29 2 views
0

런타임 오류 1004가 발생했습니다. '_Worksheet'개체의 '범위'메서드가 실패했습니다.런타임 오류 1004 - 개체 범위 실패 - VBA 2013

이 코드는이 프로젝트의 초안에서 사용되었지만 새로운 프로젝트 파일로 가져올 때 나는 이것을 얻었습니다 ... 명명 된 범위 나 워크 시트 이름이 이전 버전에서 변경되지 않았습니다. 도와주세요!

Private Sub UserForm_Initialize() 
'Set Variables to populate combobox 
Dim rngProjects As Range 
Dim ws1 As Worksheet 

Set ws1 = Worksheets("Validation") 

For Each rngProjects In ws1.Range("Projects") 

Me.cboProject.AddItem rngProjects.Value 
Me.cboAccount.AddItem rngProjects.Value 

Next rngProjects 

'Add static data for combobox 
Me.cboTransactionType.AddItem "Income" 
Me.cboTransactionType.AddItem "Expense" 
+0

어떤 라인에서 오류가 발생합니까? – Kyle

+0

그것은 나에게 줄을주지 않으며, 심지어 디버그 옵션을주지 않습니다. http://prntscr.com/bmrx1z –

+0

이상한. 통합 문서의 정규화를 시도 했습니까? 그래서'WorkbookName.Worksheets ("Validation")'. 네가 말한 것처럼 "Projects"라는 이름의 범위가 존재한다면 그것이 문제를 야기 할 수있는 유일한 것입니다. – Kyle

답변

0

이 (때로는 선행 또는 후행 공간이 인식 할 수없는) 시트 이름 중 하나가 변경된 것을 나에게 보인다 또는 명명 된 범위의 이름이 변경되었습니다. 또한 명명 된 범위가 다른 시트 (유효성 검사 시트 제외)로 옮겨 졌을 수도 있습니다.

위의 내용을 모두 확인한 다음 주석에 제안 된대로 명시 적 참조를 사용하면 문제를 찾을 수 있습니다. 다음은 몇 가지 추가 점검 사항이있는 코드입니다. 시도해보고 문제가 발생했는지 여부를 알려면 알려주십시오.

Option Explicit 

Private Sub UserForm_Initialize() 
'Set Variables to populate combobox 
Dim rngProjects As Range 
Dim ws1 As Worksheet 
Dim bolFound As Boolean 
Dim nm As Name 

For Each ws1 In ThisWorkbook.Worksheets 
    If ws1.Name = "Validation" Then bolFound = True 
Next ws1 
If bolFound = False Then 
    MsgBox "Required sheet not found." 
    Exit Sub 
End If 

Set ws1 = Worksheets("Validation") 

For Each rngProjects In ws1.Range(ws1.Cells(8, 1), ws1.Cells(ws1.Rows.Count, 1).End(xlUp)) 
    frmAddTransaction.cboProject.AddItem rngProjects.Value 
    frmAddTransaction.cboAccount.AddItem rngProjects.Value 
Next rngProjects 

'Add static data for combobox 
frmAddTransaction.cboTransactionType.AddItem "Income" 
frmAddTransaction.cboTransactionType.AddItem "Expense" 

End Sub 

아래와 같이 간접 명명 된 범위가 제거되었습니다. 대신 시트가 코드에서 직접 참조됩니다. 이와 같이 명명 된 범위의 변경 사항은 코드에 아무런 영향을 미치지 않습니다. 대신, 8 행의 오프셋은 VBA에 쓰여지고 약간이 더 안전합니다.

+0

이상하게도 실행 중에 오류 메시지가 표시됩니다. http://prntscr.com/bmsaz4 또한 명명 된 범위 http : //를 확인했습니다. prnt.sc/bmsahb 미안 내가 뭔가를 놓친다면, 내 마음이 우글 거리다. –

+0

명백하게, 캐리지 리턴은 가벼운 hick-up을 일으켰습니다. 그래서 그것을 제거했습니다 (어쨌든 비주얼 이었기 때문에). 조정 된 코드를보고 지금 실행할 수 있는지 확인하십시오. – Ralph

+0

디버그를 사용하여 코드를 통해 ws1 세트 워크 시트 ("유효성 검사")를 모두 확인한 다음 명명 된 범위 확인으로 이동합니다 ... 오류없이 두 번째 실행에서 블록을 한 번 건너 뜁니다. 같은 오류가 나타납니다 : nm.RefersToRange.Worksheet.Name <> "Validation"then –

관련 문제