返回列表 上一主題 發帖

[發問] 接續存資料的問題(已解決)

[發問] 接續存資料的問題(已解決)

本帖最後由 jesscc 於 2011-5-15 21:18 編輯

我又有問題要打擾各位了!
因為操作過程稍微麻煩,所以在壓縮檔內另附說明
在此先簡單說明,問題所在就是:在同一欄位從舊資料的尾端,接續貼新資料。

Test.rar (49.05 KB)
Jess

回復 1# jesscc
  1. Sub Ex()
  2.     Dim Wo As Workbook, Sh As Worksheet, Rng As Range
  3.     For Each Wo In Workbooks
  4.         If Wo.Name <> "SPECforMRPtest.xls" Then
  5.             For Each Sh In Wo.Sheets
  6.                 With Workbooks("SPECforMRPtest.xls").Sheets("MRP").Cells(Rows.Count, "aw").End(xlUp).Offset(1)
  7.                     Set Rng = Sh.Range(Sh.[d7], Sh.[d7].End(xlDown))
  8.                     .Resize(Rng.Count, 1) = Rng.Value
  9.                     .Offset(, 1).Resize(Rng.Count, 1) = Rng.Offset(, 4).Value
  10.                 End With
  11.             Next
  12.         End If
  13.     Next
  14. End Sub
複製代碼

TOP

謝謝 GBKEE 大大 幫我解決問題。
我搞了一下午,剛剛也才找到問題所在了,只要把 Ay2() 堛漕滬 "s" 全部換成另一個代號就好了。
Jess

TOP

回復 3# jesscc
只要把 Ay2() 堛漕滬 "s" 全部換成另一個代號就好了。  這觀念錯誤
Dim Ay2()宣告為動態陣列
ReDim Preserve Ay2(s) 繼承前面的 S 會有26個空白元素
Ay2(s) =Array(Cells(j, ar2(0)).Value, Cells(j, ar2(1)).Value)  是一維陣列
所一資料型態不符合
將S設為0 之後 -> Ay2()裡的元素資料型態才會一致
  1. '取出 Metal 出貨明細
  2. aw.Activate
  3. Sheets("Metal").Activate
  4. s = 0  '    請在程式碼加上這行     
  5. Dim Ay2()
  6. ar2 = Array("D", "H")
  7. For j = 7 To Cells(Rows.Count, 2).End(3).Row
  8.     ReDim Preserve Ay2(s)
  9.     Ay2(s) = Array(Cells(j, ar2(0)).Value, Cells(j, ar2(1)).Value)
  10.     s = s + 1
  11. Next
  12. Workbooks("SPECforMRPtest.xls").Activate
  13. With Sheets("MRP")
  14.    .Cells(.Rows.Count, 49).End(xlUp).Offset(1, 0).Resize(s, 2) = Application.Transpose(Application.Transpose(Ay2))
  15. End With   
  16. End Sub
複製代碼

TOP

GBKEE大大好:
"ReDim Preserve Ay2(s) 繼承前面的 S 會有26個空白元素"

這句話我搞不太懂是什麼意思,我是這樣猜的:
因為Ay1()的 S 已經存入了26筆資料,所以Ay2()同樣以 S 為代號,就會從第27開始存資料,因此Ay1()和Ay2()的資料形態就會不同,是這個意思嗎?

換一個代號和插入s = 0 這兩者又有什麼差別呢?感覺好像都有歸零的意思嘛。
對我這種初學者來說,這種問題已經很深奧了><
Jess

TOP

本帖最後由 GBKEE 於 2011-5-17 07:50 編輯

回復 5# jesscc
換一個代號和插入s = 0 這兩者又有什麼差別呢?感覺好像都有歸零的意思嘛   沒有差別但就是要歸零.

'取出 Etrusion 出貨明細
Sheets("Etrusion").Activate
Dim Ay1()   
''
         ReDim Preserve Ay1(s)
       Ay1(s) = Array(Cells(i, ar1(0)).Value, Cells(i, ar1(1)).Value)
          s = s + 1
      Next
'
'取出 Metal 出貨明細
程式進行到此  s=26
Dim Ay2()   
ar2 = Array("D", "H")
For j = 7 To Cells(Rows.Count, 2).End(3).Row         
       ReDim Preserve Ay2(s)                                      '  當 j=7 時 Ay配置26個無資料的儲存空間
       Ay2(s) = Array(Cells(j, ar2(0)).Value, Cells(j, ar2(1)).Value)  'Ay的第26儲存空間資料為一維陣列  ........(S=S+1)      
       s = s + 1
      Next
    Workbooks("SPECforMRPtest.xls").Activate
        With Sheets("MRP")
        .Cells(.Rows.Count, 49).End(xlUp).Offset(1, 0).Resize(s, 2) = Application.Transpose(Application.Transpose(Ay2))
'因此Ay1()和Ay2()的資料形態就會不同,是這個意思嗎?   不是的
'最終了 Ay2整個陣列裡參雜空白元素及一維陣列 資料的型態不一致 無法放在  .Cells(.Rows.Count, 49).End(xlUp).Offset(1, 0).Resize(s, 2)
    End With

TOP

        靜思自在 : 口說一句好話,如口出蓮花;口說一句壞話如口吐毒蛇。
返回列表 上一主題