首页 > 解决方案 > 继承时 VBA 类型不匹配(错误 13),用户来自

问题描述

环境 ・Excel 2016 ・Windows10

问题・类型不匹配

我在做VBA练习,任务是制作UserForm,输入会显示在工作表上。

照片1,单击“投资组合”-> 显示用户表单(照片2),然后选择货币并选择数量、汇率、买入/卖出,然后单击“添加交易”

↓</p>

然后,显示错误是类型不匹配 13。当我单击“调试”时,问题是黄线,但我不知道如何解决它。

输入应显示在 Photo3 上(从日期到速率的内部工作表(“TransactionHistory”))

照片1 照片2 照片3 照片4 照片5

↓用户表单代码

Private Sub btnAddtransaction_Click()
Dim newTransaction As New transaction

newTransaction.TransactionDate = Now()

If (optCredit) Then
newTransaction.transactionType = Credit
End If
If (optDebit) Then
newTransaction.transactionType = Debit
End If

save newTransaction
newTransaction.CryptCurrency = cmBoxCurrency.Value
newTransaction.Quantity = txtboxQuantity.Value
newTransaction.ExchangeRate = txtboxExchangerate.Value

End Sub
Public Sub save(transaction As transaction)
Dim validator As New TransactionValidator
If (validator.isValid(transaction)) Then
Worksheets("TransactionHistory").Rows(2).Insert Shift:=xlDown

Sheets("TransactionHistory").Range("A2") = transaction.TransactionDate

If (transaction.transactionType = Credit) Then
Sheets("TransactionHistory").Range("B2") = "Credit"
Else
Sheets("TransactionHistory").Range("B2") = "Debit"
End If

Sheets("TransactionHistory").Range("C2") = transaction.CryptCurrency
Sheets("TransactionHistory").Range("D2") = transaction.Quantity
Sheets("TransactionHistory").Range("E2") = transaction.ExchangeRate
End If

End Sub


Private Sub btnOk_Click()

↓交易

Public CryptCurrency As String
 Public ExchangeRate As Double
 Public Quantity As Double
 Public TransactionDate As Date
 Public transactionType As transactionType
 
 Public Function tostring() As String
 tostring = CryptCurrency & " " & transcriptionType & " " & "quantity: " & Quantity & "rate: " & ExchangeRate
 End Function

Public Function isValid(transaction As transaction) As Boolean

If (transaction Is Nothing) Then
isValid = False
End If

If (transaction.CryptCurrency <= 0) Then
isValid = False
End If

If (transaction.Quantity < 0) Then
isValid = False
End If

If (transaction.ExchangeRate < 0) Then
isValid = False
End If

End Function

↓交易验证器

Public Function isValid(transaction As transaction) As Boolean

If (transaction Is Nothing) Then
isValid = False
End If

If (transaction.CryptCurrency <= 0) Then
isValid = False
End If

If (transaction.Quantity < 0) Then
isValid = False
End If

If (transaction.ExchangeRate < 0) Then
isValid = False
End If

End Function

这是任务描述图 照片6 照片7

标签: excelvbainheritance

解决方案


在运行用户窗体时,当您单击“调试”时,突出显示的行不一定是发生错误的地方。
我怀疑If (transaction.CryptCurrency <= 0) Then会导致错误,因为你在这里是一个带有整数的字符串。

transaction.CryptCurrency <> ""改为使用


推荐阅读