Создать новые строковые переменные на основе условного оператора и «слияния» .dat файлов? - PullRequest
1 голос
/ 17 августа 2011

Я пытаюсь написать программу, которая объединяет два или более файлов .dat в VBA excel.В основном, он сначала просит пользователя выбрать любое количество файлов (более 2).Затем он «сливает» файлы в порядке, выбранном пользователем.Под объединением я имею в виду добавить или скопировать и вставить один выбранный файл в предыдущий выбранный файл и сохранить как новый файл.Я застрял на создании новых переменных как части Strings, так как я привык к тому, что всплывающее окно с открытым приглашением всплывает только для одного файла, который нужно открыть.Теперь это зависит от выбора пользователем в окне сообщения того, хочет ли он, чтобы другой файл был объединен с предыдущим.Он продолжает спрашивать об этом, пока пользователь не выберет «Нет» или «Отмена».Таким образом, каждый раз, когда пользователь выбирает «да», необходимо создать новую переменную для хранения имени файла, которое будет открыто позже.Как мне пройти этот процесс?А также Как мне открыть все эти файлы одновременно, когда пользователь нажимает «нет», чтобы прекратить слияние файлов, и есть ли какой-нибудь умный способ добавлять или копировать и вставлять файлы .dat, я пробовал Hex Editor: HxD, как мне манипулировать программой Hex Edit с помощью VBA?

   Sub Merge()
    Dim Response, Message As String
  Dim File1 As String 'Needs new variable created each time user selects "ok" on msgbox
   ChDir "C:\"

File1 = Application.GetOpenFilename(Title:="Select File to be Merged")
If File1 = "False" Then Exit Sub
Message = "Select Another File To be Merged With?"
Response = MsgBox(Message, vbQuestion + vbOKCancel, "Merge Files")
 If Response = vbOK Then
  'Loop-mechanism to create a new variable each time. HOW?

 Else
'Open .dat files and start the copy and pasting process HOW with Hex Editor?:I'm using a program called "HxD"
 End If
 End Sub

Спасибо!

1 Ответ

1 голос
/ 17 августа 2011

Вы можете выполнить цикл таким образом, сохраняя имена в массиве строк, а затем обращаться к каждому из них по отдельности для обработки:

Sub Merge()
    Dim File1      As String 'Needs new variable created each time user selects "ok" on msgbox
    Dim AllFiles() As String
    Dim count      As Long

    ChDir "C:\"

    ReDim AllFiles(0)

    Do
        Application.EnableCancelKey = xlDisabled
        File1 = Application.GetOpenFilename("DAT Files (*.dat),*.dat", 1, "Select File to be Merged")
        Application.EnableCancelKey = xlErrorHandler

        If (File1 = "False") Then Exit Do
        ReDim Preserve AllFiles(count)
        AllFiles(count) = File1
        count = (count + 1)
        If (MsgBox("Select Another File To be Merged With?", vbQuestion + vbOKCancel, "Merge Files") = vbCancel) Then Exit Do
    Loop

    If (count = 0) Then
        MsgBox "No selection"
        Exit Sub
    End If

    For count = 0 To UBound(AllFiles)
        MsgBox "User selected file name: " & AllFiles(count)
        '//boogy
    Next
End Sub

GetOpenFilename также поддерживает аргумент MultiSelect, однако он работает только в одном каталоге, и порядок выбранных файлов не гарантируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...