类型不匹配错误:将类public get属性作为参数传递给子过程



我试图将代码中相同的类属性传递给分离类,只是它们指向具有两个参数的子过程的两个不同单元格。

我得到了一个类型不匹配的错误,但不知道为什么会发生。。。。难道不能将类属性传递给子过程吗?

类代码

Public Property Get Signal() ' this code is in the EURO_USD class
Dim rowA_status As String
rowA_status = Worksheets("EURO_USD").Cells(rows.Count, "E").End(xlUp).Value
Select Case rowA_status
    Case Not ""
        Signal = rowA_status
        ActiveWorkbook.CustomDocumentProperties.Item("State_euro_usd").Value = rowA_status
    Case ""
        Signal = "no news"
End Select
End Property
Public Property Get Signal() As String 'This code is in the DNB_EMA class NOT EURO_USD class
Dim rowA_status As String
rowA_status = Worksheets("DNB_EMA").Cells(rows.Count, "E").End(xlUp)
Select Case rowA_status.Value
    Case Not ""
        Signal = rowA_status
        ActiveWorkbook.CustomDocumentProperties.Item("").Value = rowA_status
    Case ""
        Signal = "no news"
End Select
End Property

其他代码

Private sub run() ' start the email_handler
Dim email_handler As Object: Set email_handler = New email_handler
email_handler.Send EURO_USD.Signal, DNB_EMA.Signal <---- this generates type mismatch error!
End sub
Sub Send(Action_EURO_USD As String, Action_DNB_EMA As String) ' send news
Set OutApp = New Outlook.Application: Set outMail = OutApp.CreateItem(olMailItem)
With outMail
    .To = ""
    .Subject = "Bot_Trading_Status"
    .body = "Status for EURO_USD: " & Action_EURO_USD & vbCrLf & "Status for DNB_EMA: " & Action_DNB_EMA
    .Send
    End With
End Sub

好的,所以我创建了一个普通的模块"main",并将其放入:

Sub foo()
Dim euro As myClass
'instantiate the class object
Set euro = New myClass
Call email_handler.Send(euro.Signal, "blah")
End Sub

您的类模块代码实际上正在崩溃,它在对.Send过程的函数调用中不是不匹配的,但它无法评估Signal属性,并且该错误会出现在调用过程中。

出现此错误是因为此行试图对字符串数据类型进行布尔求值,这是Mismatch错误的来源。

Case  Not ""

我修改了名为"myClass"的类模块,在我的示例中,它包含此代码。您仍然可以使用Case语句,但可以这样更改:

Public Property Get Signal() As String
Dim rowA_status As String
rowA_status = Worksheets("EURO_USD").Cells(Rows.Count, "E").End(xlUp).Value
Select Case rowA_status
    Case vbNullString
        Signal = "no news"
    Case Else
        'equivalent to: NOT ""
        Signal = rowA_status
        ActiveWorkbook.CustomDocumentProperties.Item("State_euro_usd").Value = rowA_status
End Select
Signal = rowA_status
End Property

select case导致错误,将其更改为If语句解决了问题。然而,我不知道为什么会出现这种情况。

最新更新