返回列表 上一主題 發帖

[發問] 更新進度,來源為多個檔案

[發問] 更新進度,來源為多個檔案

有一CASE,是由許多部門一同合作,要負責整合各單位的進度真的是非常擾人,目前都用一個一個複製貼上,更新部分再自行標藍字,不能夠直接複製整個儲存格,因為一個儲存格有多個單位,所以只能付制儲存格內的內容,但是就會變回原格式,所以還要再標一次藍字,請教要怎麼樣可以自動抓取後更新




回復 1# 44754875


方便可以提供來源和需求結果的檔案測試嗎? 謝謝

TOP

回復 2# samwang


    來源檔案

TEST.rar (30.12 KB)

TOP

回復 3# 44754875


請測試看看,謝謝。
Sub test()
Dim WB, Arr, Brr, xD, Ar, a, a1, fc%, x%, fn$, n%, i&, j%, iPos%, iLen%, iPos1%
Application.ScreenUpdating = False: Application.DisplayAlerts = False
Application.AskToUpdateLinks = False

Set xD = CreateObject("Scripting.Dictionary")
Brr = Sheets(1).Range([原始!d1], [原始!d65536].End(3))
With Sheets(2)
    If .FilterMode Then .ShowAllData
    .[d1].Resize(UBound(Brr)) = Brr
    .[d1].Resize(UBound(Brr)).Font.ColorIndex = 1
End With

With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "D:\"
    .AllowMultiSelect = True
    .Show
    fc = .SelectedItems.Count
    If fc = 0 Then Exit Sub
    Tm = Timer
    For x = 1 To fc
        FPath = .SelectedItems(x)
        Set WB = Workbooks.Open(FPath)
        With Sheets(1)
            If .FilterMode Then .ShowAllData
            Arr = .Range("d1:d" & .[d65536].End(3).Row)
            For i = 2 To UBound(Arr)
                Ar = Split(Arr(i, 1), Chr(10))
                For j = 0 To UBound(Ar)
                    a = Split(Ar(j), ":")(0): a1 = Split(Ar(j), ":")(1): xD(a & "") = a1
                Next
            Next
        End With
        WB.Close
         
        For i = 2 To UBound(Brr)
            Ar = Split(Brr(i, 1), Chr(10))
            For j = 0 To UBound(Ar)
                a = Split(Ar(j), ":")(0): a1 = Split(Ar(j), ":")(1)
                If xD.Exists(a & "") Then
                    If a1 <> xD(a & "") Then
                        Sheets(2).Cells(i, 4) = Replace(Cells(i, 4), a1, "更新-" & xD(a & ""))
                    End If
                End If
            Next
        Next
        xD.RemoveAll
    Next
End With

With Sheets(2)
    Arr = .Range("d1:d" & .[d65536].End(3).Row)
    For i = 2 To UBound(Arr)
        Ar = Split(Arr(i, 1), Chr(10))
        For j = 0 To UBound(Ar)
            a = Split(Ar(j), ":")(0): a1 = Split(Ar(j), ":")(1)
            iPos = InStr(a1, "更新-"): iLen = Len(a1) + 5: iPos1 = InStr(Cells(i, 4), a)
            If iPos > 0 Then: .Cells(i, 4).Characters(iPos1, iLen).Font.ColorIndex = 3
        Next
    Next
End With
Application.ScreenUpdating = True: Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
MsgBox "執行完成" & Timer - Tm & " 秒"
End Sub

TOP

回復 4# samwang
A、B各別執行都成功,但是C 只有更新一筆,正確要更新兩筆資料
另外當同時選取A、B、C執行只有更新B、C的部分

TOP

回復 5# 44754875

我測試後無誤如附件,請再確認,謝謝。

整合_0711.zip (23.92 KB)

TOP

回復 6# samwang
抱歉因為無權限下載,請問程式碼有修改嗎

TOP

回復 6# samwang

TEST2.rar (40.72 KB)
我複製上面程式測試的檔案

TOP

回復 8# 44754875

我的程式碼沒修改,
剛剛看了你上傳測試有問題的檔案才知道問題在於程式碼放錯地方,
請把程式碼放在一般模組執行就沒問題了,謝謝。

TOP

回復 9# samwang
太感謝了,成功了

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題