一、實現入庫明細表的內部功能
- 創建出入庫明細表:
步驟:
- 新建工作簿“出入庫系統.xlsx”
新建表“入庫明細”,輸入內容並做簡單樣式設置--設置產品登記或查詢區域:選中1-5行—右鍵—插入。插入的空行用來登記或查詢的對應項目如圖:
- 新建工作表“出庫明細”
- 將工作簿“出入庫系統.xlsx”另存爲“出入庫系統.xlsm”
2. 利用VBA製作出入庫查詢表:
- 在產品出入庫明細表中統計出入庫次數: 使用counta()
- 實現產品入庫部功能(製作有程序執行按鈕的VBA代碼):指當設置的添加入庫信息的單元格區域A6:F25中輸入一條產品入庫信息後,系統會將用戶輸入的入庫信息自動地添加到數據表的最後一行,同時也會自動地更新入庫次數。
- 開發工具—VisualBasic(彈出編輯器窗口)—插入—模塊(此時就創建了“模塊1”,並彈出“產品出入庫查詢系統.xlsm-模塊1(代碼)”窗口)—將光標定位在該窗口中-插入—過程(彈出“添加過程”)—名稱:入庫登記,類型:子程序,範圍:公共的—確定--代碼如下:
Public Sub 入庫登記()
Dim i As Long ‘定義變量
Dim j As Integer
Dim clo As Integer
clo = Sheets("入庫明細").[A6].CurrentRegion.Columns.Count ‘統計工作表中數據區域的列數,並賦值給clo
Sheets("入庫明細").Select ‘選擇入庫明細工作表
If Cells(4, 1).Value = "" Then
MsgBox "請輸入入庫的入庫單號!", vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘ 如果沒有輸入入庫單號,系統將自動彈出信息框並退出過程
If Cells(4, 2).Value = "" Then
MsgBox "請輸入入庫的產品編號號碼!", vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If
If Cells(4, 3).Value = "" Then
MsgBox "請輸入產品的名稱!", vbOKOnly & vbInformaion, "信息提示"
Exit Sub
End If ‘如果沒有輸入產品名稱,系統將自動彈出信息框並退出過程
If Cells(4, 4).Value = "" Then
MsgBox "請輸入產品的規格!", vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入規格,系統將自動彈出信息框並退出過程
If Cells(4, 5).Value = "" Then
MsgBox ("請輸入產品的單位"), vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入單位,系統將自動彈出信息框並退出過程
If Cells(4, 6) = "" Then
MsgBox ("請輸入產品的類別"), vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入類別,系統將自動彈出信息框並退出過程
If Cells(4, 7) = "" Then
MsgBox ("請輸入產品的進階"), vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入進價,系統將自動彈出信息框並退出過程
If Cells(4, 8) = "" Then
MsgBox ("請輸入產品的數量"), vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入產品的數量,系統將自動彈出信息框並退出過程
If Cells(4, 9) = "" Then
MsgBox ("請輸入產品的入庫日期"), vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If ‘如果沒有輸入產品的入庫日期,系統將自動彈出信息框並退出過程
i = Val(Sheets("入庫明細").Cells(1, 2).Value) ‘獲取已經入庫的次數
For j = 1 To clo
Cells(i + 8, j).Value = Cells(4, j).Value ‘進行賦值
Next j
Range(Cells(i + 8, 1), Cells(i + 8, clo)).Select ‘選中添加數據所在單元格區域
End Sub
- 單擊關閉按鈕,返回工作表“入庫明細”—開發工具—插入—按鈕(窗體控件)—畫出來(系統會自動彈出“指定宏”對話框)—宏名:選中“入庫登記”—確定—將按鈕名改爲“入庫登記”—可右鍵按鈕設置控件格式:字體/字形/字號等—確定—左鍵單擊按鈕,即可執行指定的宏代碼
3. 實現清空入庫信息功能:
也就是入庫登記或入庫明細查詢後需要清空單元格區域內的入庫產品信息,再進行下一步工作,設置此功能可以一鍵清除:
- 開發工具—VisualBasic—插入—過程(彈出“添加過程”對話框)—名字:清空,類型:子程序,範圍:公共的—確定
- 打開VBA窗口—在工程資源管理器中雙擊“模塊1”,在右側代碼窗口中入庫登記功能的程序後面添加下面的“清空”過程的程序代碼:
Sub 清空()
Dim k As Integer
Dim L As Integer
L = Sheets("入庫明細").[A6].CurrentRegion.Columns.Count ‘統計工作表中數據區域的列數,並賦值給變量L
For k = 1 To L
Sheets("入庫明細").Cells(4, k).Value = ""
Next k ‘依次清除入庫資料輸入和查詢區
MsgBox "清除已完成!", vbOKOnly & vbInformation, "信息提示" ‘提示已經清除完成
End Sub
- 點擊關閉按鈕,返回工作表“入庫明細”
- 開發工具—插入—按鈕(窗體控件)—畫出來(系統會自動彈出“指定宏”對話框)—宏名:清空—確定—將按鈕名改爲“清空入庫信息”—右鍵按鈕—設置控件格式—字體/字形/字號等—確定—左鍵單擊按鈕,即可執行指定的宏代碼
4. 實現入庫查詢功能
也就是 在“入庫明細”表的單元格區域A3:I4中,當輸入“產品名稱”和“規格”作爲查找條件時,利用VBA可以在數據表中查找出符合該條件的入庫登記信息,並將該信息完整地展示在設置的單元格區域A3:I4中。若找出多條符合條件的數據,則會在彈出的信息框中顯示符合查詢條件的總登記數,並會逐條顯示,若查不到符合條件的產品信息,則會彈出相應的提示消息框
- 開發工具—Visual Basic—插入—過程—名稱:入庫查詢,類型:子程序,範圍:公共的—確定—雙擊模塊1—加入新代碼:
Public Sub 入庫查詢()
Dim k As Long
Dim i As Integer, j As Integer, num As Integer, num1 As Integer
Dim flag As Boolean
Sheets("入庫明細").Select 選擇“入庫信息表”
If Cells(4, 2).Value = "" Then
MsgBox "請輸入產品編碼進行查詢!", vbOKOnly & vbInformation, "信息提示" 提示用戶輸入產品編碼進行查詢
Exit Sub
End If
If Cells(4, 6).Value = "" Then
MsgBox "請輸入類別進行查詢!", vbOKOnly & vbInformation, "信息提示" 提示用戶輸入類別進行查詢 Exit Sub
End If
k = Val(Cells(1, 2).Value) + 7 獲取數據表的記錄行
i = 8
Do Until i > k
If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then 如果找到符合查找條件的產品信息,則統計符合條件的信息個數
flag = True
num = num + 1
End If
i = i + 1 循環查找與產品編碼和類別相同的記錄行數
Loop
For i = 7 To k
If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then 如果找到符合查找條件的產品信息
For j = 1 To 9
Cells(4, j).Value = Cells(i, j).Value 將找到的記錄信息返回到第4行單元格中
Next j
num1 = num1 + 1
If num1 = num Then 如果是最後一條符合查找條件的產品信息
MsgBox "符合該查找條件的產品信息已經查詢完畢!", vbOKOnly & vbInformation, "信息提示"
Else
MsgBox "已經找到" & num & "條記錄,單擊【確定】按鈕可顯示下一條信息!", vbOKOnly & vbInformation, "信息提示"
End If
End If
Next I
If flag = False Then
MsgBox "沒有找到符合條件的入庫產品信息!" & Chr(10) & "" & Chr(13) & "請覈實您要產品編碼或類別!", vbOKOnly & vbExclamation, "信息提示"
End If
End Sub
- 單擊【關閉】按鈕,返回工作表“入庫明細”—插入“按鈕”—宏名:入庫查詢—確定—設置控件格式
5. 實現切換到出庫表功能
指如果想查看其他工作表的數據信息,則需要在當前工作表中設置執行按鈕來運行相應的VBA程序,即可切換到目標工作表中。步驟:
- 添加“過程”:“切換到出庫明細表”—確定 代碼:
Public Sub 切換到出庫明細表()
Sheets(“出庫明細”).Select 選擇“出庫明細”工作表
End Sub
- 單擊【關閉】按鈕—插入“切換到出庫明細表”按鈕—宏名:“切換到出庫明細表”—確定
6. 實現退出系統功能
步驟:
- 添加“退出系統”過程—在模塊1中添加代碼:
Public Sub 退出系統()
ActiveWorkbook.Save '保存工作簿
ActiveWorkbook.Close '關閉工作簿
End Sub
- 關閉—插入“退出系統”按鈕—宏名:“退出系統”—確定
到這裏,就完成了“入庫明細”工作表中各功能按鈕的設計操作
二、 實現出庫明細表的內部功能
- 實現產品出庫登記功能
即 當在工作表“出庫明細”的單元格區域A4:L4中輸入一條產品出庫信息時,執行VBA程序可將該條信息存放在數據表的最後一行,並且出庫次數也會隨之自動更新。若輸入的出庫信息不完整,則會彈出相應的提示消息框。步驟:
- 切換到工作表“出庫明細”—打開VBA窗口—插入—模塊(2)—插入—過程:出庫明細—輸入代碼:
Public Sub 出庫明細()
Dim i As Long
Dim j As Integer
Sheets("出庫明細").Select '選擇工作表“出庫明細”
If Cells(4, 1).Value = "" Then
MsgBox "請輸入出庫單號!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 2).Value = "" Then
MsgBox "請輸入產品編碼!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 3).Value = "" Then
MsgBox "請輸入產品名稱!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 4).Value = "" Then
MsgBox "請輸入規格!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 5).Value = "" Then
MsgBox "請輸入單位!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 6).Value = "" Then
MsgBox "請輸入類別!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 7).Value = "" Then
MsgBox "請輸入成本單價!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 8).Value = "" Then
MsgBox "請輸入數量!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 9).Value = "" Then
MsgBox "請輸入銷售單價!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 10).Value = "" Then
MsgBox "請輸入銷售日期!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 11).Value = "" Then
MsgBox "請輸入客戶!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
If Cells(4, 12).Value = "" Then
MsgBox "請輸入業務員!", vbOKOnly & vbExclamation, "信息提示"
Exit Sub
End If
i = Val(Sheets("出庫明細").Cells(1, 2).Value)
For j = 1 To i
Cells(i + 8, j).Value = Cells(4, j).Value
Next
End Sub
End Sub
- 關閉—開發工具—插入—宏:出庫登記—確定
實現產品出庫查詢功能:
在單元格區域A3:L4中,當輸入“產品編碼”和“類別”作爲查詢條件時,利用VBA程序可以在數據表中查找出符合該查找條件的出庫登記信息,並將該信息完整地顯示在設置的單元格區域A3:L4中。若查出多條符合條件的出庫登記信息,則該程序會在彈出的消息框中顯示符合該查找條件的總登記數,並會逐條顯示,若未查到符合條件的記錄,則彈出相應的消息提示框。步驟:
- 開發工具—visual basic –模塊2--插入--過程“出庫查詢”—代碼:
Public Sub 出庫查詢()
Dim k As Long
Dim i As Integer, j As Integer, num As Integer, num1 As Integer
Dim flag As Boolean
Sheets("出庫明細").Select
If Cells(4, 2).Value = "" Then
MsgBox "請輸入產品編碼進行查詢!", vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If
If Cells(4, 6).Value = "" Then
MsgBox "請輸入類別進行查詢!", vbOKOnly & vbInformation, "信息提示"
Exit Sub
End If
k = Val(Cells(1, 2).Value) + 7 '記錄的行數
i = 8 '記錄開始的行數號
If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then
flag = True
num num + 1 '找到符合條件的信息後,返回符合條件的個數
End If
i = i + 1
Loop
For i = 8 To k
If Cells(i, 2).Value = Cells(4, 2).Value And Cells(i, 6).Value = Cells(4, 6).Value Then
For j = 1 To 12
Cells(4, j).Value = Cells(i, j).Value '將找到的信息返回到第四行單元格里
Next j
num1 = num1 + 1
If num1 = num Then MsgBox "符合該查找條件的出庫信息已查詢完畢!", vbOKOnly, "信息提示"
Else
MsgBox "已找到" & num & "條記錄,單擊【確定】按鈕可顯示下一條信息!", vbOKOnly & vbInformation, "信息提示"
End If
End If
Next i
If flag = False Then
MsgBox "沒有找到符合條件的出庫信息!", vbOKOnly & vbExclamation, "信息提示"
End If
End Sub
End Sub
(if – Loop, for -- next)
- 關閉—插入按鈕“出庫查詢”—指定宏:“出庫查詢”—確定
2. 實現清空出庫信息功能
即 清空在單元格區域A3:L4中添加的出庫產品的信息,出庫登記或出庫明細查詢後需要清空信息,然後再進行下一步工作。設置此功能可以一鍵清除。步驟:
- 開發工具—visual basic—雙擊“模塊2”—插入—過程:“清空出庫信息”。代碼如下:
Public Sub 出庫查詢()
Dim i As Integer
Dim j As Integer
j = Sheets("出庫明細").[A3].CurrentRegion.Columns.Count '統計工作表中的數據區域的列數
For i = 1 To j
Sheets("出庫明細").Cells(4, i).Value = ""
Next i
End Sub
- 關閉—插入按鈕“出庫查詢”—宏名:“出庫查詢”—確定
3. 實現切換到入庫表功能
步驟:
- 開發工具—visual basic—雙擊模塊2—插入過程“切換到入庫明細表”—代碼:
Public Sub 切換到入庫信息表()
Sheets("入庫明細").Select
End Sub
- 關閉—插入按鈕“切換到入庫明細表”—宏名:切換到入庫明細表—確定
4. 實現退出系統功能
步驟:
- 開發工具—visual basic—模塊2--插入過程“退出系統”—代碼:
Public Sub 退出系統()
ActiveWorkbook.save
ActiveWorkbook.close
End Sub
- 關閉—插入按鈕“退出系統”—宏名:模塊2:退出系統—確定
5. 設計查詢系統界面
在完成產品出入庫管理系統內部功能的相關設計後,爲了統一管理,防止信息泄露,接下來使用窗體爲其製作一個訪問界面,並利用VBA程序代碼對進入該系統的用戶進行口令控制。步驟:
- 開發工具—visual basic—模塊2—插入—用戶窗體(此時插入了一個名爲UserForm1的用戶窗體,此時系統還會自動打開控件“工具箱”)—工具箱—屬性窗口,彈出“屬性”窗口—按字母選項卡--【名稱】與【Caption】框中均輸入“查詢系統”----選中“工具箱”裏的“標籤按鈕”並畫出來—屬性—在【Caption】中輸入“產品出入庫查詢系統”,也可在【Font】裏設置字體—按同樣的方法添加“用戶名”、“登錄密碼”控件標籤—單擊工具箱中的“文字框控件”—在剛剛添加的“用戶名”和“登錄密碼”下面添加文字框控件--選中登錄密碼的文字框—屬性—按字母序—PasswordChar:*,即當在登錄窗口中的【登錄密碼】文字框中輸入密碼時,系統會以“*”的形式顯示—單擊工具箱中的“命令按鈕”,並畫出來—屬性—Caption:產品入庫—雙擊添加的命令按鈕,即可進入其代碼編輯窗口,在其中輸入以下代碼:
Private Sub CommandButton1_Click()
If TextBox1.Text = "xiaobaihuazhuangpin" And TextBox2.Text = "123456" Then '驗證用戶名和登錄密碼
Sheets("入庫明細").Select
查詢系統.Hide '隱藏該用戶窗體
Exit Sub
Else
MsgBox "請輸入正確的用戶名和登錄密碼!", vbOKOnly & vbInformation, "提示"
End If
End Sub
End Sub
- 關閉窗口,返回“查詢系統”—添加“產品出庫”命令按鈕—雙擊“產品出庫”按鈕—代碼:
Private Sub CommandButton2_Click()
If TextBox1.Text = "xiaobaihuazhuangpin" And TextBox2.Text = "123456" Then '驗證用戶名和登錄密碼
Sheets("出庫明細").Select
Else
MsgBox "請輸入正確的用戶名和登錄密碼!", vbOKOnly & vbInformation, "提示"
End If
End Sub
- 繼續在用戶窗體中添加“退出系統”命令按鈕—雙擊“退出系統”按鈕—輸入代碼:
Private Sub CommandButton3_Click()
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
- 可調整窗體和各控件的大小及位置。可按住Ctrl,再分別按住命令按鈕,然後一起設置屬性,比如大小、字體等
- 設置禁用用戶窗體標題欄中的【關閉】按鈕的VBA程序,限定用戶進入系統必須輸入正確的用戶名和密碼。在用戶窗體代碼的編輯窗口中的“對象”下拉列表框中選擇【User-Form】--在“過程”下拉列表框中選擇【QueryClose】—輸入代碼:《這裏》
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then '禁用用戶窗體標題欄中的【關閉】按鈕
Cancle = True
End If
End Sub
- 接下來設置在每次打開工作簿時,系統都能自動地調出登錄界面:
開發工具—visualbasic--【工程資源管理器】--雙擊ThisWorkbook,進入其代碼編輯窗口—在【對象】下拉列表框中選擇【Workbook】,此時系統將自動在該代碼窗口中添加一個Workbook_Open事件處理程序的代碼框架—輸入代碼:
Private Sub Workbook_Open()
Sheets("Sheet3").Select
查詢系統.Show '調出創建的窗體
End Sub
- 此代碼實現的功能是在每次打開工作簿時,系統都會自動選擇工作表“Sheet3”,並調出所創建的窗體
- 檢測查詢系統
- 檢測登錄界面
- 檢測產品入庫查詢
- 檢測產品出庫查詢