У меня есть сценарий, который сохраняет x частей сборки ПО в файле Step/xt на основе ввода пользовательской формы. Это работает очень хорошо. Однако я хочу добавить окно сообщения с вопросом: «Хотите перезаписать этот файл», как только пользователь сохраняет файл, который уже существует в папке. Это должно быть частью цикла, чтобы они могли определить его для каждой отдельной части.
В моем сценарии ниже я что-то попробовал, но если я «раскомментирую» это, мой сценарий вообще ничего не сохранит. Может ли кто-нибудь дать мне совет, как его улучшить, чтобы он работал?
ArrayList
содержит части, которые пользователь хочет сохранить, определяемые флажками, и каждый раз разные.
Public Sub UserInput(InputMldPartNrFS, InputMldPartNrMS, InputREVCodeNr, InputCheckBxFS, InputCheckBxMS, OptionExtension, InputArrayParts As String)
'Create new pathname
ExtInit = ".SLDPRT" 'Old extension
ExtNew = OptionExtension 'Input from userform: either X_T or STEP
MldPartNrFS = InputMldPartNrFS 'Input from userform
MldPartNrMS = InputMldPartNrMS 'Input from userform
REVCodeNR = "[REV" + InputREVCodeNr + "]" 'Input from userform
ArrayList = Split(InputArrayParts, ",")
For i = LBound(ArrayList) To UBound(ArrayList) 'Run loop x times depending on the amount of selected checkboxes in the userform
'Assign moldcode number on either FS or MS parts
Select Case ArrayList(i)
Case "part1", "part2", "part3", "part4" 'If part contains these names
mldpartcode = MldPartNrFS 'Then assign the code for FS
Case Else 'If the names are not as written above
mldpartcode = MldPartNrMS 'Then assign the code for MS
End Select
initName = PathCut + ArrayList(i) + ExtInit
finalName = PathCut & "XT\" & NumPart(initName) & "_" & mldpartcode & " " & ArrayList(i) & " " & REVCodeNR & ExtNew
Debug.Print "finalName = ", finalName
'Open and activate the correct model
Set swModel = swApp.OpenDoc6(initName, 1, 0, "", nStatus, nWarnings) 'Open the model
Set swModelActivated = swApp.ActivateDoc3(initName, False, swRebuildOnActivation_e.swUserDecision, nErrors) 'Activate the model
Set swModelToExport = swApp.ActiveDoc 'Get the activated model
Debug.Print "strModelName = ", strModelName
'Save the file if it does not exist yet
Dim FileNameOverwrite
If Not Dir(finalName, vbDirectory) = vbNullString Then
FileNameOverwrite = MsgBox("Filename " & finalNameCut & " already exists. Do you want to overwrite?", vbQuestion + vbYesNo, "File overwrite")
UserParam.Hide
If FileNameOverwrite = vbNo Then
UserParam.Show
Exit Sub ' Stop the code execution, no more looping
End If
End If
swModelToExport.Extension.SaveAs3 finalName, 0, 1, Nothing, Nothing, nErrors, nWarnings
'Reopen assembly
Set swModel = swApp.OpenDoc6(PathInit, 1, 0, "", nStatus, nWarnings) 'Open the model
Set swModelActivated = swApp.ActivateDoc3(PathInit, False, swRebuildOnActivation_e.swUserDecision, nErrors) 'Activate the model
Set swModelToExport = swApp.ActiveDoc 'Get the activated model
Next
End Sub
Обновлено: показанный код теперь работает. ДОПОЛНИТЕЛЬНО, у меня есть еще один дополнительный вопрос.
Если я сохраняю несколько уже существующих файлов, я хочу, чтобы пользователь определил, хочет ли он перезаписать их для каждого файла. С текущим кодом это происходит:
Я намеренно сохранил часть 1 и часть 4, но названия уже есть. Поэтому появляется окно сообщения «Хотите перезаписать». Если я скажу, что хочу перезаписать, это автоматически перейдет к другим двойным файлам. Однако, если я откажусь, он вернется в пользовательскую форму. В этом случае никогда не будет возможности перезаписать «Часть 4» после того, как я выбрал «Нет» для первой части.
Как я могу адаптировать свой код, чтобы он также проходил через все части при отмене? Заранее спасибо.
Вопрос: а если я это "раскомментирую", то мой скрипт вообще ничего не сохраняет
SaveAs3
отсутствует.SaveAs3
в вашем скрипте.Пожалуйста, попробуйте.
'Save the file if it does not exist yet
Dim FileNameOverwrite
If Not Dir(finalName, vbDirectory) = vbNullString Then
FileNameOverwrite = MsgBox("This filename already exists. Do you want to overwrite?", vbQuestion + vbYesNo, "File overwrite")
If FileNameOverwrite = vbNo Then
MsgBox "Dit doet nog niks"
UserParam.Show
Exit Sub ' stop the code execution, no more looping
End If
End If
swModelToExport.Extension.SaveAs3 finalName, 0, 1, Nothing, Nothing, nErrors, nWarnings
Спасибо за ответ. Теперь он работает отлично. Однако у меня возник дополнительный вопрос, который вы можете увидеть в
EDIT
части моей темы. Знаешь, что я могу сделать?