返回列表 上一主題 發帖

[發問] 請問要如何簡化/更改VBA, 完成往後的Order呢?

回復 8# boomf2


        Sub 自動新增日工作簿更新()

本檔名 = ActiveWorkbook.Name
本路徑 = ActiveWorkbook.Path


'***********************************************找出a店001位置***********************************
For aaa = 1 To 20
On Error Resume Next
店名欄位 = Sheets("Total").Rows(aaa).Find(What:="A店001", LookIn:=xlValues, SearchDirection:=xlPrevious).Column
On Error GoTo 0
Next

For aaa = 1 To 店名欄位
On Error Resume Next
店名列位 = Sheets("Total").Columns(aaa).Find(What:="A店001", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Row
On Error GoTo 0
Next
'***********************************************找出a店001位置***********************************




'***********************************************找出最後一間店位置***********************************
店名最後欄位 = Sheets("Total").Rows(店名列位).Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column
'***********************************************找出最後一間店位置***********************************




'***********************************************找出產品數量***********************************
產品code欄 = Sheets("Total").Rows(店名列位).Find(What:="產品CODE", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column

產品code列 = Sheets("Total").Columns(產品code欄).Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row

產品總數 = 產品code列 - 店名列位
'***********************************************找出產品數量***********************************


'***********************************************讓之後迴圈用***********************************
產品起始列定位 = 店名列位 + 1
產品結束列定位 = 產品code列
'***********************************************讓之後迴圈用***********************************

''*************************其他資訊*************************
日期暫存 = Workbooks(本檔名).Sheets("Total").[G1]

''*************************其他資訊*************************





'*************************流水號迴圈起始值*************************
流水 = 1
'*************************流水號迴圈起始值*************************

While 店名欄位 < 店名最後欄位 + 1

If Workbooks(本檔名).Sheets("Total").Cells(7, 店名欄位) = "K" Then '假如是K就做
   
    店名 = Workbooks(本檔名).Sheets("Total").Cells(店名列位, 店名欄位)


    出檔號 = "order" & 流水
    Set nX = Workbooks.Add


    Application.DisplayAlerts = False
   
    If ActiveWorkbook.Sheets.Count = 3 Then
    ActiveWorkbook.Sheets(3).Delete
    End If
    If ActiveWorkbook.Sheets.Count = 2 Then
    ActiveWorkbook.Sheets(2).Delete
    End If
    ActiveWorkbook.Sheets(1).Name = 店名
   

    產品運算列 = 產品起始列定位
    產品停算列 = 產品結束列定位

        orderrow = 1
        While 產品運算列 < 產品停算列 + 1
          If Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位) <> "" Then
   
              ActiveWorkbook.Sheets(1).Cells(orderrow, 1) = "DK"
              ActiveWorkbook.Sheets(1).Cells(orderrow, 3) = 日期暫存
              ActiveWorkbook.Sheets(1).Cells(orderrow, 4) = "DN"
               ActiveWorkbook.Sheets(1).Cells(orderrow, 5) = "B99"
              ActiveWorkbook.Sheets(1).Cells(orderrow, 6) = "店名"
               ActiveWorkbook.Sheets(1).Cells(orderrow, 7) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄).Value
              ActiveWorkbook.Sheets(1).Cells(orderrow, 8) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄 + 3).Value
              ActiveWorkbook.Sheets(1).Cells(orderrow, 9) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位)
               orderrow = orderrow + 1
         End If
   
   
     產品運算列 = 產品運算列 + 1
        Wend

    nX.SaveAs ThisWorkbook.Path & "/" & 出檔號 & 店名
    nX.Close
   



End If  '假如是K 結束

流水 = 流水 + 1
店名欄位 = 店名欄位 + 1
Wend


End Sub


K值才會做
修正工作表數量刪除

