Board logo

標題: 抓取來源資料另存在目的不同sheet中 [打印本頁]

作者: rockrun    時間: 2014-7-2 12:20     標題: 抓取來源資料另存在目的不同sheet中

各位先進們好

小弟有幾個來源文件(檔名相同sheet內容不同),還有一個目的文件分成好幾個sheet(各sheet中各有對應來源檔),並指定輸入要的時間匯入

有個小問題
1.讀取來源檔以陣列讀取完後往下一列繼續不是往下一欄繼續,如果我的陣列類型是欄列都有的話。
2.讀取完要寫入目的檔時會寫入全部sheet(會在A1寫入日期B2寫入時間其餘空白) 而不是只寫入其中一個sheet內

請問各位先進該如何更改
  1. '每日報表匯入總日報表'

  2. Sub Test()
  3.     Dim sFile, wbThis As Workbook, wbSrc As Workbook
  4.     Dim lRowIndex As Long, lColIndex As Long, oDic As Object, aTime, sDate
  5.     Dim sType As String, lShIndex As Long, lTimeIndex As Long

  6.     Const lBlkWidth As Long = 13
  7.     Const lBlkHeight As Long = 40

  8.     sFile = Application.GetOpenFilename(fileFilter:="Excel Files (*.xls),*.xls", Title:="選擇日報表")
  9.     If StrComp(TypeName(sFile), "Boolean", vbTextCompare) = 0 Then Exit Sub

  10.     aTime = InputBox("輸入要記錄的時間" & "以逗號分開,不要空格)", , "00:00,08:00,16:00")
  11.     If aTime = "" Then Exit Sub
  12.     aTime = Split(aTime, ",")

  13.     Application.ScreenUpdating = False
  14.     Set wbThis = ThisWorkbook
  15.     Set wbSrc = Workbooks.Open(Filename:=sFile, ReadOnly:=True)
  16.     Set oDic = CreateObject("Scripting.Dictionary")

  17.     With wbSrc.Sheets(1)
  18.         sDate = .Range("TitleDate").Value
  19.         For lRowIndex = .[A8].Row To .UsedRange.Rows.Count Step lBlkHeight
  20.              For lColIndex = 2 To lBlkWidth
  21.                 sType = .Cells(lRowIndex, lColIndex).Value
  22.                     If sType <> "" And Left(sType, 1) <> "@" Then
  23.                         If Not oDic.exists(sType) Then
  24.                         Set oDic(sType) = CreateObject("scripting.dictionary")
  25.                         For Each x In .Cells(lRowIndex, 1).Offset(4).Resize(24)
  26.                             If x.Value <> "" Then oDic(sType)(x.Text) = x.Offset(, lColIndex - 1).Value
  27.                         Next
  28.                     End If
  29.                 End If
  30.             Next
  31.         Next
  32.     End With
  33.     wbSrc.Close
  34.     Application.ScreenUpdating = True

  35.     With wbThis
  36.         For lShIndex = 1 To .Sheets.Count
  37.             With .Sheets(lShIndex)
  38.                 lRowIndex = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
  39.                     .Cells(lRowIndex, "A").Value = sDate
  40.                     .Cells(lRowIndex, "B").Resize(UBound(aTime) + 1) = Application.Transpose(aTime)
  41.                 For lColIndex = 3 To .[C4].End(xlToRight).Column
  42.                     If oDic.exists(.Cells(4, lColIndex).Value) Then
  43.                         For lTimeIndex = 0 To UBound(aTime)
  44.                             .Cells(lRowIndex, lColIndex).Offset(lTimeIndex).Value = oDic(.Cells(4, lColIndex).Value)(aTime(lTimeIndex))
  45.                         Next
  46.                         oDic(.Cells(4, lColIndex).Value).RemoveAll
  47.                         oDic.Remove .Cells(4, lColIndex).Value
  48.                     End If
  49.                 Next
  50.             End With
  51.         Next
  52.     End With

  53.     MsgBox "目標檔找不到欄位資料: " & vbCrLf & Join(oDic.keys, ", ")
  54.     'cleanup
  55.     For Each x In oDic
  56.         oDic(x).RemoveAll
  57.         oDic.RemoveAll
  58.     Next
  59. End Sub
複製代碼





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