Vba FileSave()字宏
我编写了一个宏,当创建文件并单击“保存”按钮时,宏将被触发(因为它会覆盖默认的FileSave函数)。宏从文档中的表中提取信息,将其转换为字符串,然后清除该字符串中的任何回车符,然后将其用作文件名。if语句然后运行,检查表中的隐藏行是否具有值1,如果没有,则将该值设置为1,并将文档保存在使用新文件名指定的位置 所有这些都非常有效,除非我重新打开文件进行编辑,就像我的用户会做的那样,然后再次单击“保存”,它会尝试再次运行所有内容,完全忽略我的If语句first语句,并将在文件名的开头添加一个回车符,从而有效地破坏了SharePoint的保存功能,因为其中包含无效字符。如果再次单击“保存”,它将像正常一样运行宏,并通过正确读取If语句来保存宏。我做错什么了吗 代码如下:Vba FileSave()字宏,vba,ms-word,Vba,Ms Word,我编写了一个宏,当创建文件并单击“保存”按钮时,宏将被触发(因为它会覆盖默认的FileSave函数)。宏从文档中的表中提取信息,将其转换为字符串,然后清除该字符串中的任何回车符,然后将其用作文件名。if语句然后运行,检查表中的隐藏行是否具有值1,如果没有,则将该值设置为1,并将文档保存在使用新文件名指定的位置 所有这些都非常有效,除非我重新打开文件进行编辑,就像我的用户会做的那样,然后再次单击“保存”,它会尝试再次运行所有内容,完全忽略我的If语句first语句,并将在文件名的开头添加一个回车符
Sub FileSave()
Dim strText As String
Dim strClean As String
Dim strFileName As String
Dim strLocation As String
Dim strSavedName As String
Dim strCleanSave As String
strText = ActiveDocument.Tables(1).Rows(1).Cells(2).Range.Text
strClean = Application.CleanString(strText)
strFileName = strClean + "_" + Format(Date, "yyyy-mm-dd")
strLocation = "[My SharePoint Site]"
If ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text = "1" Then
strSavedName = ActiveDocument.Name
strCleanSave = Application.CleanString(strSavedName)
ActiveDocument.SaveAs FileName:=strSavedName
Exit Sub
Else
ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text = "1"
ActiveDocument.SaveAs FileName:=strLocation & strFileName & ".docx"
End If
End Sub
单词表单元格文本范围以两个隐藏字符终止,一个回车符(ASCII 13)和一个钟形符(ASCII 7)。IF条件返回false,因为它正在测试
“1”
和“1”&Chr(13)&Chr(7)
的等价性
在您的情况下,您可以将测试限制为第一个字符:
If Left$(ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text, 1) = "1" Then
一般来说,您可以使用Len()-2测试可见单元格内容
希望能有所帮助。您是否使用“选项明确”?如果没有,请将其添加到表单或模块的顶部,代码所在的位置。它可能有助于发现导致您看到的问题的任何问题。我不使用Option Explicit。这是一个单词宏。第一次储蓄是完美的。再次打开它进行编辑,编辑后点击save将抛出并上传错误,因为它的文件名不是“[name]\U 2015-09-21.docx”,而是“[name]\U 2015-09-21.docx”这是word抛出错误的地方,因为出于某种原因,它没有像我告诉它的那样使用现有文档名,而是尝试重新创建它并添加回车符,但是如果我继续,即使在获得上载错误后再次单击“保存”按钮,它也会正常运行。太棒了!我知道他们添加了特殊字符,这就是为什么我在CleanString中运行它们。我在IF语句中添加了您的内容,效果非常好。非常感谢你!