我试图将代码中相同的类属性传递给分离类,只是它们指向具有两个参数的子过程的两个不同单元格。
我得到了一个类型不匹配的错误,但不知道为什么会发生。。。。难道不能将类属性传递给子过程吗?
类代码
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语句解决了问题。然而,我不知道为什么会出现这种情况。