Vba 运行时错误';1004';传递工作表名称

Vba 运行时错误';1004';传递工作表名称,vba,excel,Vba,Excel,以下函数用于循环遍历一系列列标题,并返回所选标题的列号。该函数获取搜索名称和执行搜索的工作表 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

以下函数用于循环遍历一系列列标题,并返回所选标题的列号。该函数获取搜索名称和执行搜索的工作表

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
我试着用多种方式传递工作表名称。如表9所示,无报价,如表(“应付款”)等

我还尝试更改参数类型,使sheet成为字符串,并具有以下内容:

column = Sheets(sheet).Cells(1, k).Value
但是没有运气


PLZ HALP

如果从工作表单元格调用函数,则应传递工作表名称而不是工作表对象:

函数getColumn(名称为String,sheetn为String)尽可能长
将k设置为长,将标志设置为布尔值,将列设置为字符串
flag=False
k=1
当标记为True时执行此操作
列=张数(张数)。单元格(1,k)。值
如果column=name,则
flag=True
其他的
flag=False
k=k+1
如果结束
环
getColumn=k
端函数
将工作:


如果包含错误处理逻辑,则更好。

尝试将k改为Long而不是字符串。但您可以这样做:
getColumn=Application.WorksheetFunction.Match(name,sheet.Range(“1:1”),0)
并跳过所有其他内容。这是我在使用
sheet.Range(“a”&k)时遗留下来的内容.Value
虽然这没有任何帮助,但是如何调用
getColumn
?您需要将K更改为long。您是否尝试过在该点上输入断点以查看K的值?如果OP出于任何原因想将其
函数getColumn(名称为字符串,工作表为工作表)保持为整数
,您是否必须像
=getColumn(“qwerty”,工作表(“Sheet1”)
那样传递
工作表
,但是你可以通过一个范围,然后从代码中的那一部分得到表格。
column = Sheets(sheet).Cells(1, k).Value
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