TOP

  1. Sub 自動新增日工作簿更新()


  2. Application.DisplayAlerts = False
  3. Application.ScreenUpdating = False
  4. 本檔名 = ActiveWorkbook.Name
  5. 本路徑 = ActiveWorkbook.Path

  6. 店名開頭索引 = "A店001"

  7. '***********************************************找出a店001位置***********************************
  8. For aaa = 1 To 20
  9. On Error Resume Next
  10. 店名欄位 = Sheets("Total").Rows(aaa).Find(What:=店名開頭索引, LookIn:=xlValues, SearchDirection:=xlNext).Column
  11. On Error GoTo 0
  12. Next

  13. For aaa = 1 To 店名欄位
  14. On Error Resume Next
  15. 店名列位 = Sheets("Total").Columns(aaa).Find(What:=店名開頭索引, LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlNext).Row
  16. On Error GoTo 0
  17. Next
  18. '***********************************************找出a店001位置***********************************




  19. '***********************************************找出最後一間店位置***********************************
  20. 店名最後欄位 = Sheets("Total").Rows(店名列位).Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column
  21. '***********************************************找出最後一間店位置***********************************




  22. '***********************************************找出產品數量***********************************
  23. 產品code欄 = Sheets("Total").Rows(店名列位).Find(What:="產品CODE", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column

  24. 產品code列 = Sheets("Total").Columns(產品code欄).Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row

  25. 產品總數 = 產品code列 - 店名列位
  26. '***********************************************找出產品數量***********************************


  27. '***********************************************讓之後迴圈用***********************************
  28. 產品起始列定位 = 店名列位 + 1
  29. 產品結束列定位 = 產品code列
  30. '***********************************************讓之後迴圈用***********************************

  31. ''*************************其他資訊*************************
  32. 日期暫存 = Workbooks(本檔名).Sheets("Total").[G1]
  33. 店家新增數量 = 0
  34. 店家新增店名 = "新增店名:"
  35. ''*************************其他資訊*************************





  36. '*************************流水號迴圈起始值*************************
  37. 流水 = 1
  38. '*************************流水號迴圈起始值*************************

  39. While 店名欄位 < 店名最後欄位 + 1
  40. If UCase(Workbooks(本檔名).Sheets("Total").Cells(7, 店名欄位)) = "K" Then    '假如是k值 就不會新增


  41.     店名 = Workbooks(本檔名).Sheets("Total").Cells(店名列位, 店名欄位)
  42.     店家新增店名 = 店家新增店名 & vbCrLf & 店名
  43.    
  44.     出檔號 = "order" & 流水
  45.     Set nX = Workbooks.Add


  46.     Application.DisplayAlerts = False
  47.    
  48.     If ActiveWorkbook.Sheets.Count = 3 Then
  49.     ActiveWorkbook.Sheets(3).Delete
  50.     End If
  51.     If ActiveWorkbook.Sheets.Count = 2 Then
  52.     ActiveWorkbook.Sheets(2).Delete
  53.     End If
  54.     ActiveWorkbook.Sheets(1).Name = 店名


  55.     產品運算列 = 產品起始列定位
  56.     產品停算列 = 產品結束列定位

  57.     orderrow = 1
  58.     While 產品運算列 < 產品停算列 + 1
  59.         If Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位) <> "" Then
  60.    
  61.             ActiveWorkbook.Sheets(1).Cells(orderrow, 1) = "DK"
  62.             ActiveWorkbook.Sheets(1).Cells(orderrow, 3) = 日期暫存
  63.             ActiveWorkbook.Sheets(1).Cells(orderrow, 4) = "DN"
  64.             ActiveWorkbook.Sheets(1).Cells(orderrow, 5) = "B99"
  65.             ActiveWorkbook.Sheets(1).Cells(orderrow, 6) = "店名"
  66.             ActiveWorkbook.Sheets(1).Cells(orderrow, 7) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄).Value
  67.             ActiveWorkbook.Sheets(1).Cells(orderrow, 8) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄 + 3).Value
  68.             ActiveWorkbook.Sheets(1).Cells(orderrow, 9) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位)
  69.             orderrow = orderrow + 1
  70.         End If
  71.    
  72.    
  73.     產品運算列 = 產品運算列 + 1
  74.     Wend

  75.     nX.SaveAs ThisWorkbook.Path & "/" & 出檔號 & 店名
  76.     nX.Close
  77.     店家新增數量 = 店家新增數量 + 1
  78. End If

  79. 流水 = 流水 + 1
  80. 店名欄位 = 店名欄位 + 1
  81. Wend


  82. MsgBox "共" & 店家新增數量 & "店家資料新增" & vbCrLf & 店家新增店名
  83. End Sub
複製代碼
'修正刪除工作表
'新增判斷K值
'反過來搜尋起始點"A店001"的位置
'新增建立筆數與店家名稱

TOP

抱歉有點洗文章了

如果說 你的檔名 不要有order1的話

在saveas 那個位置,把   & 出檔號    給刪掉

