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