返回列表 上一主題 發帖

急!急!想請問寫出選擇性匯入資料的方法(已有一段程式碼,但不知道如何改寫))

回復 1# iverson105
幫你修改一下會錯誤可能是先前遺留不是檔案的資料
加上程式碼清除先前遺留的檔案文字
  1. Option Explicit
  2. Sub Ex()
  3.     Dim fds, i As Integer
  4.     With Sheets("工作表1")
  5.         '**清除先前遺留的檔案文字****
  6.         .Range(.Range("a2"), .Range("a2").End(xlDown)) = ""
  7.         fds = Application.GetOpenFilename("Excel Files (*.xlsm;*.xlsx), *.xlsm;*.xlsx", , , , True)
  8.         If IsArray(fds) Then
  9.             For i = 1 To UBound(fds)
  10.                 .Range("A2").Cells(i) = fds(i)
  11.                 With Workbooks.Open(.Range("A2").Cells(i))
  12.                     .Sheets.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  13.                     .Close 0
  14.                 End With
  15.             Next
  16.         End If
  17.     End With
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# iverson105
.Sheets.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
上式**為所開啟活頁簿上所有工作表複製到ThisWorkbook(執行巨集的活頁簿)下

你想改為想指定匯入某個sheet的某一欄位或某一列資料時
試試看
.Sheets(1).Rows(1).Copy ThisWorkbook.Sheets("工作表2").Rows(3)
**所開啟活頁簿第一個Sheet第一列(整列)複製到ThisWorkbook名稱"工作表2"Sheet上的第二列(整列)
.Sheets("工作表1").Range("b5:d6").Copy ThisWorkbook.Sheets("工作表2").Range("f5")
**所開啟活頁簿名稱"工作表1"Sheet上"b5:d6"複製到ThisWorkbook名稱"工作表2"Sheet上的"f5"
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# iverson105

對你的說明沒有很明白
試試看下面程式碼對嗎!
  1. Option Explicit
  2. Sub Ex()
  3.     Dim fds, i As Integer, Rng As Range, XSh As Worksheet, Sh As Worksheet
  4.         fds = Application.GetOpenFilename("Excel Files (*.xlsm;*.xlsx), *.xlsm;*.xlsx", , , , True)
  5.         If IsArray(fds) Then
  6.             Set Rng = Sheets("工作表2").Cells(Rows.Count, "a").End(xlUp)  '   的sheet(ie:"工作表2")的A1開始
  7.             If Rng <> "" Then Set Rng = Rng.Offset(1)
  8.             For i = 1 To UBound(fds)
  9.                 With Workbooks.Open(fds(i))
  10.                     For Each Sh In .Sheets
  11.                     '  If InStr(Sh.Name, "XXX") Then  '可加上條件 有指定工作名稱
  12.                         Sh.[A39:D99].Copy Rng    '但每個sheet裡 我只要Range("A39:D99"),
  13.                         Set Rng = Sheets("工作表2").Cells(Rows.Count, "a").End(xlUp).Offset(1)
  14.                         Debug.Print Rng.Address
  15.                       'End If
  16.                     Next
  17.                     .Close 0
  18.                 End With
  19.            Next
  20.         End If
  21. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 8# iverson105
  1. Option Explicit
  2. Sub Ex()
  3.     Dim fds, i As Integer, Rng As Range, x_Sh As Worksheet, Sh As Worksheet
  4.         fds = Application.GetOpenFilename("Excel Files (*.xlsm;*.xlsx), *.xlsm;*.xlsx", , , , True)
  5.         If IsArray(fds) Then
  6.             Set x_Sh = ThisWorkbook.Sheets("工作表2")   '你指定複製資料到的工作表
  7.             Set Rng = x_Sh.Cells(Rows.Count, "a").End(xlUp)  '
  8.             If Rng <> "" Then Set Rng = Rng.Offset(1)
  9.             For i = 1 To UBound(fds)
  10.                 With Workbooks.Open(fds(i))  '開啟指定的檔案
  11.                     For Each Sh In .Sheets
  12.                       If InStr(UCase(Sh.Name), "SHEETC") Then    '你所指定的工作表名稱"SHEETC"
  13.                          Sh.[A39:D99].Copy Rng                                      '**A39:D99 你要複製的範圍
  14.                         Set Rng = x_Sh.Cells(Rows.Count, "a").End(xlUp).Offset(1)
  15.                       End If
  16.                     Next
  17.                     .Close 0
  18.                 End With
  19.            Next
  20.         End If
  21. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題