2012-01-05 4 views
1

Excel vba에서 아래 코드에 문제가 있습니다. 이전에 줄 rSurname = Range ("A" + numrows).Value 잘 작동하지만 값이 이미 "D : D"범위에 있는지 여부를 코드에 추가했습니다. 이제 런타임 오류 13 메시지가 나타납니다.Excel vba 이전에 작동했던 코드에서 런타임 오류 '13'

할 노력하고있어 것은 : 공간

  • 성 (姓)이 5 개 이상의 문자가있는 경우와 5

    1. 성 (姓)이 5 개 미만의 문자를 갖고 있으면 성이 5 자
    2. 되어 있는지 확인, 패드, 5 자로 트림
    3. 4 자리 숫자로 채워진 숫자 접미사 추가 (예 : 0001)의 출력이 이미 존재하고 있지 않은 경우하는 범위로 인쇄되지 않습니다
    4. 확인 "D : D"
    5. 값은 고유 한 값

    내 코드까지 검사, 증가 접미사를 존재하고 반복 않는 경우

    Private Sub TestButton_Click() 
    
    Dim rSurname, rOutput, sLength, numrows, sFindString As String 
    Dim nSuffix As Integer 
    Dim rRange As Range 
    Dim iLength As Long 
    
    
    
    numrows = 1 
        'Set Cell A2 as first cell range 
        Range("A2").Select 
        'Set loop to stop when en empty cell is reached 
        Do 
        'Increment numrows 
        numrows = numrows + 1 
        'Set Surname value 
        rSurname = Range("A" + numrows).Value 
        'Check Surname Letter Count and ensure 5 chars in Surname 
        iLength = Len(rSurname) 
        If iLength > 5 Then 
          rSurname = Left(rSurname, 5) 
        ElseIf iLength = 4 Then 
         rSurname = rSurname & " " 
        ElseIf iLength = 3 Then 
         rSurname = rSurname & " " 
        ElseIf iLength = 2 Then 
         rSurname = rSurname & " " 
        ElseIf iLength = 1 Then 
         rSurname = rSurname & " " 
        Else 
         rSurname = rSurname 
    End If 
    
    
    'Set Suffix value 
    nSuffix = 1 
        Do 
        'Combine Surname and suffix 
        rOutput = rSurname & Format(nSuffix, "0000") 
          'Check whether Output in list range 
          sFindString = "rOutput" 
          If Trim(FindString) <> "" Then 
           With Sheets("Sheet1").Range("D:D") 
            Set Rng = .Find(What:=FindString, _ 
                After:=.Cells(.Cells.Count), _ 
                LookIn:=xlValues, _ 
                LookAt:=xlWhole, _ 
                SearchOrder:=xlByRows, _ 
               SearchDirection:=xlNext, _ 
               MatchCase:=False) 
           If Not Rng Is Nothing Then 
           rOutput = rOutput 
           Else 
            nSuffix = nSuffix + 1 
           End If 
          End With 
         End If 
         Loop 
    
        'Add Outputs to Columns 
        Range("B" + numrows).Value = rSurname 
        Range("C" + numrows).Value = nSuffix 
        Range("D" + numrows).Value = rOutput 
    
        Loop Until IsEmpty(rSurname) 
    End Sub 
    
  • +0

    내가 사용하고 데이터 범위는 다음과 같습니다 :은 여기에 훨씬 간단 버전의 내가 이것을 실행하려고했습니다 콕스 쿡 스미스 Holtam 프레이저 스미 스미 스미 – mattnhugh

    답변

    0
    Sub CreateStrings() 
        Dim rng As Range 
        Dim i As Long, s As String 
        Dim cl As Range 
        Dim v 
    
        Set rng = Range([A2], Me.[A2].End(xlDown)) 
        For Each cl In rng.Cells 
         s = cl.Value 
         If Len(s) < 5 Then 
          s = s & Space(5 - Len(s)) 
         Else 
          s = Left(s, 5) 
         End If 
         i = 1 
         v = Application.Match(s & Format(i, "0000"), Me.[D:D], 0) 
         Do While Not IsError(v) 
          i = i + 1 
          v = Application.Match(s & Format(i, "0000"), Me.[D:D], 0) 
         Loop 
         cl.Offset(, 3) = s & Format(i, "0000") 
        Next 
    End Sub 
    
    +0

    에 있지만, 런타임 오류 '1004'가 나타납니다 : 'Set rng'줄에 응용 프로그램 정의 또는 개체 정의 오류가 발생했습니다. 어떤 아이디어? – mattnhugh

    +0

    원래 게시물이 'TestButton_Click'이라는 하위 태그 였기 때문에 Sheet 모듈에서 이것을 코딩한다고 가정했습니다. 그렇지 않은 경우 'Me'는 오류를 발생시킵니다. –

    0
    아마

    더 아래에 필터를 RIT와 같은 워크 시트 함수를 사용하세요

    iFoundStrings = 
        Application.WorksheetFunction.CountIf(Sheets("Sheet1").Range("D:D"), 
        FindString) 
    
    관련 문제