Board logo

標題: 匯入總表數據bug [打印本頁]

作者: waitto04    時間: 2022-5-28 23:43     標題: 匯入總表數據bug

各位大大好,初來乍到想詢問一個程式語言
小弟遇到狀況如下
1.將5個專案分別以複製方式貼上"經管表格" (OK)
2.貼上後再將C欄選取範圍匯入"總表" (不OK)
不OK的原因是...
當匯入過去後,全部數值會變成一樣的(求解)
因為寫的這個程式碼感覺很暴力,是否有比較簡單的寫法?(求解)

以下是程式碼,再麻煩各位協助除錯!!! 感恩感恩
Sub summary2()

    工作表1.Activate
   
    'If Sheet <> 專案 Then Exit Sub '非有專案的標題 不動作
    For j = 3 To 7
        For i = 2 To 6
        
           Range("B3:D58").ClearContents
           Sheets(j).Range("B3:D58").Copy Destination:=[b3]
   
               
            工作表7.Cells(4, i) = [c3]
            工作表7.Cells(5, i) = [c5]
            工作表7.Cells(6, i) = [c6]
            工作表7.Cells(7, i) = [c7]
            工作表7.Cells(8, i) = [c8]
            工作表7.Cells(9, i) = [c9]
            工作表7.Cells(10, i) = [c10]
            工作表7.Cells(11, i) = [c11]
            工作表7.Cells(12, i) = [c12]
            工作表7.Cells(13, i) = [c13]
            工作表7.Cells(14, i) = [c14]
            工作表7.Cells(15, i) = [c15]
            工作表7.Cells(16, i) = [c16]
            工作表7.Cells(17, i) = [c17]
            工作表7.Cells(18, i) = [c18]
            工作表7.Cells(19, i) = [c19]
            工作表7.Cells(20, i) = [c20]
            工作表7.Cells(21, i) = [c21]
            工作表7.Cells(22, i) = [c22]
            工作表7.Cells(23, i) = [c23]
            工作表7.Cells(24, i) = [c24]
            工作表7.Cells(25, i) = [c25]
            工作表7.Cells(26, i) = [c26]
            工作表7.Cells(27, i) = [c27]
            工作表7.Cells(28, i) = [c28]
            工作表7.Cells(29, i) = [c29]
            工作表7.Cells(30, i) = [c30]
            工作表7.Cells(31, i) = [c31]
            工作表7.Cells(32, i) = [c32]
            工作表7.Cells(33, i) = [c33]
            工作表7.Cells(34, i) = [c34]
            工作表7.Cells(35, i) = [c35]
            工作表7.Cells(36, i) = [c36]
            工作表7.Cells(37, i) = [c37]
            工作表7.Cells(38, i) = [c38]
            工作表7.Cells(39, i) = [c39]
            工作表7.Cells(40, i) = [c40]
            工作表7.Cells(41, i) = [c41]
            工作表7.Cells(42, i) = [c42]
            工作表7.Cells(43, i) = [c43]
            工作表7.Cells(44, i) = [c44]
            工作表7.Cells(45, i) = [c45]
            工作表7.Cells(46, i) = [c46]
            工作表7.Cells(47, i) = [c47]
            工作表7.Cells(48, i) = [c48]
            工作表7.Cells(49, i) = [c49]
            工作表7.Cells(50, i) = [c50]
            工作表7.Cells(51, i) = [c51]
            工作表7.Cells(52, i) = [c52]
            工作表7.Cells(53, i) = [c53]
            工作表7.Cells(54, i) = [c54]
            工作表7.Cells(55, i) = [c55]
            工作表7.Cells(56, i) = [c56]
            工作表7.Cells(57, i) = [c57]
            工作表7.Cells(58, i) = [c58]
            
           
         Next
    Next
   
    工作表7.Activate
   
   

End Sub
作者: samwang    時間: 2022-5-29 08:17

回復 1# waitto04

方便附上檔案,謝謝
作者: waitto04    時間: 2022-5-29 08:39

回復 2# samwang


    請參考!!  謝謝!!
    模組主要放在modul1
作者: waitto04    時間: 2022-5-29 09:12

寫出了另一個可以導入的
結果變成了B欄被跳過了...悲劇...

