Excel 无法将变量传递到子搜索-获取运行时错误';91';

Excel 无法将变量传递到子搜索-获取运行时错误';91';,excel,vba,function,Excel,Vba,Function,我试图让我的代码在单元格中搜索“部件号”字符串,然后复制整个列。当我运行代码时,没有传入字符串并替换变量,但是当我尝试使用作为colName传入的字符串执行此操作时,在 '设置r=ActiveSheet.Range(c.Address)行。' 这里是主要功能 Public Sub PreSE() Dim SECopy As Workbook, BOM As Workbook: Set BOM = ActiveWorkbook Dim fname As String, fPathFile As

我试图让我的代码在单元格中搜索“部件号”字符串,然后复制整个列。当我运行代码时,没有传入字符串并替换变量,但是当我尝试使用作为colName传入的字符串执行此操作时,在 '设置r=ActiveSheet.Range(c.Address)行。'

这里是主要功能

Public Sub PreSE()

Dim SECopy As Workbook, BOM As Workbook: Set BOM = ActiveWorkbook
Dim fname As String, fPathFile As String
Dim BOMsheet As Worksheet: Set BOMsheet = ActiveSheet


fname = InputBox("Enter the file name to use, including file extension exactly as in the next window.")
Set SECopy = Workbooks.Add
fPathFile = Application.GetSaveAsFilename(fname, "Excel Files (*.xlsx), *.xlsx")
SECopy.SaveAs fPathFile

Call FindSelCol("Part Number", BOM, SECopy, fname)
'Call FindSelCol("Manufacturer Part Number", BOM, fname)
'Call FindSelCol("Cage Code", BOM, fname)
'Call FindSelCol("Description", BOM, fname)

End Sub
以及用于查找和选择列的sub

Sub FindSelCol(colName As String, BOM As Workbook, SECopy As Workbook, UpCopy As String)

'Currently - selects column in first passed workbook with the header passed as a string
'WIP - trying to get it to copy that header into SECopy workbook

Dim c As Variant

BOM.Activate

With ActiveSheet.UsedRange
    Set c = .find(colName, LookIn:=xlValues)
    If Not c Is Nothing Then
        ActiveSheet.Range(c.Address).Offset(1, 0).Copy
        ActiveSheet.Range(c, ActiveSheet.Cells(Rows.Count, c.Column).End(xlUp).Address).Copy
    End If
End With

'Paste into SECopy Book first sheet; Passed in, paste into first unoccupied column
If SECopy.Worksheets(1).Range("A1") = "" Then
SECopy.Workshets(1).Cells(1, 0).PasteSpecial xlPasteValues
Else
SECopy.Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteValues
End If

End Sub

我试图添加的其他内容还有一些额外的代码,因此我将针对该部分提出另一个问题。

只是一个想法=>
r
将与
c
相同。另外,
c
仍然可以是
nothing
如果
activeSheet.Range(c.Address)
也没有失败,我想说它没有被击中。检查
nothing
,然后在WITH之后使用
c
将工作表作为参数传递给您的
FindSelCol
,不要使用
ActiveSheet
。如果删除括号,则可以删除
Call
谢谢!我改变了很多东西,制作了大部分的工作表和书籍变量,这样我就可以将它们传递到函数中,更一般地引用它们,这样我就可以在其他书籍中使用它们@SmileyFtW我不明白这意味着什么,这会有什么作用,它会有什么帮助?@ShawnMalone-我不清楚哪一部分可以提供更多信息?@SmileyFtW我不理解删除括号和调用部分。我传入了工作簿,因为在另一个工作簿中只有一个工作表,所以除了工作表索引之外,我不需要指定其他工作表。删除调用和括号是否有好处?