【问题标题】:If Statement combined with InputBoxIf 语句结合 InputBox
【发布时间】:2021-09-10 09:27:54
【问题描述】:

这是我想要做的:

文件应该根据用户的输入保存自己,即使有输入。这意味着,如果用户尚未进行任何输入,则 IF 语句应返回第一部分(这就是 UserName = "" 的原因)。但是如果用户之前已经输入了一些东西,我希望它返回 IF 语句的第二部分。

文件的原始名称是 20210910_Besprechungsnotizen_00_,如果 Jack 是第一个打开该文档并创建协议的人,则该名称应该是:20210910_Besprechungsnotizen_00_Jack,并且只询问 Jack 的姓名。如果 Jack 想要 Steve 浏览这个文档,那么应该意识到,Jack 已经保存了这个文档(输入了他的首字母或他的名字),它会询问 Steve 这个文档当前是哪个版本,并在 Jack 后面添加 Steve。意义: 20210910_Besprechungsnotizen_01_JackSteve 而史蒂夫只输入了他的名字和 1。

我是新手,非常感谢您的帮助! 这是我的代码:

Private Sub CommandButton3_Click()

Dim FilePath As String
Dim Filename As String
Dim MyDate As String
Dim UserName As String

If UserName = "" Then

    FilePath = "//SRVDC\Arbeitsordner\Intern\Meetings\Entwürfe\"
    MyDate = Format(Date, "YYYYMMDD")
    Filename1 = "_Besprechungsnotizen_i_00_"
    UserName = InputBox("Wer erstellt? (Name in Firmenkurzform)")

    ActiveDocument.SaveAs2 FilePath & MyDate & Filename1 & UserName

Else

    FilePath = "//SRVDC\Arbeitsordner\Intern\Meetings\Entwürfe\"
    MyDate = Format(Date, "YYYYMMDD")
    Filename1 = "_Besprechungsnotizen_i_0"
    Filename2 = "_"
    UserName = InputBox("Wer bearbeitet? (Name in Firmenkurzform)")
    Version = InputBox("Welche Version? (in ganzen Zahlen)")

    ActiveDocument.SaveAs2 FilePath & MyDate & Filename1 & Version & Filename2 & UserName
End If

End Sub

【问题讨论】:

  • 虽然您的问题解释了您项目的目标,但尚不清楚您需要什么帮助。请edit your question 清楚地解释您需要帮助的地方。查看How do I ask a good question? 可能会有所帮助
  • 逻辑不清楚。您应该在 If 语句之前询问 UserName = InputBox。或者使用 If ActiveDocument.Saved docs.microsoft.com/en-us/office/vba/api/word.document.save.
  • 如果之前已经输入过用户名,您需要一些地方来存储用户名。您的代码似乎没有任何类似的东西,而且名为“UserName”的变量没有任何值分配。所以逻辑总是正确的。else 块永远不会被执行。您是否尝试在 excel 中执行此操作?
  • 我编辑了原始帖子,希望它更容易理解我的目标是什么。现在我正在尝试用文字来做到这一点
  • @mishu36 你能详细说明一下吗?因为这正是似乎发生的事情。不管是否有人已经进入,逻辑总是正确的。请尝试像你知道你在向新手解释一样解释

标签: vba if-statement ms-word inputbox


【解决方案1】:

试试这个:

Private Sub CommandButton3_Click()

    Const FilePath As String = "//SRVDC\Arbeitsordner\Intern\Meetings\Entwürfe\"
    Const OrigFileName As String = "20210910_Besprechungsnotizen_00_"
    Dim Filename As String: Filename = "_Besprechungsnotizen_i_0"
    Dim MyDate As String: MyDate = Format(Date, "YYYYMMDD")
    Dim UserName As String
    Dim Version As String

    If Split(ActiveDocument.Name, ".")(0) = OrigFileName Then
        'file has not been resaved
    Else
        'file has been saved before so extract data from filename
        Dim nameElements As Variant
        nameElements = Split(Split(ActiveDocument.Name, ".")(0), "_")
        UserName = nameElements(UBound(nameElements))
        Version = nameElements(UBound(nameElements) - 1)
    End If
    If UserName = "" Then
        UserName = InputBox("Wer erstellt? (Name in Firmenkurzform)")
        Version = "0_"
    Else
        Dim currentUser As String
        currentUser = InputBox("Wer bearbeitet? (Name in Firmenkurzform)")
        If currentUser = UserName Then
            'you need to figure out what you want to do in this case
        Else
            'you also need to figure out what you want to do when you already have two names
            UserName = UserName & currentUser
        End If
        'do you really need to prompt the user for the version number?
        'couldn't you just increment the existing number, e.g.
        'Version = Format$(Version + 1, "00")
        Version = InputBox("Welche Version? (in ganzen Zahlen)") & "_"
    End If
    
    ActiveDocument.SaveAs2 FilePath & MyDate & Filename & Version & UserName

End Sub

【讨论】:

  • 你明白了我的想法,它非常接近我想要做的事情。不过,它的工作方式不太好。显然,它直接进入: Else UserName = InputBox("Wer bearbeitet? (Name in Firmenkurzform)") 当我再次更改名称时,它不会添加新名称,它只会替换。
  • 意味着它跳过:如果用户名 = "" 那么用户名 = InputBox("Wer erstellt? (Firmenkurzform 中的名称)") 版本 = "0_"。我的原始文件名为 20210910_Besprechungsnotizen_00_。它只是当第一个人保存它时,它应该保持 00_(+name)。每隔一段时间,它应该询问版本并添加新名称
  • @Jens1411 - 当您在这里提出问题时,您需要提供所有提供答案所需的信息,例如原始文件名。请记住,我们看不到您的文档,也看不到您的想法。
  • 我再次编辑了我的原始帖子。希望这是一个更好的解释,感谢您的帮助。
  • 我收到一个错误:If LBound(Split(ActiveDocument.Name, ".")) = OrigFileName Then
【解决方案2】:

使用InputBox() 可能有点慢和棘手。无论如何,尝试打印您输入的任何内容,看看您在代码中的位置。

Sub TestMe()

    Dim userName As String
    Dim usedVersion As String
    
    userName = InputBox("Enter username")
    If userName = "" Then
        Debug.Print "UserName is empty"
    Else
        Debug.Print "Username " & userName & " was entered."
        Debug.Print "Asking for version now:"
        usedVersion = InputBox("Welche Version? (in ganzen Zahlen)")
        Debug.Print "Version "; usedVersion; " was entered"
    End If

End Sub

这是调试的样子:

【讨论】:

  • 感谢您的回复,但这并不能解决我想要做的事情。也许我应该详细说明我实际上想要做什么:我的目标是文件将由 date_Besprechungsnotizen_Version_Name 保存。但是当第一个人输入他的名字时,版本应该自动为 0,然后,word 应该意识到至少有第二个人在 inputBox 中输入了一些东西,所以 word 会询问哪个版本以及谁在编辑。希望这更有意义
  • 我编辑了原始帖子以更好地解释我的目标
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多