Sub test()

    工作表1.Activate
    Set i = 工作表1.Range("C5:C58")
        For j = 2 To 7
        
           Range("B358").ClearContents
           Sheets(j).Range("B358").Copy Destination:=[b3]
        
               
            工作表7.Cells(4, j) = [c3]
            工作表7.Cells(5, j) = [c5]
            工作表7.Cells(6, j) = [c6]
            工作表7.Cells(7, j) = [c7]
            工作表7.Cells(8, j) = [c8]
            工作表7.Cells(9, j) = [c9]
            工作表7.Cells(10, j) = [c10]
            工作表7.Cells(11, j) = [c11]
            工作表7.Cells(12, j) = [c12]
            工作表7.Cells(13, j) = [c13]
            工作表7.Cells(14, j) = [c14]
            工作表7.Cells(15, j) = [c15]
            工作表7.Cells(16, j) = [c16]
            工作表7.Cells(17, j) = [c17]
            工作表7.Cells(18, j) = [c18]
            工作表7.Cells(19, j) = [c19]
            工作表7.Cells(20, j) = [c20]
            工作表7.Cells(21, j) = [c21]
            工作表7.Cells(22, j) = [c22]
            工作表7.Cells(23, j) = [c23]
            工作表7.Cells(24, j) = [c24]
            工作表7.Cells(25, j) = [c25]
            工作表7.Cells(26, j) = [c26]
            工作表7.Cells(27, j) = [c27]
            工作表7.Cells(28, j) = [c28]
            工作表7.Cells(29, j) = [c29]
            工作表7.Cells(30, j) = [c30]
            工作表7.Cells(31, j) = [c31]
            工作表7.Cells(32, j) = [c32]
            工作表7.Cells(33, j) = [c33]
            工作表7.Cells(34, j) = [c34]
            工作表7.Cells(35, j) = [c35]
            工作表7.Cells(36, j) = [c36]
            工作表7.Cells(37, j) = [c37]
            工作表7.Cells(38, j) = [c38]
            工作表7.Cells(39, j) = [c39]
            工作表7.Cells(40, j) = [c40]
            工作表7.Cells(41, j) = [c41]
            工作表7.Cells(42, j) = [c42]
            工作表7.Cells(43, j) = [c43]
            工作表7.Cells(44, j) = [c44]
            工作表7.Cells(45, j) = [c45]
            工作表7.Cells(46, j) = [c46]
            工作表7.Cells(47, j) = [c47]
            工作表7.Cells(48, j) = [c48]
            工作表7.Cells(49, j) = [c49]
            工作表7.Cells(50, j) = [c50]
            工作表7.Cells(51, j) = [c51]
            工作表7.Cells(52, j) = [c52]
            工作表7.Cells(53, j) = [c53]
            工作表7.Cells(54, j) = [c54]
            工作表7.Cells(55, j) = [c55]
            工作表7.Cells(56, j) = [c56]
            工作表7.Cells(57, j) = [c57]
            工作表7.Cells(58, j) = [c58]
        
    Next
   
    工作表7.Activate
   
    'Columns("B:B").Delete
   
   

End Sub
作者: samwang    時間: 2022-5-29 09:43

回復 3# waitto04

請測試看看,謝謝

Sub test()
Dim Arr, xD, T$, i&, j%
Set xD = CreateObject("Scripting.Dictionary")
For Each sh In Sheets
    If InStr(sh.Name, "專案") Then
        With sh
            Arr = .[a1].CurrentRegion
            For i = 5 To UBound(Arr)
                If Arr(i, 3) = "" Then GoTo 90
                T = sh.Name & "|" & Arr(i, 1)
                xD(T) = Arr(i, 3)
90:         Next
        End With
    End If
Next
With Sheets(1)
    [b5:f58] = ""
    Arr = .[a1].CurrentRegion
    For i = 5 To UBound(Arr): For j = 2 To UBound(Arr, 2)
        T = Arr(4, j) & "|" & Arr(i, 1)
        Arr(i, j) = xD(T)
    Next: Next
    .[a1].Resize(UBound(Arr), UBound(Arr, 2)) = Arr
End With
End Sub
作者: waitto04    時間: 2022-5-29 09:59

回復 5# samwang


   
這個沒辦法作業...
沒有bug 但是總表沒有生成
作者: samwang    時間: 2022-5-29 10:14

回復  samwang


   
這個沒辦法作業...
沒有bug 但是總表沒有生成
waitto04 發表於 2022-5-29 09:59


我測試沒問題如附件,比對條件如照片(工作表名稱+項目)有符合就帶入數據,
請再測試看看,謝謝
作者: waitto04    時間: 2022-5-29 10:40

