2018年2月1日 星期四

VBA在管理系統的運用實例(一)

這個月過年,新年初始,小卒也順應一下新年新氣象,以小卒的程式碼呈現EXCEL VBA在管理系統的運用。一直以來,都有客戶或網友詢問系統的程式碼,VBA高手在民間,但我們別緻之處在於系統中的架構設計,再輔以對應的VBA程式。值得很驕傲的對設計師說,辛苦了!憑著對產業的基本了解,靠著與客戶的耐心溝通,利用對程式設計的扎實功底,小卒工作室真的是做了很多行業的管理系統,傳統的製造業、新興的電子業、餐飲業、蓄牧業,從菜市場到日常百貨商品,還涉獵到監獄,也走進慈善團體,不可思義。所以這次開始關於程式的貼文,其一是對客戶要求的回應;其二,希望有同好交流,對VBA程式有興趣者,可將小卒程式碼擴展、發揮到更多的用途。
小卒可以說是從YAHOO的知識+開始,一步一腳印,從一無所知的找單方式,到每天趴在電腦前刷新提問區,希望可以第一個回答到關於系統的提問;從免費設定EXCEL函數開始,到第一筆客戶主動匯入的茶水費;從VB+ACCESS轉戰至EXCEL+VBA入門,到每天都有系統新程式的發展;從開放的系統規格,到不付款的客戶;藉由知識+內同好尋找答案,給答題者匯去小小一筆感謝費,到聯手會計專長的高手,一起合作客戶的案子;從操作介面的設計步步完善,到定調以量身打造為系統設計的主軸。
記得1112點的一個晚上,曾是客戶的上海台商發來訊息,他在找一個計算的設定,很急!當下我們也是無解,馬上到知識+,竟意外找到知識長出來救火。一路走來,感謝知識長、worlon、老年人、大流士等等。
也是三更半夜響起的電話鈴聲,夜班的客戶在操作系統出現問題,沒有系統全部工作停擺,網路連起在遠方的小卒,當然是排除問題,讓驚訝的客戶滿意而嘆。
也有客戶曾經好奇的問,你們寫這麼多CASE,應該有10多位設計師吧;
還曾收到微軟的MAIL,詢問我們的EXCEL,當下第一個反應是,我們是用正版的喔,以為是遇到抓盜版的人。原來對方是微軟的一位項目經理,負責EXCELVBA適用於中小企業的範本設計,有網友介紹他看我們的部落格,然後他寫MAIL詢問我們設計等相關事宜。不知道現在若他看到我們將呈現的VBA程式碼,會做如何感想?
行文到此,來看主角。今天我們來介紹客戶資料的建檔,直接以貼圖和程式碼來說話:



Sub 客戶的資料儲存()
Application.ScreenUpdating = False
Dim i, j, k As Long
Dim m0, cif, last As Long
Dim rsf, rc, rs, rt As Long
Dim y, m, d1, d2, n, s, t As Variant
Dim r As Long
Sheets("客戶").Select
ActiveSheet.Unprotect Password:="******"
Cells(1, "N") = "資料儲存"
s = Cells(22, "G")
t = Cells(23, "G")
last = Cells(1, "H")
m0 = Cells(2, "H")
cif = Cells(3, "H")
If s = "" Then
    MsgBox "客戶編號須有資料!"
Else
If m0 > 0 Then
    MsgBox "已有 ( " & s & " ) 的客戶編號!"
Else
If Cells(23, "G") = "" Then
    MsgBox "客戶名稱須有資料!"
Else
If Cells(5, "H") > 0 Then
    s = Cells(23, "G")
    MsgBox "客戶名稱 ( " & s & " ) 資料庫已有記錄!"
Else
If Cells(2, "J") > 0 Then
    MsgBox "客戶編號已有 ( " & s & " ) 的編號,兩者不可重複!"
Else
If Cells(5, "J") > 0 Then
    s = Cells(23, "G")
    MsgBox "名稱 ( " & s & " ) 客戶資料庫已有記錄!"
Else
    Sheets("基本資料").Visible = True
    Sheets("客戶").Select
    Range("Q1:Q18").Copy
    Sheets("基本資料").Select
    Cells(last + 1, "A").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
 '"客戶資料"內編號排序
    Range(Cells(3, "A"), Cells(last + 5, "R")).Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _
    Header:=xlNo
    Sheets("基本資料").Visible = xlVeryHidden
 '清除畫面,以預設範圍複製貼上
    Sheets("客戶").Select
    Range("E7:M15").Copy
    Range("E22").Select
    ActiveSheet.Paste
 '使用函數的情形
        last = Cells(1, "H")
        rs = Cells(2, "C")
        rYes = Cells(3, "C")
        If rYes < 5 Then
            Cells(rs, "C").Copy
            Range(Cells(rs + 1, "C"), Cells(rs + 5, "C")).Select
            ActiveSheet.Paste
        End If
    Cells(21, "C") = ""
    Cells(2, "N") = "資料儲存"
End If
End If
End If
End If
End If
End If
Sheets("客戶").Select
Application.CutCopyMode = False
ActiveSheet.Protect Password:="******"
Range("A3").Select

End Sub

1 則留言:

  1. 忙了一整年讓我看到你們這篇文章,真的好感動..用了你們的設計的程式.明年就10年了.從我是清純少女,到現在變熟女了.XD..還好有你們的程式讓繁雜製造業一人辦公室的我可以管理進銷到帳款都可以作業順暢沒有漏洞..還記得早期剛設計時一來一往的信件修改好久.終於生產出一套程式真的容易..真的感謝還是感謝~

    回覆刪除