返回列表 上一主題 發帖

[發問] 用二維陣列,轉不出來資料

[發問] 用二維陣列,轉不出來資料

本帖最後由 jesscc 於 2011-6-5 23:08 編輯

上次承蒙前輩教了我用二維陣列轉多欄位的資料,最近試作了一個檔案,可是資料轉不出來,不知哪裡出了問題,能請各位前輩幫忙看一下嗎?

我的工作是這樣的:
1.在 Test.xlsm 中的 Sheets("AA") 按下按鈕"POR",會自動轉存成一份 "日期"+"已出貨.xlsx" 檔,格式跟原來的 Test.xlsm 是一模一樣的,但沒有任何資料。
2.接著程式會把 Test.xlsm 中 AA、BB、CC 三個工作頁的 B 欄位中只要有 "v" 及 "*" 的那一列資料分別存入空白的 "日期"+"已出貨.xlsx" 檔

Test.rar (59.69 KB)
Jess

回復 1# jesscc
  1. Sub ContainerDetails()
  2. Set swb = ThisWorkbook
  3.    mypath = "C:\Documents and Settings\Administrator\桌面\"
  4.    myfile = Format(Date, "emmdd") & "已出貨.xlsx"
  5.    swb.Sheets(Array("AA", "BB", "CC")).Copy
  6.    Set wb = ActiveWorkbook
  7.    wb.Sheets("AA").Shapes.Range(Array("CommandButton6")).Delete
  8.    wb.Sheets("AA").Range("B7:J500").ClearContents
  9.    wb.Sheets("BB").Range("B7:J500").ClearContents
  10.    wb.Sheets("CC").Range("B7:J500").ClearContents

  11. For Each Sh In swb.Sheets(Array("AA", "BB", "CC"))
  12. Dim Ay()
  13. With Sh
  14. For i = 7 To .Cells(.Rows.Count, 2).End(xlUp).Row
  15.       If .Range("B" & i) = "v" Or .Range("B" & i) = "*" Then
  16.       ReDim Preserve Ay(s)
  17.       Ay(s) = .Range("B" & i).Resize(, 10).Value
  18.       s = s + 1
  19.       End If
  20. Next
  21. wb.Sheets(.Name).[B7].Resize(s, 10) = Application.Transpose(Application.Transpose(Ay))
  22. Erase Ay
  23. s = 0
  24. End With
  25. Next
  26. wb.SaveAs mypath & myfile
  27. End Sub
複製代碼
學海無涯_不恥下問

TOP

好像不需要用到二維陣列,是我想太多了。

不過,Hsieh大大,剛剛試了一下發現,如果在B欄位都沒有標記 "v" 或 "*" 的情形下,沒辦法另存出正確的活頁簿檔名(我的想法是,至少它應該會存成一個空白無資料的新活頁簿),而且會在這一行出現偵錯
wb.Sheets(.Name).[B7].Resize(s, 10) = Application.Transpose(Application.Transpose(Ay))
Jess

TOP

回復 3# jesscc


   if s>0 then  wb.Sheets(.Name).[B7].Resize(s, 10) = Application.Transpose(Application.Transpose(Ay))
學海無涯_不恥下問

TOP

原來只要檢查陣列中有無存入資料即可。
感謝 Hsieh 大再一次的幫忙,祝福你端午節愉快!
Jess

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題