回復 7# samwang


    感謝你不厭其煩的測試!!
但沒辦法成功引入...反而原有的"經管表格"內容也被清空了!!
有定義作用頁面是在哪個嗎?
作者: samwang    時間: 2022-5-29 10:58

本帖最後由 samwang 於 2022-5-29 11:00 編輯
回復  samwang


    感謝你不厭其煩的測試!!
但沒辦法成功引入...反而原有的"經管表格"內容也被清空了 ...
waitto04 發表於 2022-5-29 10:40


反而原有的"經管表格"內容也被清空了
>> 對不起,清除總表資料[b5:f58] = "",前面少了. 請自行加入,我也把程式附上說明,請再自己確認一下,謝謝

Sub test()
Dim Arr, xD, T$, i&, j%
Set xD = CreateObject("Scripting.Dictionary")
For Each sh In Sheets
    If InStr(sh.Name, "專案") Then '工作名稱有專案
        With sh
            Arr = .[a1].CurrentRegion '資料裝入數組
            For i = 5 To UBound(Arr)
                If Arr(i, 3) = "" Then GoTo 90 '沒數據離開
                T = sh.Name & "|" & Arr(i, 1)  '條件:工作表名稱+項目
                xD(T) = Arr(i, 3)              '數據裝入字典
90:         Next
        End With
    End If
Next
With Sheets(1)
   .[b5:f58] = "" '清除原有數據資料,前面原來漏掉  .   ,請自行修改
    Arr = .[a1].CurrentRegion  '資料裝入數組
    For i = 5 To UBound(Arr): For j = 2 To UBound(Arr, 2)
        T = Arr(4, j) & "|" & Arr(i, 1) '條件:工作表名稱+項目
        Arr(i, j) = xD(T) '匯出字典數據
    Next: Next
    .[a1].Resize(UBound(Arr), UBound(Arr, 2)) = Arr '數據回填到excel
End With
End Sub
作者: waitto04    時間: 2022-5-29 11:11

回復 9# samwang


  有點想哭!
是因為版本不同的關係所以有所差別??
因為真的帶不出來...
作者: waitto04    時間: 2022-5-29 11:26

反而原有的"經管表格"內容也被清空了
>> 對不起,清除總表資料 = "",前面少了. 請自行加入,我也把程 ...
samwang 發表於 2022-5-29 10:58



    大師,想問個!!
如果以我原本的一長串的方式是可以帶的過去的
但現在卡住的有兩點
1.如同您寫的→ If InStr(sh.Name, "專案") Then '工作名稱有專案
   我也想僅sheet Name 有"專案" 才能作業!!
2.B的欄位都會被跳過

這兩個以原本寫的方式是需要再加什麼迴圈嗎?
有嘗試把你的語法帶入我的語法內,但是沒辦法順利成功

藥再麻煩大大了!
作者: samwang    時間: 2022-5-29 11:30

回復  samwang


  有點想哭!
是因為版本不同的關係所以有所差別??
因為真的帶不出來...
waitto04 發表於 2022-5-29 11:11


With sheets(1) 先設停止點,然後按F5執行,再確認字典有無資料,正確應該要有資料,請確認,謝謝
作者: samwang    時間: 2022-5-29 11:41

大師,想問個!!
如果以我原本的一長串的方式是可以帶的過去的
但現在卡住的有兩點
1.如同您寫 ...
waitto04 發表於 2022-5-29 11:26


2.B的欄位都會被跳過
>> 看你的程式,個分頁資料-->"經營表格"-->C欄資料--> 總表
看不懂你實際需求是要什麼,謝謝
作者: waitto04    時間: 2022-5-29 11:42

With sheets(1) 先設停止點,然後按F5執行,再確認字典有無資料,正確應該要有資料,請確認,謝謝
samwang 發表於 2022-5-29 11:30



   這個步驟經過確認,有東西可以帶出來唷!
作者: waitto04    時間: 2022-5-29 12:22

With sheets(1) 先設停止點,然後按F5執行,再確認字典有無資料,正確應該要有資料,請確認,謝謝
samwang 發表於 2022-5-29 11:30


剛剛又重複嘗試了一次,沒成功帶出...


2.B的欄位都會被跳過
>> 看你的程式,個分頁資料-->"經營表格"-->C欄資料--> 總表
看不懂你實際需求是 ...
samwang 發表於 2022-5-29 11:41



  設定是
