Excel 选择或激活工作表,然后将其指定为";byref工作表“;?

Excel 选择或激活工作表,然后将其指定为";byref工作表“;?,excel,vba,Excel,Vba,我有个问题。我拥有以下类别属性: Private myLanguage As String Public Property Get Language() As String Language = myLanguage End Property Public Property Let Language(ByVal Value As String) myLanguage = Value End Property Public Property Get LanguageColumn(ByRef L

我有个问题。我拥有以下类别属性:

Private myLanguage As String

Public Property Get Language() As String
Language = myLanguage
End Property
Public Property Let Language(ByVal Value As String)
myLanguage = Value
End Property

Public Property Get LanguageColumn(ByRef LanguageWs As Worksheet, _
ByVal LanguageRow As Integer) As Integer
LanguageColumn = LanguageWs.Range(Cells(LanguageRow, 1), Cells(LanguageRow, 250)).Find(myLanguage).Column
End Property
我用的电话

Dim cls as new Cls1
cls.LanguageColumn(ThisWorkbook.Worksheets(1), 1)
我得到一个错误:

“1004”-对象“U工作表”的方法“范围”失败

当我将执行代码更改为:

Dim cls as new Cls1
Worksheets(1).Activate
cls.LanguageColumn(ThisWorkbook.Worksheeets(1), 1)

它正在工作。有人能告诉我为什么以及我是否总是必须使用
。激活
。当我使用
byref工作表
时选择

你应该完全限定你的
单元格
,即指定
单元格
所属的工作表。更改:

LanguageColumn = LanguageWs.Range(Cells(LanguageRow, 1), Cells(LanguageRow, 250)).Find(myLanguage).Column

或者更好:

With LanguageWs
    LanguageColumn = .Range(.Cells(LanguageRow, 1), Cells(.LanguageRow, 250)).Find(myLanguage).Column
End With
此外,我建议您将
ByVal-LanguageRow更改为Integer
,将
ByVal-LanguageRow更改为Long
以及属性的返回类型(因为
Integer
的最大值仅为
32768

实际上,为了可靠性,我会使用这个(如果
myLanguage
未找到):


您能显示您的实际代码吗?这一行
cls.language列(ThisWorkbook.Worksheets(1),1)
甚至没有编译(因为它是get属性,应该分配给变量),并且还更改
工作表
-->
工作表
With LanguageWs
    LanguageColumn = .Range(.Cells(LanguageRow, 1), Cells(.LanguageRow, 250)).Find(myLanguage).Column
End With
Public Property Get LanguageColumn(ByRef LanguageWs As Worksheet, _
       ByVal LanguageRow As Long) As Long
    Dim rng As Range

    With LanguageWs
        Set rng = .Range("A" & LanguageRow).Resize(, 250).Find(myLanguage)
    End With

    If Not rng Is Nothing Then
        LanguageColumn = -1
    Else
        LanguageColumn = rng.Column
    End If
End Property