2017-05-11 46 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

這是從我使用'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(名稱作爲字符串,工作表作爲工作表),作爲整數',你將不得不通過像'= getColumn(「qwerty」,工作表(「Sheet1」 ))'? – BruceWayne

+0

@BruceWayne我不能在單元格中工作。 –

+1

您無法直接傳遞工作表,但可以傳遞一個範圍並從代碼中獲取工作表。 – Rory