2016-10-16 2 views
0

다음 줄은 디버그 할 수없는 오류를 일으키는 것입니다. 오류는 "필요한 개체"라고하고 적절한 개체로 모든 메서드와 함수를 제공했다는 것을 알 수 있습니다.String.Right 함수 런타임 오류 '424': 필요한 개체

변수 "first"는 문자열로 초기화되며이 줄은 For 루프에 있으므로 "i"변수가 사용됩니다.

first = Right(Sheets("Sheet1").Cells(i, 1).Text, Sheets("Sheet1").Cells(i, 1).Text.LastIndexOf(" ")) 
+0

"i"가 0보다 크고 현재 통합 문서에 "Sheet1"이라는 시트가 있는지 확인하십시오 (매크로가있는 통합 문서 일 필요 없음) – barrowc

답변

1

.TextLastIndexOf 재산이없는 StringString를 반환합니다. 사실 객체가 아니기 때문에 속성이 없습니다. 그것이 당신이 "필요한 객체"를 얻는 이유입니다. 당신이 원하는 것은 InStrRev 당신에게 마지막을 제공하면서 InStr 기능은 당신에게 검색 문자열의 첫 번째 항목의 인덱스를 제공

InStrRev(someString, " ") 

입니다. 그래서이 즉각적인 문제를 해결할 것입니다 : 당신은 아마 마지막 공백 문자의 일부 권리를 원하는, 그래서 당신은 문자열의 오른쪽 부분의 길이를해야하지만 InStrRev 당신의 길이를 줄 것이다 그러나

Dim cellCont As String 
'... 
cellCont = Sheets("Sheet1").Cells(i, 1).Value2 'use value or value2, not text 
first = Right(cellCont, InStrRev(cellCont, " ")) 

왼쪽 부분. 따라서 총 길이에서 공간의 위치를 ​​빼야합니다. 당신은 단어의 수를 알고있는 경우

first = Split(cellCont, " ")(UBound(Split(cellCont, " "))) 

사전이

first = Split(cellCont, " ")(2) 

같은 훨씬 예뻐 보일 것이다

first = Right(cellCont, Len(cellCont) - InStrRev(cellCont, " ")) 

는 또 다른 옵션은 배열을 반환 Split 기능이 될 것입니다

편집 : W 당신은 .Text 대신 Value (또는 Value2)을 사용해야합니다 : .Text 실제로 표시되는 텍스트를 반환합니다. 따라서 셀에 열에 비해 너무 큰 숫자가 있으면 예를 들어 ####을 반환합니다.

+0

자세한 응답을 보내 주셔서 감사합니다. 나는 '. 텍스트'를 공정하게 사용하고 있었는데, 이제는 왜이 모든 문제를 일으키는 지 알 수 있습니다. –

+0

@slightly_tasted 대개의 경우 문제가 발생하지 않습니다. 셀 안에 텍스트가 있으면'#### '로 바뀌지 않을 것이고'.Text'는 내가 아는 한'.Value'와 같을 것입니다. 숫자 형식과 오류가 대부분 다릅니다. – arcadeprecinct

관련 문제