vba - 运行宏两次导致空白结果并不断出现运行错误
问题描述
我的代码有 2 个问题。
第一个问题:当我第二次运行宏时,我无法将它保存为 oriTitle,如果我想更改标题,我对问题的回答是否定的。它只是空白。
第二个问题:我只能保存2次。之后,我会遇到运行错误。我想至少坚持10次。
有人可以帮我解决这两个问题吗?我不知道该怎么做。提前致谢!
Private Sub CommandButton3_Click()
Const FilePath As String = "//SRVDC\Arbeitsordner\Intern\Meetings\Entwürfe\"
Const OrigFileName As String = "20210910_Besprechungsnotizen_00_"
Dim MyDate As String: MyDate = Format(Date, "YYYYMMDD")
Dim Title As String
Dim oriTitle As String: oriTitle = "Besprechungsnotizen"
Dim newTitle As String
Dim currentTitle As String
Dim User As String
Dim newUser As String
Dim currentUser As String
Dim Version As Integer
Dim newVersion As Integer
Dim currentVersion As Integer
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), "_")
User = nameElements(UBound(nameElements))
Version = nameElements(UBound(nameElements) - 1)
End If
If User = "" Then
User = InputBox("Wer erstellt? (Name in Firmenkurzform)")
newTitle = MsgBox("Anderer Titel?", vbQuestion + vbYesNo + vbDefaultButton2, "Titel")
If newTitle = vbYes Then
Title = InputBox("Wie soll der Titel sein?")
Else
Title = oriTitle
End If
Version = "0"
Else
currentUser = InputBox("Wer bearbeitet? (Name in Firmenkurzform)")
If currentUser = User Then
Else
User = User & "_" & currentUser
End If
newTitle = MsgBox("Neuer Titel?", vbQuestion + vbYesNo + vbDefaultButton2, "Titel")
If newTitle = vbYes Then
Title = InputBox("Wie soll der neue Titel sein?")
Else
End If
Version = MsgBox("Neue Version?", vbQuestion + vbYesNo + vbDefaultButton2, "Version")
If Version = vbYes Then
newVersion = currentVersion + 1
Version = newVersion
Else
Version = currentVersion
End If
End If
ActiveDocument.SaveAs2 FilePath & MyDate & "_" & Title & "_i_0" & Version & "_" & User
End Sub
解决方案
这里的问题是你根本没有考虑任何事情。您还只是简单地使用了先前答案中提供给您的代码,而没有首先确保您理解它。
切勿使用从 Internet 上获取的代码,除非先逐行处理并确保您完全理解代码的每个部分的作用。您可以使用 Visual Basic 编辑器中的工具来帮助解决此问题。将光标放在您不理解的术语上,然后按下F2以显示对象浏览器或F1访问在线帮助。
我在代码中添加了注释以指出您的错误。
Private Sub CommandButton3_Click()
Const FilePath As String = "//SRVDC\Arbeitsordner\Intern\Meetings\Entwürfe\"
Const OrigFileName As String = "20210910_Besprechungsnotizen_00_"
Dim MyDate As String: MyDate = Format(Date, "YYYYMMDD")
Dim Title As String
Dim oriTitle As String: oriTitle = "Besprechungsnotizen"
Dim newTitle As String
Dim currentTitle As String
Dim User As String
Dim newUser As String
Dim currentUser As String
Dim Version As Integer
Dim newVersion As Integer
Dim currentVersion As Integer
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), "_")
User = nameElements(UBound(nameElements))
Version = nameElements(UBound(nameElements) - 1)
End If
If User = "" Then
User = InputBox("Wer erstellt? (Name in Firmenkurzform)")
'why are you using Title here when it is the variable used to save the document?
'you should use newTitle for the MsgBox return value
Title = MsgBox("Anderer Titel?", vbQuestion + vbYesNo + vbDefaultButton2, "Titel")
If Title = vbYes Then
'you should be using the Titlke variable here, not newTitle
newTitle = InputBox("Wie soll der Titel sein?")
'corect the prvious two lines and these next two can be deleted
Title = newTitle
'this sets newTitle to a blank string as you haven't assigned a value to currentTitle yet
newTitle = currentTitle
Else
Title = oriTitle
'this sets oriTitle to a blank string as you haven't assigned a value to currentTitle yet
oriTitle = currentTitle
End If
Version = "0"
Else
currentUser = InputBox("Wer bearbeitet? (Name in Firmenkurzform)")
If currentUser = User Then
Else
'if you use an underscore to separate the user names you will not be able to extract
'the version number
'you need to use a different character to separate the names and then use the Split
'function to return those names as an array
User = User & "_" & currentUser
End If
'see comments above
Title = MsgBox("Neuer Titel?", vbQuestion + vbYesNo + vbDefaultButton2, "Titel")
If Title = vbYes Then
newTitle = InputBox("Wie soll der neue Titel sein?")
Title = newTitle
newTitle = currentTitle
Else
Title = currentTitle
End If
'comments above also apply here. You should have used the newVersion variable for the MsgBox
Version = MsgBox("Neue Version?", vbQuestion + vbYesNo + vbDefaultButton2, "Version")
If Version = vbYes Then
newVersion = currentVersion + 1
Version = newVersion
Else
'you haven't assigned a value to currentVersion yet so it will set Version to zero
Version = currentVersion
End If
End If
ActiveDocument.SaveAs2 FilePath & MyDate & "_" & Title & "_i_0" & Version & "_" & User
End Sub
推荐阅读
- node.js - 为什么我在部署 firebase 函数时会出错?
- javascript - 单击按钮删除整个 tr
- git - `git add` 有一个 git 钩子吗?
- google-apps-script - 如何使谷歌表格查询按顺序返回值
- java - 使用自动完成时 Eclipse 崩溃 - Java 错误日志为 EXCEPTION_ACCESS_VIOLATION
- mysql - Error when creating a table in MySql: check the manual that corresponds to your MySQL server version for the right syntax to use near ')'
- php - 选择输入选择后在数据库中显示数据
- sql - 二进制列等于 0 时重置 SQL 计数
- mysql - 我需要选择 Condition this
- c++ - 是否有一个 Windows 驱动程序函数可以等效于 Windows 文件 api SeFileAttributes