2017-05-11 1 views
1

다음 함수는 일련의 열 머리글을 반복하고 선택한 머리글의 열 번호를 반환하도록 설계되었습니다. 이 함수는 검색 이름과 검색이 수행 된 시트를 가져옵니다.런타임 오류 '1004'전달 워크 시트 이름

Function getColumn(name As String, sheet As Worksheet) As Integer 

Dim k As String, flag As Boolean, column As String 

flag = False 
k = 1 

Do While flag <> True 
    column = sheet.Cells(1, k).Value 
    If column = name Then 
     flag = True 
    Else 
     flag = False 
     k = k + 1 
    End If 
Loop 

getColumn = k 

End Function 

이전 시트에서 작동했지만이 줄은 오류 지점으로 강조 표시되어 있습니다.

column = sheet.Cells(1, k).Value 

여러 가지 방법으로 시트 이름을 전달하려고 시도했습니다. 등 따옴표없이 Sheet9, 시트 등 ("채무")로

나는 또한 시트 문자열 및 필요하므로, 인수 유형을 변경하려고했습니다

이 :

column = Sheets(sheet).Cells(1, k).Value 

그러나 행운 !

PLZ HALP

+1

k를 문자열 대신 Long으로 변경해보십시오. –

+2

하지만 다음과 같이 할 수 있습니다 :'getColumn = Application.WorksheetFunction.Match (name, sheet.Range ("1 : 1"), 0)'그리고 다른 모든 것은 건너 뜁니다. –

+0

그건'help '가 아니기 때문에'sheet.Range ("A"& k) .Value'를 사용하여 놀고있을 때부터 남은 것입니다. – sethW

답변

1

워크 시트 셀에서 함수를 호출하는 경우에, 당신은 객체 워크 시트가 아닌 워크 시트 이름을 통과해야합니다

Function getColumn(name As String, sheetn As String) As Long 
Dim k As Long, flag As Boolean, column As String 

flag = False 
k = 1 

Do While flag <> True 
    column = Sheets(sheetn).Cells(1, k).Value 
    If column = name Then 
     flag = True 
    Else 
     flag = False 
     k = k + 1 
    End If 
Loop 

getColumn = k 
End Function 

가 작동합니다

enter image description here

오류 처리 논리를 포함 시키면 더 좋습니다.

+0

OP가 원하는 이유가 무엇이든간에 'getColumn (name as String, name as Worksheet as Worksheet) Integer'로 유지하려면 'getColumn ("qwerty", Worksheets ("Sheet1"))'? – BruceWayne

+0

@ BruceWayne 셀에서 일하도록 할 수는 없습니다. –

+1

시트를 직접 전달할 수는 없지만 범위를 전달하여 코드에서 시트를 가져올 수 있습니다. – Rory

관련 문제