我编写了一个代码,我需要从这样的字符串中获取数字:“3/1”。我需要将这两个数字作为整数存储在两个不同的变量中。我在两个类中编写了这段代码: 这个函数是我在类(BigOne)中的split函数
Public Function SplitValues(pInput As String, pdelim As String) As String()
'Declaration of variables
Dim strSplit() As String
Dim countDelim As Integer
'Initialization of variables
countDelim = countCharacter(pInput, pdelim)
If countDelim > 0 Then
ReDim strSplit(countDelim)
strSplit = Split(pInput, pdelim)
SplitValues = strSplit
End If
End Function
在主类中,我有一个函数调用该函数来分割数字以获得我想要的值。但是我收到“类型不匹配错误”,我无法检测到这种类型不匹配的原因。
Public Function get_MaxChars(pInput As String) As Integer
'declaration of variables
Dim gen As cBigOne
Dim values As String
'Main code
pInput = CStr(pInput)
Debug.Print (pInput)
values = gen.SplitValues(pInput, "/")
get_MaxChars = CInt(values(0))
End Function
所以,我不明白为什么它不能正常工作,并且出现类型不匹配错误。因为,我相信我在任何地方都传递着相同的类型。
SplitValues
返回一个字符串数组,并且您正在尝试将其分配给一个字符串。尝试将 values
调暗为 String()
。
调用
SplitValues
时您仍然会遇到问题,因为您还没有创建类的实例,只是说 gen
将是一个。 Dim gen As cBigOne
之后,您应该有Set gen As New cBigOne
我也有同样的问题。然后我发现你必须将数组声明为 VARIANT
这是我的代码,我将 Outlook 中到达的每封邮件的附件保存到指定文件夹
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objOL As Outlook.Application
Dim arr As Variant
Dim i As Integer
Dim ns As Outlook.NameSpace
Dim itm As MailItem
Dim m As Outlook.MailItem
Dim j As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String
Dim strDeletedFiles As String
Dim fs As FileSystemObject
Dim mldat As Date
Dim strsndr As String
'On Error Resume Next
Set ns = Application.Session
arr = Split(EntryIDCollection, ",")
'*******************************************************************************************
' Set the Attachment folder.
strFolderpath = "z:\dropbox (AAA-DZ)\25_Attach\"
' Check each selected item for attachments. If attachments exist,
' save them to the strFolderPath folder and strip them from the item.
For ij = 0 To UBound(arr)
Set itm = ns.GetItemFromID(arr(ij))
If itm.Class = olMail Then
With itm
' This code only strips attachments from mail items.
' If objMsg.class=olMail Then
' Get the Attachments collection of the item.
Set objAttachments = .Attachments
lngCount = objAttachments.Count
strDeletedFiles = ""
If lngCount > 0 Then
' We need to use a count down loop for removing items
' from a collection. Otherwise, the loop counter gets
' confused and only every other item is removed.
Set fs = New FileSystemObject
For i = lngCount To 1 Step -1
' Save attachment before deleting from item.
' Get the file name.
strFile = Right("0000" + Trim(Str$(Year(.SentOn))), 4) + "_" + Right("00" + Trim(Str$(Month(.SentOn))), 2) + "_" + Right("00" + Trim(Str$(Day(.SentOn))), 2) + "_" + Right("00" + Trim(Str$(Hour(.SentOn))), 2) + "_" + Right("00" + Trim(Str$(Minute(.SentOn))), 2) + "_" + Right("00" + Trim(Str$(Second(.SentOn))), 2) + "_" + .SenderEmailAddress + "_" + .Parent + "_" + objAttachments.Item(i).FileName
' Combine with the path to the Temp folder.
strFile = strFolderpath & strFile
' Save the attachment as a file.
If Left(objAttachments.Item(i).FileName, 5) <> "image" Then
objAttachments.Item(i).SaveAsFile strFile
' Delete the attachment.
objAttachments.Item(i).Delete
'write the save as path to a string to add to the message
'check for html and use html tags in link
If .BodyFormat <> olFormatHTML Then
strDeletedFiles = strDeletedFiles & vbCrLf & "<file://" & strFile & ">"
Else
strDeletedFiles = strDeletedFiles & "<br>" & "<a href='file://" & _
strFile & "'>" & strFile & "</a>"
End If
Else
objAttachments.Item(i).Delete
End If
Next i
' Adds the filename string to the message body and save it
' Check for HTML body
If Len(strDeletedFiles) > 5 Then
If .BodyFormat <> olFormatHTML Then
.Body = vbCrLf & "The file(s) were saved to " & strDeletedFiles & vbCrLf & .Body
Else
.HTMLBody = "<p>" & "The file(s) were saved to " & strDeletedFiles & "</p>" & .HTMLBody
End If
.Save
End If
Else
objAttachments.Item(1).Delete
End If
End With
End If
Next ij
ExitSub:
Set objAttachments = Nothing
Set objSelection.Item(ij) = Nothing
Set objSelection = Nothing
Set objOL = Nothing
'********************************************************************************************
Set ns = Nothing
Set itm = Nothing
Set m = Nothing
End Sub
“类型不匹配”错误 13 当我们按照以下数据类型拆分时,我们会收到此错误,
**公共子数组_Split()
此 data_Dim X() As Variant_type 将更改为字符串,这意味着如果我们输入错误的数据类型,我们将得到 类型不匹配错误
Dim X() 作为 变体
将 VALU 设为变体
VALU = "Raj,Kumar"__ 我们也可以选择单元格引用,例如范围(“A2”)或单元格(1,1)
X = VBA.split(VALU, ",")
MsgBox X(0) & vbNewLine & X(1)
结束子
我一直遇到同样的问题,直到我指出分割要存储在变量中的字符串部分。分割后立即带有 (0)。 示例
变量=拆分(“您的文本”)(0)
或者
变量=分割(“您的文本”,“”)(0)
两种情况的结果相同:Variable=“Your”