"經管表格" C欄的資料可以帶入 "總表"依名稱填入對應的數據
但小弟剛接觸VBA不久,不知道為什麼,數據帶入了,但是B欄位沒有被引動的感覺,反而是從總表的C欄開始動作

不好意思,礙於權限關係!! 每小時只能回復三帖... 很緊張這種回復方式
作者: samwang    時間: 2022-5-29 19:30

本帖最後由 samwang 於 2022-5-29 19:32 編輯
剛剛又重複嘗試了一次,沒成功帶出...

  設定是
"經管表格" C欄的資料可以帶入 "總表"依名 ...
waitto04 發表於 2022-5-29 12:22


依據你的測試#14 有成功,#15又失敗,你又說字典有資料
所以有可能你的總表第4列(如附圖)被清除然後執行結果就會失敗
第4列的各分頁的工作名稱不能清除
因為那是字典匯出時比對的條件之一
請再測試看看,謝謝

另外,我寫的程式執行前不用清除舊資料,因為程式最後會自動清除(我有註解)
作者: waitto04    時間: 2022-5-29 23:26

依據你的測試#14 有成功,#15又失敗,你又說字典有資料
所以有可能你的總表第4列(如附圖)被清除然後執 ...
samwang 發表於 2022-5-29 19:30



所以有可能你的總表第4列(如附圖)被清除然後執行結果就會失敗
第4列的各分頁的工作名稱不能清除
因為那是字典匯出時比對的條件之一


大大 沒錯喔!!是有數據生成的!!
但有一件事情是,若這個編碼再下次會更新是不一樣的(非作業,實戰使用)
是不是變成要先將專案代碼先匯入總表內,再將後續的數值呼叫出來呢?
作者: samwang    時間: 2022-5-30 07:54

所以有可能你的總表第4列(如附圖)被清除然後執行結果就會失敗
第4列的各分頁的工作名稱不能清除
因 ...
waitto04 發表於 2022-5-29 23:26


但有一件事情是,若這個編碼再下次會更新是不一樣的(非作業,實戰使用)
是不是變成要先將專案代碼先匯入總表內,再將後續的數值呼叫出來呢?
>>對,先將各分頁的的名稱先匯至總表後再執行即可,謝謝
作者: waitto04    時間: 2022-5-30 13:13

但有一件事情是,若這個編碼再下次會更新是不一樣的(非作業,實戰使用)
是不是變成要先將專案代碼先匯 ...
samwang 發表於 2022-5-30 07:54



    感謝大大的解說
晚點我再測試看看!
作者: waitto04    時間: 2022-5-31 20:08

但有一件事情是,若這個編碼再下次會更新是不一樣的(非作業,實戰使用)
是不是變成要先將專案代碼先匯 ...
samwang 發表於 2022-5-30 07:54



    大大,感謝你!!
語法我已經都寫完了,也有結合先前的一些語法把專案案號進行匯入

另外我想問的是
語法裡面有提到

If Arr(i, 3) = "" Then GoTo 90 '沒數據離開
                T = sh.Name & "|" & Arr(i, 1)  '條件:工作表名稱+項目
                xD(T) = Arr(i, 3)              '數據裝入字典
90:         Next

1.90是自定義的變數嗎?
2.前次有提及到bug的部分,意思是先把表格內的資訊抓到類似字典庫裡
後續再由專案案號下去分配相對應的數值,意思是這樣對嗎?

太感謝你了,相信這個報表是很有貢獻的!!
作者: samwang    時間: 2022-5-31 21:34

大大,感謝你!!
語法我已經都寫完了,也有結合先前的一些語法把專案案號進行匯入

另外我想問 ...
waitto04 發表於 2022-5-31 20:08


1. 是
2. 對,一般流程如下,A數據-->  數組--> 字典,然後B數據-->數組-->取出字典數據處理變成需求
後學一些經驗,說明不好地方,請多包涵指教,謝謝
作者: waitto04    時間: 2022-5-31 22:41

1. 是
2. 對,一般流程如下,A數據-->  數組--> 字典,然後B數據-->數組-->取出字典數據處理變成需求
...
samwang 發表於 2022-5-31 21:34



    不會不會!!
大大語法寫得很精準了
只是小弟我剛踏入VBA語言裡,很多東西都還在摸索
能寫出暴力填空方式已經有點免強

可能中間有表達不清楚的地方多多包涵!!!

再次感謝大大!! 同時也分享給大家知道你的語法




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)