2011-01-31 3 views
2

이 코드의 문제점은 무엇입니까? "1"을 찾는 열의 머리글 (첫 번째 행)을 반환해야합니다. 내가 행 번호 (NR)를 통과하고이 (포함) 열 M과 T 사이에보고하도록되어열을 통한 VBA 루프 - 내부의 경우

Function who(ByVal rowNr As Integer) As String 
    Dim temp As String 
    Dim ws As Worksheet 
    With ActiveSheet 
     Set ws = ActiveWorkbook.Sheets(.Name) 
    End With 
    For i = 13 To 20 Step 1 
     If ws.Cells(i, rowNr).Value = 1 Then 
      temp = temp & " " & ws.Cells(i,1).Value 
     End If 
    Next i 
    who = temp 
End Function 

내가 오류가

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

입니다

그리고 마크는 내가 정말 VB를 싫어하는

If ws.Cells(i, nr).Value = 1 Then 

라인.

+2

1)가 작동하는 코드를 작성할 수없는이 VB의 잘못이 얼마나? 2) 변수에 설명이 포함 된 이름을 지정해야합니다. 따라서 'bla'는 좋은 선택이 아닙니다. –

+0

@ Cody-Grey 만약 vars가 독일어로되어 있었다면 어쨌든 bla로 읽었을 것입니다. 코드에서 나는 정상적인 이름을 사용합니다 - 여기는 bla가 될 것입니다.) C#/Java/Obj-C에서 작업 중입니다. 예 .. VB는 정말 비우호적입니다. – SuperMario

+0

또한 문제를 해결하는 방법을 살펴 보았지만 VBA 코드를 작성하는 것보다 더 나은 질문을 작성하지 않은 것처럼 보입니다. 코드 블록 위의 문단이 ... –

답변

1

nr을 숫자로 사용하는 이유는 무엇입니까? String으로 보내는 이유는 무엇입니까? 그 숫자를 Integer으로 변경해보십시오. 적어도 조금 더 나아야합니다.

편집 : 행/열을 겹쳐 놓았다고 생각하는 것을 잊어 버렸습니다. 나는 당신이 원하는 어쩌면 생각 :

If ws.Cells(nr, i).Value = 1 Then 
+0

좋아, 내 잘못,이 가리키는 thx :) 그것은 오류를 제거하지만 열의 첫 번째 행에서 "1"찾을 값을 여전히 반환하지 않습니다. – SuperMario

+0

@SuperMario : 내가 편집하기 전이나 후에 편집자의 의견을 작성했는지 여부는 확실하지 않지만, 이전에 제안한 다른 변경 사항을 참조하십시오. –

+0

아니요 아니요, nr은 행 이름이고이 행의 M에서 T까지의 열에 대해 1을 찾고 열의 첫 번째 셀을 반환하고 싶습니다 ("who"문자열에 추가). – SuperMario

0

이가 일을 저

Function who(ByVal rowNr As Long) As String 
    Dim temp As String 
    Dim ws As Worksheet 
    Dim i As Long 

    Set ws = ActiveSheet 

    For i = 13 To 20 Step 1 
     If ws.Cells(rowNr, i).Value = 1 Then 
      temp = temp & " " & ws.Cells(1, i).Value 
     End If 
    Next i 

    who = Trim(temp) 

End Function