2011-08-17 2 views
1

VBA에서 두 개 이상의 .dat 파일을 병합하는 프로그램을 작성하려고합니다. 기본적으로, 사용자가 원하는 수의 파일 (2 개 이상)을 선택하도록 사용자에게 요청합니다. 그런 다음 사용자가 선택한 순서에 따라 파일을 "병합"합니다. 병합이란 이전에 선택한 파일에 선택한 파일 하나를 추가하거나 복사하여 붙여 넣은 다음 새로운 파일로 저장한다는 의미입니다. 나는 열 필요가있는 하나의 파일에 대해 열린 프롬프트 창을 팝업하는 데 익숙하기 때문에 Strings 부분으로 새로운 변수를 만드는 일에 매달렸다. 이제 메시지 상자에서 사용자가 이전 파일과 병합 된 다른 파일을 원하는지 여부에 따라 조건부로 선택됩니다. 사용자가 no를 선택하거나 취소 할 때까지 계속 묻습니다. 따라서 사용자가 예를 선택할 때마다 나중에 열 수있는 파일 이름을 저장하기 위해 만들어진 새로운 변수가 필요합니다. 이 과정에 어떻게 가야합니까? 또한 어떻게 사용자가 파일 병합을 중지하기 위해 "아니오"를 눌렀을 때 동시에이 파일들을 모두 열어 놓고 추가하거나 복사하고 붙여 넣기 할 수있는 영리한 방법이 있다면 16 진수 편집기를 시도했습니다. : HxD, 어떻게 16 진수 편집 프로그램을 VBA로 조작합니까?조건문 및 "병합".dat 파일을 기반으로 새 문자열 변수를 만드시겠습니까?

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

당신은 문자열의 배열에 이름을 저장하는이 같은 루프, 다음 이후 처리를 위해 개별적으로 하나 하나에 액세스 할 수 있습니다

또한
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 

GetOpenFilenameMultiSelect 인수를 지원 그러나 그것은 단지 하나의 디렉토리와 작동 선택한 파일의 순서가 보장되지 않습니다.

+0

감사합니다. vba를 처음 접했을 때,이게 id prob 인 경우. 구문을 작성하는 방법을 알아야합니다. 고맙다! – jerryh91

+0

안녕하세요, 이제 allfile 배열에 저장된 개별 파일을 열려고하는데 문제가 발생했습니다. – jerryh91

+0

그것은 내게 범위 밖의 첨자로 오류를 준다 : Workbooks.Open Filename : = AllFiles (1) – jerryh91

관련 문제