Board logo

標題: [分享] 銷售管理完成版 [打印本頁]

作者: yagami12th    時間: 2012-1-3 10:29     標題: 分享(初學) 前幾天看書寫的銷售管理小程式

剛學vba不久,找了一些書來練習,其中一個範例,蠻實用的東西,雖然很簡單,裡面有打詳細的註解,應該很清楚。

檔案如下:
[attach]9010[/attach]
作者: brabus    時間: 2012-11-15 14:57

銷售資料的顧客欄
他是可下拉變動的
是否該選完後固定
否則會不會被人動到
就找不回來了
作者: kai6929    時間: 2012-11-19 10:05     標題: 銷售管理完成版

各位大師
                  分享不錯的巨集設計,純交流各位瞧瞧[attach]13194[/attach]
作者: c_c_lai    時間: 2012-11-19 11:55

回復 1# kai6929
  1. Private Sub myComboBox_Change()
  2.      Call 製作請款書(myForm.myComboBox.Text)
  3. End Sub
複製代碼
如果修改成.... ,視覺感受會比較佳!
  1. Private Sub myComboBox_Change()
  2.     myForm.Hide
  3.     Call 製作請款書(myForm.myComboBox.Text)
  4. End Sub
複製代碼

作者: GBKEE    時間: 2012-11-19 16:47

回復 1# kai6929
不錯的分享,但同 一顧客選第二次時,在新增工作表的命名會錯誤
純參考;表單的程式碼
  1. Private Sub myComboBox_Change()
  2.    ' Call 製作請款書(myComboBox.Text)
  3.      製作請款書 '(myComboBox.Text)
  4. End Sub
  5. Private Sub UserForm_Initialize()
  6.     'myForm.myComboBox.List = Array("A公司", "B建設公司", "C電器公司", "D不動產公司") '
  7.     '下列程式碼 可根據 "銷售資料" B欄的顧客 建立 myComboBox 的 List
  8.     With Sheets("銷售資料")
  9.         .Range("B3", .[B3].End(xlDown)).AdvancedFilter xlFilterCopy, , .Cells(1, Columns.Count), True
  10.         'AdvancedFilter 進階篩選 不重複的顧客名單到.Cells(1, Columns.Count)最後一欄
  11.         With .Range(.Cells(2, Columns.Count), .Cells(2, Columns.Count).End(xlDown)) '第2列到最後有資料的列
  12.             myComboBox.List = .Value
  13.             .EntireColumn.Clear
  14.         End With
  15.     End With
  16. End Sub
  17. Private Sub 製作請款書()
  18.      Application.ScreenUpdating = False
  19.      With Sheets("銷售資料")
  20.         .Range("A3").AutoFilter 2, myComboBox                           '自動篩選 B欄 myComboBox(顧客)
  21.         .Columns(2).Hidden = True                                       '隱藏B欄
  22.         .Range("A3").CurrentRegion.Copy                                 '複製篩選出的 日期,商品,單價,數量,金額
  23.         .AutoFilterMode = False
  24.         With Sheets("請款書雛形")
  25.             .Range("A6") = myComboBox
  26.             .Range("A11").CurrentRegion = ""                            '清除舊有資料
  27.             .Range("A11").PasteSpecial xlPasteValuesAndNumberFormats    '貼上 值及公式
  28.         End With
  29.         Application.CutCopyMode = False                                 '取消複製的虛線
  30.         .Columns(2).Hidden = False                                      '取消隱藏B欄
  31.      End With
  32.      Application.ScreenUpdating = True
  33. End Sub
複製代碼

作者: c_c_lai    時間: 2012-11-20 07:35

本帖最後由 c_c_lai 於 2012-11-20 07:38 編輯

