Ошибка при запуске макроса с ленты

#vba #ms-word

#vba #ms-word

Вопрос:

Я использую Microsoft Word 2010. Я написал код с использованием редактора VBA, который используется для сохранения документов, которые я редактирую. По сути, он открывает диалоговое окно сохранить как файл и вводит имя на основе строки, которая определяется некоторым текстом в документе и вводится пользователем через поле ввода. Я могу успешно запустить его, когда я нажимаю вкладку «Просмотр макрокоманд» и выполняю макрокоманду оттуда, но если я помещаю ярлык на ленту, файл мгновенно сохраняется в C:UsersUsernameDocuments с первой строкой документа.

 Sub SaveAs()
'Preia numarul dosarului in numele fisierului

Dim oRng As Range
Dim Nrdosar As String
Dim sTags As String
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Execute FindText:="Dosar nr. ", Forward:=True, _
Format:=False, Wrap:=wdFindStop
End With
oRng.Collapse 0
Nrdosar = oRng.Paragraphs(1).Range.Text
Nrdosar = Replace(Nrdosar, "Dosar nr. ", "")
Nrdosar = Replace(Nrdosar, "DOSAR NR. ", "")
Nrdosar = Replace(Nrdosar, "/4/", "-")
Nrdosar = Replace(Nrdosar, "/", "-")
Nrdosar = Replace(Nrdosar, "*", "")
Nrdosar = Replace(Nrdosar, Chr(13), "")
MsgBox Nrdosar
sTags = InputBox("Introduceti cuvinte cheie separate de virgula")
With Dialogs(wdDialogFileSaveAs)
    .Name = Nrdosar amp; " " amp; sTags amp; ".docx"
    .Show
    End With
End Sub
 

Я экспортировал ярлыки ленты, чтобы попытаться понять проблему

 <mso:cmd app="Word" dt="1" />
<mso:customUI xmlns:x1="http://schemas.microsoft.com/office/2009/07/customui/macro" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui"><mso:ribbon>
<mso:qat><mso:sharedControls>
<mso:control idQ="mso:FileNewDefault" visible="false"/><mso:control idQ="mso:FileOpen" visible="false"/>
<mso:control idQ="mso:FileSendAsAttachment" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:FilePrintQuick" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:PrintPreviewAndPrint" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:SpellingAndGrammar" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:TableDrawTable" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:FileOpenRecentFile" visible="false" insertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:Undo" visible="true" insertBeforeQ="mso:FileSave"/><mso:control idQ="mso:RedoOrRepeat" visible="true" InsertBeforeQ="mso:FileSave"/>
<mso:control idQ="mso:FileSave" visible="true"/>
<mso:button idQ="x1:SaveAs_1" visible="true" label="Normal.NewMacros.SaveAs" imageMso="ListMacros" onAction="SaveAs"/>
</mso:sharedControls></mso:qat>
<mso:tabs>
<mso:tab idQ="mso:TabHome">
<mso:group id="mso_c1.-D823CC6" label="Auto" autoScale="true">
<mso:gallery idQ="mso:AutoTextGallery" showInRibbon="false" visible="true"/>
<mso:control idQ="mso:TableColumnsDelete" visible="true"/>
<mso:control idQ="mso:TableRowsDelete" visible="true"/>
<mso:button idQ="x1:SaveAs_0_102AE36C" label="Normal.NewMacros.SaveAs" imageMso="ListMacros" onAction="SaveAs" visible="true"/>
</mso:group>
</mso:tab><mso:tab id="mso_c1.5F8A243" label="FilÄ nouÄ">
<mso:group id="mso_c2.5F8A243" label="Grup nou" autoScale="true">
<mso:control idQ="mso:DateAndTimeInsert" visible="true"/>
</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>
 

Я не могу себе представить, почему результат отличается при запуске макрокоманды с вкладки Просмотр макрокоманд по сравнению с ярлыком, который я помещаю на ленту.

Я считаю, что с самим кодом VBA нет проблем и что есть какая-то ошибка. Я хотел бы иметь возможность запускать код VBA с помощью ярлыка. Спасибо!

Ответ №1:

SaveAs это встроенная команда в Word (как в File / Save As). Таким образом, отправка команды для запуска макроса с этим именем — это обход фактического макроса и выполнение встроенной команды Word.

Присвоение макросу другого имени (не зарезервированного) должно устранить проблему.

Ответ №2:

Проблема или ошибка заключалась в имени макроса. Я изменил первую строку с:

Вложенные сохранения ()

Для

Sub SaveDoc()

Я все еще не понимаю этого поведения, но я хотел поделиться обходным решением.