Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba FileSave()字宏_Vba_Ms Word - Fatal编程技术网

Vba FileSave()字宏

Vba FileSave()字宏,vba,ms-word,Vba,Ms Word,我编写了一个宏,当创建文件并单击“保存”按钮时,宏将被触发(因为它会覆盖默认的FileSave函数)。宏从文档中的表中提取信息,将其转换为字符串,然后清除该字符串中的任何回车符,然后将其用作文件名。if语句然后运行,检查表中的隐藏行是否具有值1,如果没有,则将该值设置为1,并将文档保存在使用新文件名指定的位置 所有这些都非常有效,除非我重新打开文件进行编辑,就像我的用户会做的那样,然后再次单击“保存”,它会尝试再次运行所有内容,完全忽略我的If语句first语句,并将在文件名的开头添加一个回车符

我编写了一个宏,当创建文件并单击“保存”按钮时,宏将被触发(因为它会覆盖默认的FileSave函数)。宏从文档中的表中提取信息,将其转换为字符串,然后清除该字符串中的任何回车符,然后将其用作文件名。if语句然后运行,检查表中的隐藏行是否具有值1,如果没有,则将该值设置为1,并将文档保存在使用新文件名指定的位置

所有这些都非常有效,除非我重新打开文件进行编辑,就像我的用户会做的那样,然后再次单击“保存”,它会尝试再次运行所有内容,完全忽略我的If语句first语句,并将在文件名的开头添加一个回车符,从而有效地破坏了SharePoint的保存功能,因为其中包含无效字符。如果再次单击“保存”,它将像正常一样运行宏,并通过正确读取If语句来保存宏。我做错什么了吗

代码如下:

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语句中添加了您的内容,效果非常好。非常感谢你!