返回列表 上一主題 發帖

[發問] 如何指定將不同檔案夾的csv檔中特定範圍的資料copy到特定檔案中

回復 1# oak0723-1

試試看
  1. Option Explicit
  2. Dim Wb As Workbook
  3. Sub Ex()
  4.     Dim xFile As String,  Sh As Worksheet, i As Integer, Rng As Range
  5.     Set Wb = Workbooks("03.XLS")   '指定的XLS擋
  6.     xFile = ThisFile
  7.     If InStr(xFile, "CSV") = False Then MsgBox xFile: Exit Sub
  8.     Set Sh = Wb.Sheets("SHEET1") '指定的XLS擋的工作頁
  9.     With Workbooks.Open(xFile)
  10.         For i = 1 To 2
  11.             Set Rng = .Sheets(1).Range(Sh.Cells(1 + 1, "E") & ":" & Sh.Cells(1 + i, "F"))  '指定的位置
  12.             Set Rng = .Sheets(1).Range(Rng, Rng.End(xlDown))   ''指定的位置往下至資料的終點
  13.             With Sh.Cells(Rows.Count, "a").End(xlUp).Offset(1)   'A欄最底列往上到有資料的儲存閣的下一列
  14.                     .Resize(Rng.Rows.Count, Rng.Columns.Count) = Rng.Value
  15.             End With
  16.         Next
  17.         .Close
  18.     End With
  19. End Sub
  20. Function ThisFile() As String
  21.       With Wb      '**指定的XLS擋
  22.         ThisFile = Mid(.Path, 1, InStrRev(.Path, "\"))  '**指定的XLS擋的上層資料夾
  23.         With .Sheets("Sheet1")
  24.             ThisFile = ThisFile & .Range("b2") & "\" & .Range("c2") & ".CSV"  '上層資料夾+子資料\的CSV檔案完整路徑
  25.             '**** 檢查CSV的檔案是否存在
  26.             If Dir(ThisFile) = "" Or Application.CountA(.Range("E2:F3")) <> 4 Then ThisFile = "請檢查" & vbLf & Join(Application.Transpose(Application.Transpose([B1:F1])), ",")
  27.         End With
  28.       End With
  29. End Function
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# oak0723-1
2#的程式碼是依你提出的條件所寫,你要改變條件當然會不行的
  1. Set Wb = Workbooks("03.XLS")   '指定的XLS擋
  2.     Set Wb = ActiveWindow       '作用中的XLS擋
  3.     Set Wb = ThisWorkbook       '程式碼所在的XLS擋
  4.     Set Wb = Windows(2)           '第二個XLS擋
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# oak0723-1
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 2) As Range, Sh As Worksheet, i As Integer, E As Range
  4.     '**設定讀取多檔案的資料位置
  5.     Set Rng(1) = ActiveWorkbook.ActiveSheet.Range("C7")                 '**視窗作用中的活頁簿的作用中工作頁的"C7"
  6.     'Set Rng(1) = WorkbookS("???.xls").Sheets("???").Range("C7")        '**指定的活頁簿的???工作頁的"C7"
  7.     'Set Rng(1) = ThisWorkbook.Sheets("???").Range("C7")                   '**程式碼所在的活頁簿的???工作頁的"C7"
  8.     '**設定 F6等黃色區域輸入儲存格編號的位置
  9.     Set Rng(2) = Rng(1).Parent.Range("F6")
  10.     Set Rng(2) = Range(Rng(2), Rng(2).End(xlToRight))                       '延伸到最右邊的資料
  11.     '**************************************
  12.     Do While Rng(1) <> ""    'Rng有資料
  13.         If Dir(Rng(1) & "\" & Rng(1).Cells(1, 2) & ".xls") = "" Then GoTo NoXls_Or_NoSheet:
  14.         With Workbooks.Open(Rng(1) & "\" & Rng(1).Cells(1, 2) & ".xls")  '**開啟多檔案  (XLS或 CSV)
  15.             On Error GoTo NoXls_Or_NoSheet:
  16.             Set Sh = .Sheets(Rng(1).Cells(1, 3).Text) '**設定多檔案的工作頁
  17.             Err.Clear
  18.             i = 4
  19.             For Each E In Rng(2)
  20.                 Rng(1).Cells(1, i) = Sh.Range(E)  '讀取黃色區域指定的資料
  21.                 i = i + 1
  22.             Next
  23.             .Close        '關閉檔案
  24.         End With
  25.         Set Rng(1) = Rng(1).Offset(1)  '下一個檔案資料
  26.     Loop
  27.     '*********************************************
  28.     Exit Sub           '程式執行正常下離開這程式
  29. NoXls_Or_NoSheet:
  30.     MsgBox Rng(1) & " \ " & Rng(1).Cells(1, 2) & " \ " & Rng(1).Cells(1, 3) & vbLf & "找不到" & IIf(Err, Rng(1).Cells(1, 3).Text, "")
  31. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題