返回列表 上一主題 發帖

[發問] 將開啟後檔案的指定內容依序複製貼上。

回復 2# ziv976688


我的困難點是在無法依第4段數字選擇"由大而小"的順序~
>> 由大至小開啟檔案,修改如下紅字部分,請測試看看,謝謝


Private Sub CommandButton1_Click()
Dim Path As String, a, Ar(1 To 1000, 1 To 2)
    Nrange = "1878" ' InputBox("請輸入DATA!的開獎期數", "輸入期數")
    Tm = Timer
    [L1] = ""
    Application.DisplayAlerts = False
   
   
    Set fs = CreateObject("Scripting.FileSystemObject")
    Path = ThisWorkbook.Path
    a = Path & "\7C機"
    Set f = fs.GetFolder(a)
    Set fc = f.Files
    For Each f1 In fc
        n = n + 1
        Ar(n, 1) = a & "\" & f1.Name
        Ar(n, 2) = Split(Split(f1.Name, "_")(3), "-")(0)
    Next
    For i = 1 To UBound(Ar)
    For j = i + 1 To UBound(Ar)
        If Ar(i, 2) < Ar(j, 2) Then
            a = Ar(i, 1)
            Ar(i, 1) = Ar(j, 1)
            Ar(j, 1) = a
        End If
    Next j
    Next i
    For i = 1 To n
        Set WB = Workbooks.Open(Ar(i, 1))
        WB.Close
    Next
      
      
    With Sheets("Sheet1")
        .[A1] = Nrange
        .[A2].Formula = "=CountA(M1:GZ1) / 2 & ""個""": .[A2] = .[A2].Value
        .[A3] = "開獎號碼"
...
...

TOP

回復 4# ziv976688

可否勞駕您將各已開啟的檔案內之"機率表!"A&B二欄的內容複製後,
依序由主檔之"Sheet1!"的M1往右貼上的程式語法一併賜教。
>> 程式如下紅字,請測試看看,謝謝

For i = 1 To UBound(Ar)    '由大至小排序
    For j = i + 1 To UBound(Ar)
        If Ar(i, 2) < Ar(j, 2) Then
            a = Ar(i, 1)
            Ar(i, 1) = Ar(j, 1)
            Ar(j, 1) = a
        End If
    Next j
    Next i
   
    fileOrg = ActiveWorkbook.Name
    C = 13
    For i = 1 To n
        Set WB = Workbooks.Open(Ar(i, 1))
        With Sheets(1)
            If .FilterMode Then .ShowAllData
            .Range("a1:b" & .[a65536].End(3).Row).Copy Workbooks(fileOrg).Sheets("Sheet1").Cells(1, C)
             C = C + 2
        End With
        WB.Close
    Next
   

    With Sheets("Sheet1")
        .[A1] = Nrange
        .[A2].Formula = "=CountA(M1:GZ1) / 2 & ""個""": .[A2] = .[A2].Value
        .[A3] = "開獎號碼"
        .[A4:A10].Formula = "=IF(A$1="""","""",VLOOKUP(A$1,DATA!$A:$H,ROW()-2,

TOP

本帖最後由 samwang 於 2021-8-24 08:09 編輯

回復 7# ziv976688


以各資料夾名稱的第5段數字為基準(EX:7C _0_1878期_100_1877-10_1次)~由大而小開啟的程式碼;
然後將各開啟後的資料夾中有關鍵字"機"的檔案(EX:7C機_1878期_100_1877-10_1次)開啟~
再將該開啟後的檔案內之"機率表"的A&B二欄內容複製後,
依序由主檔之"Sheet1!"的M1往右貼上。
>> 程式如下,請測試看看,謝謝

Private Sub CommandButton1_Click()
Dim Path$, a, Ar(1 To 1000, 1 To 2), Ar1()
Nrange = "1878" ' InputBox("請輸入DATA!的開獎期數", "輸入期數")
Tm = Timer
[L1] = ""
Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set fs = CreateObject("Scripting.FileSystemObject")
a = ThisWorkbook.Path     '每個資料夾名稱裝入Ar
Set f = fs.GetFolder(a)
Set fc = f.SubFolders
For Each f1 In fc
    n = n + 1
    Ar(n, 1) = f1.Path
    Ar(n, 2) = Split(Split(f1.Name, "_")(4), "-")(0)
Next
For i = 1 To UBound(Ar)   'Ar由大至小排序
For j = i + 1 To UBound(Ar)
    If Ar(i, 2) < Ar(j, 2) Then
        a = Ar(i, 1)
        Ar(i, 1) = Ar(j, 1)
        Ar(j, 1) = a
    End If
Next j
Next i

For i = 1 To n            '開啟Ar,找檔名有"機"裝入Ar1
    Set f = fs.GetFolder(Ar(i, 1))
    Set fc = f.Files
    For Each f1 In fc
        If InStr(f1.Path, "機") Then
            ReDim Preserve Ar1(n1)
            Ar1(n1) = f1.Path
            n1 = n1 + 1
        End If
    Next f1
Next i

fileOrg = ActiveWorkbook.Name
C = 13
If n1 > 0 Then
    For i1 = 0 To n - 1   '開啟Ar1,copy A、B欄資料到Sheet1 M欄開始往右
        Set WB = Workbooks.Open(Ar1(i1))
        With Sheets(1)
            If .FilterMode Then .ShowAllData
            .Range("a1:b" & .[a65536].End(3).Row).Copy Workbooks(fileOrg).Sheets("Sheet1").Cells(1, C)
             C = C + 2
        End With
        WB.Close
    Next
End If
Set fs = Nothing: Set f = Nothing: Set fc = Nothing


  
With Sheets("Sheet1")
    .[A1] = Nrange
...
...

TOP

本帖最後由 samwang 於 2021-8-24 09:34 編輯

回復 9# ziv976688

對要定義,8#有反紅色有定義,請再測試看看,謝謝
Dim Path As String, a, Ar(1 To 1000, 1 To 2), Ar1( )  

TOP

回復 12# ziv976688


貼上本題主檔的程式碼列55套用,會在列62  For j = 2 To 8: n = n + 1: Brr(n) = Arr(i, j): Next 中斷(陣列索引超出範圍)。

>> 因為 n 前面程式碼已有使用過且有數值,所以將n改m 即可,For j = 2 To 8: m = m + 1: Brr(m) = Arr(i, j): Next ,謝謝  

TOP

        靜思自在 : 為自己找藉口的人永遠不會進步。
返回列表 上一主題