分割函数中的VBAtypes不匹配

我已经写了一个代码,我需要从这样的string中获取数字:“3/1”。 我需要将这2个数字作为整数存储在2个不同的variables中。 我已经写了2个类的代码:这个函数是我在课堂上的分裂function(BigOne)

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 

在主类中我有一个调用这个函数的函数来分割数字来获得我想要的值。 但是我得到一个“types不匹配错误”我无法检测到这种types不匹配的原因。

 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 

所以,我不明白为什么它不能正常工作,我得到了types不匹配的错误。 因为,我相信我到处都是同一types的。

SplitValues返回一个string数组,并且您正在尝试将其分配给一个string。 尝试使用String()代替调暗values

调用SplitValues时还是有问题,因为你还没有创build类的实例,只是说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