2014-01-18 2 views
1

내 Excel 통합 문서 (.vba)의 명명 된 범위에서 일치하는 셀 값을 찾으려고합니다. 내가 찾고있는 값을 알고 범위의 이름도 알고 코드를 실행할 때 처음에는 문제없이 실행되지만 두 번째에는 새로운 범위 이름으로 실행하면 오류가 발생합니다.명명 된 범위에서 일치하는 셀 값 찾기

명명 된 범위를 검색하는 데 몇 가지 다른 방법을 시도했으며 두 방법 모두 같은 오류가 발생합니다. 오류 : "개체 '_Global'의 '범위'메서드가 실패했습니다." 내가 시도

내 초기 코드는 다음과 같습니다

'march through the list of racks 
For i = iFirstRackRow To iLastRackRow 
    iCurrRackSize = Sheets("PLC I-O").Cells(i, 6).value 
    iHardwareIndexEnd = iHardwareIndex + iCurrRackSize - 1 
    rngCardsName = Trim(Sheets("PLC I-O").Cells(i, 2).value & "Cards") 
    'march through the rack hardware 
    For j = iHardwareIndex To iHardwareIndexEnd 
     modCardSize = 0 

     'march through each card in the rack 
     For Each zCell In Range(rngCardsName) 
      If zCell = Sheets("PLC I-O").Cells(j, 2) Then 
       modCardSize = Sheets("Links").Cells(zCell.Row, zCell.Column + 1).value 
       Exit For 
      End If 
     Next zCell 

     If modCardSize <> 0 Then 
      'io module matched 
      NumRows = NumRows + modCardSize 
     Else 
      'processor or adapter module found 
      NumRows = NumRows + 1 
     End If 
    Next 
    iHardwareIndex = iHardwareIndex + iCurrRackSize 
Next 

또는 나는 또한 시도 :

Dim rngFoundCell As Range 
    With Range(rngCardsName) 
     Set rngFoundCell = .Find(What:=Sheets("PLC I-O").Cells(j, 2).value, _ 
          After:=.Cells(.Cells.Count), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 
     If Not rngFoundCell Is Nothing Then 
      'cell match was found 
      rngrow = rngFoundCell.Row 
      rngcol = rngFoundCell.Column 
      modCardSize = Sheets("Links").Cells(rngrow, rngcol + 1).value 
     Else 
      'cell match was not found 
     End If 
    End With 

내가 잘못 여기서 뭐하는 거지 모르겠습니다. 도와주세요.

+0

이 코드로 무엇을하려합니까? 나는 단지 그것을 훑어 보았지만 VBA가 필요조차 없다고 할 수 있습니까? 즉, 수식 ('vlookup','countifs' 등)이 적당 할 수 있습니까? – Marc

+2

어디에서'Range (rngCardsName)'을 설정 했습니까?'rngCardsName'이 변수가 아닌 범위의 실제 이름이면'Range ("rngCardsName")'을 사용하고 싶을 수도 있습니다. – brettdj

+1

'Sheets ("PLC IO ") .RangeCardsName = Trim (Sheets ("PLC IO "). 셀 (i, 2) .value &"Cards ")'는 다음을 반환합니다 :'RngCardsName = 유효한 범위 이름. –

답변

0

나는 문제가 라고 생각한다. 의매개 변수 .Find. 값 After:=.Cells(1)으로 매개 변수를 변경하십시오.

0

감사합니다. 나는이 문제를 발견했다. 그것은 Trim 명령이었습니다. 스프레드 시트 ("PLC I-O")에 여러 개의 공백이 있었기 때문에 셀 (i, 2). 값으로 사용자 정의 함수를 사용하여 모든 공백이 제거되었는지 확인해야했습니다.

관련 문제