【问题标题】:Copy Txt from a file and input into script从文件中复制 Txt 并输入到脚本中
【发布时间】:2026-01-26 18:40:01
【问题描述】:

所以我们现在有了以下脚本。调试以粗体突出显示 OpenTextfile 在将其放入更新脚本的第二部分之前,我们能否以某种方式确认文本已被读取

函数 TextFile_PullData() '目的:将文本文件中的所有数据发送到字符串变量 将文本文件调暗为整数 将文件路径变暗为字符串 将文件内容调暗为字符串 将 strUser 调暗为字符串

' get the current user name
strUser = CreateObject("WScript.Network").UserName
'or use strUser = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERNAME%")

'File Path of Text File
FilePath = "C:\Users\" & strUser & "\Temp\VFile.txt"

'Determine the next file number available for use by the FileOpen function
TextFile = FreeFile

'Open the text file
**Open FilePath For Input As TextFile**

'Store file content inside a variable
FileContent = Input(LOF(TextFile), TextFile)

'Close Text File
Close TextFile

'Report Out Text File Contents
MsgBox FileContent

'have the function return the data to the calling code
TextFile_PullData = FileContent

结束函数

订阅 UpdateSubject() 将 SaveCode 调暗为字符串 将关键字变暗为字符串 将 objItem 调暗为 MailItem

KeyWord = "TSD"

SaveCode = TextFile_PullData
Set objItem = GetCurrentItem()
objItem.Subject = "[" + KeyWord + "=" + SaveCode + "] " + objItem.Subject

结束子

函数 GetCurrentItem() 作为对象 将 objApp 调暗为 Outlook.Application

Set objApp = Application
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
    Case "Explorer"
        Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
    Case "Inspector"
        Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
End Select

Set objApp = Nothing

结束函数

【问题讨论】:

  • 您发布的代码不是VBScript。看起来更像VBA。另外,是什么阻止您简单地将SaveCode = InputBox(...) 替换为SaveCode = TextFile_PullData
  • 如果您更改问题,您已经发布的答案无效。如果这是一个新问题,则回滚到以前的版本并创建一个新问题帖子。如果它回答了原始问题,您可以决定接受该问题的答案。

标签: vba outlook


【解决方案1】:

这不是 VBScript,因为您正在定义变量 As <something>。在 VBScript 中,所有变量都是变量类型。

无论如何,您的Sub UpdateSubject 可能会很好地读取文本文件的内容,但除了在消息框中显示它之外什么也不做。 为了使它返回这个数据,而不是仅仅在一个只存在于那个 sub 的局部变量中读取它,让它成为 Function 像:

Function TextFile_PullData()
    'PURPOSE: Send All Data From Text File To A String Variable
    Dim TextFile As Integer
    Dim FilePath As String
    Dim FileContent As String
    Dim strUser As string

    ' get the current user name
    strUser = CreateObject("WScript.Network").UserName
    'or use strUser = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERNAME%")

    'File Path of Text File
    FilePath = "C:\Users\" & strUser & "\Temp\VFile.txt"

    'Determine the next file number available for use by the FileOpen function
    TextFile = FreeFile

    'Open the text file
    Open FilePath For Input As TextFile

    'Store file content inside a variable
    FileContent = Input(LOF(TextFile), TextFile)

    'Close Text File
    Close TextFile

    'Report Out Text File Contents
    MsgBox FileContent

    'have the function return the data to the calling code
    TextFile_PullData = FileContent
End Function

接下来在UpdateSubject 子例程中使用该信息

Sub UpdateSubject()
    Dim SaveCode As String
    Dim KeyWord As String
    Dim objItem As MailItem
    Dim FileContent As String

    ' here, you use the function to pull the content of the text file and store it in
    ' a local variable called 'FileContent' to use in your inputbox.
    FileContent = TextFile_PullData


    SaveCode = InputBox("Please enter filecode in the format nnn/nnn", "VisualFiles Auto Save", FileContent)

    Set objItem = GetCurrentItem()
    KeyWord = "TSD"

    objItem.Subject = "[" + KeyWord + "=" + SaveCode + "] " + objItem.Subject

    'or skip the inputox alltogether and set the subject directly:
    'objItem.Subject = "[" + KeyWord + "=" + FileContent + "] " + objItem.Subject
End Sub

【讨论】:

  • 我得到以下信息:编译错误:未定义子或函数这是在子 UpdateSubject() 和行 Set objItem = GetCurrentItem()
  • @CraigParkinson 我从来没有碰过你的函数GetCurrentItem,因为这与问题无关。你当然应该把它留在里面;)