需要从字符串中删除文本到某一点

时间:2013-12-06 15:40:24

标签: vba vbscript

我有一个脚本可以在Outlook中通过电子邮件创建任务 - 目前它只需要电子邮件主题并使其成为任务标题,这很好,除非我想要删除主题行的第一部分到某个点。

电子邮件主题始终相同(虽然票号不同),示例主题将是:

New Ticket: 3416 - School: School1 - Room: 158 - Desc: Broken PC

票号更改 - 但我想删除所有内容,包括“School:”

所以我们会留下这样的东西:

School1 - Room: 158 - Desc: Broken PC

我目前使用的脚本是:

    Sub MakeTaskFromMail2(MyMail As Outlook.MailItem)
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim olMail As Outlook.MailItem
    Dim objTask As Outlook.TaskItem

    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set olMail = olNS.GetItemFromID(strID)
    Set objTask = Application.CreateItem(olTaskItem)
    With objTask
        .subject = olMail.subject
        .DueDate = olMail.SentOn
        .Body = olMail.Body
    End With
    Call CopyAttachments(olMail, objTask)
    objTask.Save

    Set objTask = Nothing
    Set olMail = Nothing
    Set olNS = Nothing
End Sub

Sub CopyAttachments(objSourceItem, objTargetItem)
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
   strPath = fldTemp.Path & "\"
   For Each objAtt In objSourceItem.Attachments
      strFile = strPath & objAtt.FileName
      objAtt.SaveAsFile strFile
      objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
      fso.DeleteFile strFile
   Next

   Set fldTemp = Nothing
   Set fso = Nothing
End Sub

有关如何将其分开并删除第一部分的任何帮助都将非常有用。

我不相信这样做太难 - 但我对VB的了解非常有限。

*编辑 - 删除了vb.net,因为这里不合适。

2 个答案:

答案 0 :(得分:3)

您可以使用Instr / Mid功能组合

Dim sInput As String
Dim sOutput As String

sInput = "New Ticket: 3416 - School: School1 - Room: 158 - Desc: Broken PC"
sOutput = Mid(sInput, InStr(sInput, "School:") + 8)

答案 1 :(得分:0)

在VB.NET中,您可以使用RegEx轻松完成此任务,如下所示:

Dim output As String = RegEx.Replace(input, "New Ticket: \d+ - School: ", "") 

\d表示任何数字,+表示一次或多次。因此,\d+一起表示它将匹配任何数字与一个或多个数字。

但是,在VB脚本或VBA中,您需要求助于MidInStr等字符串解析函数。