Перезаписать файлы msgbox в цикле с помощью Solidworks vba

У меня есть сценарий, который сохраняет 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» после того, как я выбрал «Нет» для первой части.

Как я могу адаптировать свой код, чтобы он также проходил через все части при отмене? Заранее спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вопрос: а если я это "раскомментирую", то мой скрипт вообще ничего не сохраняет

  • После того, как вы раскомментируете предложение If: Если целевой файл существует, ваш код должен работать правильно. Однако если целевой файл отсутствует, это означает, что 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 части моей темы. Знаешь, что я могу сделать?

JetskiS 27.08.2024 16:00

Другие вопросы по теме