下面這樣
  1. Sub 自動新增日工作簿更新()


  2. Application.DisplayAlerts = False
  3. Application.ScreenUpdating = False
  4. 本檔名 = ActiveWorkbook.Name
  5. 本路徑 = ActiveWorkbook.Path

  6. 店名開頭索引 = "A店001"

  7. '***********************************************找出a店001位置***********************************
  8. For aaa = 1 To 20
  9. On Error Resume Next
  10. 店名欄位 = Sheets("Total").Rows(aaa).Find(What:=店名開頭索引, LookIn:=xlValues, SearchDirection:=xlNext).Column
  11. On Error GoTo 0
  12. Next

  13. For aaa = 1 To 店名欄位
  14. On Error Resume Next
  15. 店名列位 = Sheets("Total").Columns(aaa).Find(What:=店名開頭索引, LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlNext).Row
  16. On Error GoTo 0
  17. Next
  18. '***********************************************找出a店001位置***********************************




  19. '***********************************************找出最後一間店位置***********************************
  20. 店名最後欄位 = Sheets("Total").Rows(店名列位).Find(What:="*", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column
  21. '***********************************************找出最後一間店位置***********************************




  22. '***********************************************找出產品數量***********************************
  23. 產品code欄 = Sheets("Total").Rows(店名列位).Find(What:="產品CODE", LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlPrevious).Column

  24. 產品code列 = Sheets("Total").Columns(產品code欄).Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious).Row

  25. 產品總數 = 產品code列 - 店名列位
  26. '***********************************************找出產品數量***********************************


  27. '***********************************************讓之後迴圈用***********************************
  28. 產品起始列定位 = 店名列位 + 1
  29. 產品結束列定位 = 產品code列
  30. '***********************************************讓之後迴圈用***********************************

  31. ''*************************其他資訊*************************
  32. 日期暫存 = Workbooks(本檔名).Sheets("Total").[G1]
  33. 店家新增數量 = 0
  34. 店家新增店名 = "新增店名:"
  35. ''*************************其他資訊*************************





  36. '*************************流水號迴圈起始值*************************
  37. 流水 = 1
  38. '*************************流水號迴圈起始值*************************

  39. While 店名欄位 < 店名最後欄位 + 1
  40. If UCase(Workbooks(本檔名).Sheets("Total").Cells(7, 店名欄位)) = "K" Then    '假如是k值 就不會新增


  41.     店名 = Workbooks(本檔名).Sheets("Total").Cells(店名列位, 店名欄位)
  42.     店家新增店名 = 店家新增店名 & vbCrLf & 店名
  43.    
  44.     出檔號 = "order" & 流水
  45.     Set nX = Workbooks.Add


  46.     Application.DisplayAlerts = False
  47.    
  48.     If ActiveWorkbook.Sheets.Count = 3 Then
  49.     ActiveWorkbook.Sheets(3).Delete
  50.     End If
  51.     If ActiveWorkbook.Sheets.Count = 2 Then
  52.     ActiveWorkbook.Sheets(2).Delete
  53.     End If
  54.     ActiveWorkbook.Sheets(1).Name = 店名


  55.     產品運算列 = 產品起始列定位
  56.     產品停算列 = 產品結束列定位

  57.     orderrow = 1
  58.     While 產品運算列 < 產品停算列 + 1
  59.         If Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位) <> "" Then
  60.    
  61.             ActiveWorkbook.Sheets(1).Cells(orderrow, 1) = "DK"
  62.             ActiveWorkbook.Sheets(1).Cells(orderrow, 3) = 日期暫存
  63.             ActiveWorkbook.Sheets(1).Cells(orderrow, 4) = "DN"
  64.             ActiveWorkbook.Sheets(1).Cells(orderrow, 5) = "B99"
  65.             ActiveWorkbook.Sheets(1).Cells(orderrow, 6) = "店名"
  66.             ActiveWorkbook.Sheets(1).Cells(orderrow, 7) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄).Value
  67.             ActiveWorkbook.Sheets(1).Cells(orderrow, 8) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 產品code欄 + 3).Value
  68.             ActiveWorkbook.Sheets(1).Cells(orderrow, 9) = Workbooks(本檔名).Sheets("Total").Cells(產品運算列, 店名欄位)
  69.             orderrow = orderrow + 1
  70.         End If
  71.    
  72.    
  73.     產品運算列 = 產品運算列 + 1
  74.     Wend

  75.     nX.SaveAs ThisWorkbook.Path & "/" & 店名
  76.     nX.Close
  77.     店家新增數量 = 店家新增數量 + 1
  78. End If

  79. 流水 = 流水 + 1
  80. 店名欄位 = 店名欄位 + 1
  81. Wend


  82. MsgBox "共" & 店家新增數量 & "店家資料新增" & vbCrLf & 店家新增店名
  83. End Sub
複製代碼

TOP

回復 10# 准提部林


ThanksBros

我已經再加進了很多東東
這次學會了很快的方法去處理和控制資料範圍!
,謝謝指導=] !

TOP

        靜思自在 : 謊言像一朵盛開的鮮花,外表美麗,生命短暫。
返回列表 上一主題