programing

VBA를 통해 다른 워크북의 데이터 복사

css3 2023. 8. 18. 22:51

VBA를 통해 다른 워크북의 데이터 복사

다른 파일에서 데이터를 수집하여 워크북에 삽입하고 싶습니다.

Do While THAT_DIFFERENT_FILE_SOMEWHERE_ON_MY_HDD.Cells(Rand, 1).Value <> "" And Rand < 65536
        then 'I will search if the last row in my main worksheet is in this file... 
End Loop           

기본 워크시트의 마지막 행이 파일에 있으면 루프를 종료합니다.안 되면 다 복사할게요.저는 이것에 대한 올바른 알고리즘을 찾는 데 어려움을 겪고 있습니다.

문제는 다른 문제집에 액세스하는 방법을 모른다는 것입니다.

워크북에서 다른 워크북으로 데이터를 복사하는 가장 좋은 방법은 Excel 개체 모델을 사용하는 것입니다.

Option Explicit
Sub test()
    Dim wb As Workbook, wb2 As Workbook
    Dim ws As Worksheet
    Dim vFile As Variant

    'Set source workbook
    Set wb = ActiveWorkbook
    'Open the target workbook
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _
        1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Workbooks.Open vFile
    'Set targetworkbook
    Set wb2 = ActiveWorkbook

    'For instance, copy data from a range in the first workbook to another range in the other workbook
    wb2.Worksheets("Sheet2").Range("C3:D4").Value = wb.Worksheets("Sheet1").Range("A1:B2").Value
End Sub

GetInfoFromClosedFile() 함수를 사용할 수 있습니다.


편집: 위 링크가 더 이상 작동하지 않는 것 같아 대체 링크 1과 대체 링크 2 + 코드를 추가합니다.

Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
    wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
    GetInfoFromClosedFile = ""
    If Right(wbPath, 1) <> "" Then wbPath = wbPath & ""
    If Dir(wbPath & "" & wbName) = "" Then Exit Function
    arg = "'" & wbPath & "[" & wbName & "]" & _
        wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
    On Error Resume Next
    GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function

열 구문을 찾고 계십니까?

Dim wkbk As Workbook

Set wkbk = Workbooks.Open("C:\MyDirectory\mysheet.xlsx")

그런 다음 사용할 수 있습니다.wkbk.Sheets(1).Range("3:3")(또는 필요한 모든 것)

Excel에서 여러 문제집을 열지 않을 이유가 거의 없습니다.주요 코드 라인은 다음과 같습니다.

Application.EnableEvents = False
Application.ScreenUpdating = False

...코드가 실행되는 동안에는 아무것도 표시되지 않으며, 두 번째 워크북을 여는 것과 관련된 코드도 실행되지 않습니다.그리고 또...

Application.DisplayAlerts = False
Application.Calculation = xlManual

...두 번째 파일의 내용과 관련된 팝업 메시지가 표시되는 것을 방지하고 다시 표시되는 속도가 느려지는 것을 방지합니다.프로그래밍이 끝나면 True/xlAutomatic으로 다시 설정해야 합니다.

두 번째 워크북을 열어도 성능 문제가 발생하지 않는다면 그렇게 하는 것이 좋습니다.실제로 일부 보조 파일이 예상 형식과 일치하지 않는 경우 두 번째 워크북을 열어 두면 코드를 디버깅할 때 매우 유용합니다.

다음은 데이터 참조에 사용할 수 있는 다양한 방법에 대한 개요를 제공하는 여러 Excel 파일 사용에 대한가지 전문가 지침입니다.

확장 문제는 동일한 폴더에 포함된 여러 파일을 순환하는 방법입니다.다음을 사용하여 Windows 폴더 선택기를 사용할 수 있습니다.

With Application.FileDialog(msoFileDialogFolderPicker)
.Show
     If .Selected.Items.Count = 1 the InputFolder = .SelectedItems(1)
End With

FName = VBA.Dir(InputFolder)

Do While FName <> ""
'''Do function here
FName = VBA.Dir()
Loop

위의 내용 중 일부가 유용하기를 바랍니다.

저도 같은 질문이 있었는데, 제공된 솔루션을 적용하면 파일을 쓰기로 변경했습니다.제가 새로운 엑셀 파일을 선택했을 때, 저도 원래 파일이 아닌 그 파일에 글을 쓰고 있었습니다.이 문제에 대한 저의 해결책은 다음과 같습니다.

Sub GetData()

    Dim excelapp As Application
    Dim source As Workbook
    Dim srcSH1 As Worksheet
    Dim sh As Worksheet
    Dim path As String
    Dim nmr As Long
    Dim i As Long

    nmr = 20

    Set excelapp = New Application

    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
        .Show
        path = .SelectedItems.Item(1)
    End With

    Set source = excelapp.Workbooks.Open(path)
    Set srcSH1 = source.Worksheets("Sheet1")
    Set sh = Sheets("Sheet1")

    For i = 1 To nmr
        sh.Cells(i, "A").Value = srcSH1.Cells(i, "A").Value
    Next i

End Sub

와 함께excelapp새로운 지원서가 호출될 것입니다.withblock은 외부 파일의 경로를 설정합니다.을 마막으외워크설정했다니습을로 설정했습니다.source그리고.srcSH1외부 시트 내의 워크시트로.

언급URL : https://stackoverflow.com/questions/7401967/copy-data-from-another-workbook-through-vba