2012-12-25 3 views
0

코드의 아래 부분에 무엇이 잘못되었는지 말해 주시겠습니까? 반복적으로 아래 코드에 Type Mismatch 같은 오류가 발생 :VBScript 코드에서 'Type Mismatch'로 오류가 반복적으로 발생합니다

TotalRows=objExcel1.Application.WorksheetFunction.CountA(ob4.Columns(1)) 
'MsgBox(TotalRows) 
ReDim ArrParent(TotalRows - 2) 
ArrParent=ob4.Range("A2:" & "A" & TotalRows).Value 'here i am getting an error as said above 
'Call to the subroutine 
ParentPIDNumber ArrParent,ob3,ob2,ob4 

CODE

Screen

감사

Sub FileredOpenProcessToDel(ob3,ob2,ob4) 

     Dim ColumnToFilter,TotalRows 
     Dim rngFilter,cel,str,rangesToRemove,x 
     Dim strToRemove : strToRemove = "" 
     Dim ArrParent 

     objExcel1.ScreenUpdating = False 
     objExcel1.Calculation = -4135 'xlCalculationManual 
     ColumnToFilter=objExcel1.Application.WorksheetFunction.CountA(ob4.Rows(1)) - 1 
     ob4.Range(ob4.Cells(1,ColumnToFilter),ob4.Cells(1,ColumnToFilter)).AutoFilter ColumnToFilter, "Open",,,True 

     'Dim rngFilter as Range 
     Set rngFilter = objExcel1.Application.Intersect(ob4.UsedRange,ob4.UsedRange.Offset(1),ob4.Columns(1)).SpecialCells(12)'xlCellTypeVisible 
      'MsgBox(rngFilter.Rows.Count) 
      REM Do While 1=1 
      REM 'Msgbox 
      REM Loop 
     'msgbox "Filtered range has " & rngFilter.Rows.Count & " rows." 
      str="" 
      For each cel in rngFilter 

       str = str & (cel.row) & ":" & (cel.row) & "," 

      Next 

        rangesToRemove = Split(str,",") 

        For x = UBOUND(rangesToRemove)-1 To LBOUND(rangesToRemove) Step -1 

         strToRemove = strToRemove & rangesToRemove(x) 

          If Len(strToRemove) > 200 then 

           ob4.Range(strToRemove).delete'str & rangesToRemove(x) & ":" & rangesToRemove(x) & "," 
           strToRemove = "" 

          Else 

           strToRemove = strToRemove & "," 

          End If 

        Next 
        If len(strToRemove) > 0 then 

         strToRemove = Mid(strToRemove, 1, Len(strToRemove) - 1) 
         'strToRemove = Left(strToRemove, Len(strToRemove) -1) 
         ob4.Range(strToRemove).delete 

        End If 

     ob4.AutoFilterMode = False 
     objExcel1.ScreenUpdating = True 
     objExcel1.Calculation = -4105 'xlCalculationAutomatic 

     TotalRows=objExcel1.Application.WorksheetFunction.CountA(ob4.Columns(1)) 
     MsgBox(TotalRows) 
     'ReDim ArrParent(TotalRows - 2) 
     ArrParent=ob4.Range("A2:A" & TotalRows).value2 
     'MsgBox(ArrParent(1,0)) 
     'Call to the subroutine 
     ParentPIDNumber ArrParent,ob3,ob2,ob4 

    End Sub 
,

+0

어떤 값이 TotalRows에 할당됩니까? – Sam

+0

@SamWard' totalrows'는 열 # 1의 데이터 수입니다. 여기 좀 도와주세요. 정말 여기 붙어 있어요! –

+0

오류가 발생하기 전에 어떤 값이 TotalRows입니까? 중단 점을 추가하고 코드를 단계별로 실행하거나 오류 직전에 Msgbox (TotalRows)를 추가 할 수 있습니까? – Sam

답변

1

A와 값을 저장하기 위해 Application.Transpose를 사용해보십시오 1d 배열 ||

ArrParent=Application.Transpose(ob4.Range("A2:A" & TotalRows).value) 

편집

나는 범위 배열은 항상 두 개의 차원 배열이라고 생각합니다. Transpose는 데이터를 1 차원 배열로 변환하는 데 사용됩니다.

처음에는 ArrParent를 배열 (968) 대신 배열 (0, 968)에 할당했습니다.

제 설명이 정확하다고 생각합니다. 내가 누군가가 아니라면 누군가 나를 교정하십시오.

+0

뒤에 논리를 말해 줄 수 있습니까? –

+0

설명을 추가했습니다. – Sam

+0

Lbound (ArrParent)는 저에게 '1'로 바운드를 제공하지만, 왜 '0'이 아닌가? –

관련 문제