2016-11-28 28 views
0

我写了一个代码,我需要从这样的字符串中获取数字:“3/1”。我需要将这2个数字作为整数存储在2个不同的变量中。我在2班这样写代码: 这个功能是我在类(BigOne)分割功能VBA类型不匹配在分割功能

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 

所以,我不明白为什么它不能正常工作,我得到了类型不匹配的错误。因为,我相信我在任何地方都会通过相同的类型。

+0

是什么pInput在错误邮件附件? –

+0

p输入错误是“1/3”或类似的字符串。 – TMikonos

回答

1

SplitValues返回一个String数组,并且您试图将它分配给一个String。改为将values调暗为String()

您在调用SplitValues时仍然存在问题,因为您尚未创建类的实例,只是表示gen将是其中一个。在Dim gen As cBigOne之后,您应该有Set gen As New cBigOne

1

我有同样的问题。后来我发现,您必须将数组声明为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