2017-11-03 1 views
0

나는에 의한 2 차원 배열을 선언했다. 내가 처음이 배열의는 1 차원으로 정의했고, 그것은 작동하지만, 어떤 이유로 별도의 규 격 치를 추가하면 디스플레이, 실패 코드를 만드는 :사용 값은

오류 1004 "응용 프로그램 정의 또는 개체 정의 오류"

msgbox(WS_array_bodem(1,1)을 사용하면 Gewasbescherming이라는 문자열을 얻습니다. 아래 코드에서 무엇이 잘못 될까요?

Dim lastrow_gewas As Integer 
    lastrow_gewas = WB_score.Worksheets(WS_array_bodem(1, 1)).Range("B" & Rows.Count).End(xlUp).row 
Dim range_gewas As Range 
    Set range_gewas = WB_score.Worksheets(WS_array_bodem(1, 1)).Range("B1:B" & lastrow_gewas) 

WB_score

는 다음과 같이 정의된다

Dim WB_score As Workbook 
    If BookOpen(scorebook) Then 
    Else 
     Workbooks.Open (ThisWorkbook.Path & "\" & scorebook) 
    End If 
    Set WB_score = Application.Workbooks(scorebook) 

그리고 잘 작동합니다.

참조하려는 워크 시트가 WB_score에 있습니다.

+0

어떤 오류가 발생하고 있습니다. WB_Score 워크 북에 그 이름의 워크 시트가 있습니까? – JNevill

+0

@JNevill 그것을 지적 해 주신 덕분에 – Luuklag

+0

문제 해결을 위해 해당 워크 시트 이름을 오류가있는 동일한 행에 하드 코딩하면 오류가 사라지나요? 배열을 선언했는지, 그렇다면 어떤 타입인지 알고 싶습니다. – JNevill

답변

0

적어도 3 가지 가능한 오류가 있습니다. 이를 방지하기 위해 다음과 같이하십시오 :

Dim lastrow_gewas As Long 
Dim wks    As Worksheet 

Set wks = wb_score.Worksheets(WS_array_bodem(1, 1)) 

With wks 
    lastrow_gewas = .Range("B" & .Rows.Count).End(xlUp).Row 
End With 

가능한 오류 : 행에 대한 정수의

  • 사용;
  • .Rows에 대한 올바른 워크 시트를 참조하지 않습니다.
  • "Gewasbescherming"워크 시트가 없지만 다른 방법으로 작성되었습니다. 이 경우 Set wks 행에 오류가 표시됩니다.
+0

Th 귀하의 답변에 대한 답변을 Ank. Integer 대신 Long을 사용하면 아무런 차이가 없어야하고, 나는 그것을 체크하지 않는다. 위에서 언급 한대로 WB_score를 다시 시작하면 문제가 해결되었습니다. – Luuklag

+0

@Luuklag - 오신 것을 환영합니다. 'Long'에 대해서는'B' 열에 약 40.000 줄을 놓고 차이가 없는지 다시 확인하십시오. – Vityata

+0

예, 그렇습니다. – Luuklag