回復 3# GBKEE
回復 1# kai6929
的確是個蠻不錯的範例分享,尤其是 AdvancedFilter 進階篩選的實務應用,
其細膩地處理與表達均十分精湛,謹此感謝 GBKEE 的線上指導。
目前,我將 #3 的程式略為修改成:如果清單 (ComboBox) 內工作表業已存在,
則再次將它開啟,否則將工作表「請款書雛形」複製到所有工作表的最後。
如此,才不致因重覆開啟而導致的錯誤中斷執行 (GBKEE 的語法是直接寫入到「請款書雛形」)。
(#1 的原本用意,可能是想保留原始母表,而於選單時再另行新增「請款書」)
  1. Private Sub 製作請款書()
  2.     Dim cts As Integer, existed As Boolean
  3.    
  4.     Application.ScreenUpdating = False
  5.    
  6.     existed = False
  7.     For cts = 3 To Worksheets.Count
  8.         If Sheets(cts).Name = myComboBox Then existed = True: Exit For
  9.     Next cts
  10.    
  11.     '  將工作表「請款書雛形」複製到所有工作表的最後
  12.     If existed = False Then Worksheets("請款書雛形").Copy After:=Worksheets(Worksheets.Count): cts = Worksheets.Count
  13.         
  14.     With Sheets("銷售資料")
  15.         .Range("A3").AutoFilter 2, myComboBox                           '  自動篩選 B 欄 myComboBox(顧客)
  16.         .Columns(2).Hidden = True                                       '  隱藏B欄
  17.         .Range("A3").CurrentRegion.Copy                                 '  複製篩選出的 日期,商品,單價,數量,金額
  18.         .AutoFilterMode = False
  19.          
  20.         With Worksheets(cts)
  21.             .Name = myComboBox                                          '  設定工作表名稱
  22.             .Range("A6") = myComboBox
  23.             .Range("A11").CurrentRegion = ""                            '  清除舊有資料
  24.             .Range("A11").PasteSpecial xlPasteValuesAndNumberFormats    '  貼上 值及公式
  25.         End With
  26.         Application.CutCopyMode = False                                 '  取消複製的虛線
  27.         .Columns(2).Hidden = False                                      '  取消隱藏B欄
  28.     End With
  29.    
  30.     Application.ScreenUpdating = True
  31. End Sub
複製代碼
[attach]13200[/attach]
作者: GBKEE    時間: 2012-11-26 16:28

回復 22# c_c_lai
工作表[銷售資料][請款書雛形]如有移動到第2工作表以後會有錯誤發生
建議修改如下:
  1. Private Sub 製作請款書()
  2.     Dim cts As Integer, existed As Boolean
  3.     Application.ScreenUpdating = False
  4.     existed = False
  5.     For cts = 1 To Worksheets.Count
  6.         If Sheets(cts).Name = myComboBox Then existed = True: Exit For
  7.     Next cts
  8.     '  將工作表「請款書雛形」複製到所有工作表的最後
  9.     If existed = False Then
  10.         Worksheets("請款書雛形").Copy After:=Worksheets(Worksheets.Count)
  11.         ActiveSheet.Name = myComboBox
  12.     End If
  13.     With Sheets("銷售資料")
  14.         .Range("A3").AutoFilter 2, myComboBox                           '  自動篩選 B 欄 myComboBox(顧客)
  15.         .Columns(2).Hidden = True                                       '  隱藏B欄
  16.         .Range("A3").CurrentRegion.Copy                                 '  複製篩選出的 日期,商品,單價,數量,金額
  17.         .AutoFilterMode = False
  18.         With Worksheets(myComboBox.Value)
  19.            ' .Name = myComboBox                                          '  設定工作表名稱
  20.             .Range("A6") = myComboBox
  21.             .Range("A11").CurrentRegion = ""                            '  清除舊有資料
  22.             .Range("A11").PasteSpecial xlPasteValuesAndNumberFormats    '  貼上 值及公式
  23.         End With
  24.         Application.CutCopyMode = False                                 '  取消複製的虛線
  25.         .Columns(2).Hidden = False                                      '  取消隱藏B欄
  26.     End With
  27.     Application.ScreenUpdating = True
  28. End Sub
複製代碼

作者: c_c_lai    時間: 2012-11-26 20:32

回復 25# GBKEE
我已經將 Code 如您的語法修正了,我覺得用 myComboBox.Value 來取代 cts 會更貼切,謝謝您指導!
  1.     '  將工作表「請款書雛形」複製到所有工作表的最後
  2.     If existed = False Then Worksheets("請款書雛形").Copy After:= Worksheets
  3.                             Worksheets.Count): [color=Red]ActiveSheet.Name = myComboBox[/color]
  4.     With Sheets("銷售資料")
  5.         .Range("A3").AutoFilter 2, myComboBox  ' 自動篩選B欄myComboBox(顧客)
  6.         .Columns(2).Hidden = True              '  隱藏B欄
  7.         .Range("A3").CurrentRegion.Copy   ' 複製篩選出的日期,商品,單價,數量,金額
  8.         .AutoFilterMode = False
  9.          
  10.         With Worksheets([color=Red]myComboBox.Value[/color])
  11.            [color=Red] '  .Name = myComboBox  [/color]            '  設定工作表名稱
複製代碼





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