当前位置:文档之家› 怎样用EXCEL开发管理信息系统

怎样用EXCEL开发管理信息系统

怎样用EXCEL开发管理信息系统
怎样用EXCEL开发管理信息系统

用EXCEL开发管理信息系统

摘要:Excel97是Windows95环境下的一种电子表格软件,可向用户提供史无前例的超强功能和易用性,内嵌有一种Visual Basic for Application(简称VBA)超级宏语言,读者在熟练应用Excel的基础上,可按用户的需求用VBA建立适用的信息系统。

关键词:EXCEL97 VBA 管理信息系统(MIS)

目前国内管理信息系统(MIS)开发研制一般采用人们熟悉的dBaseX、Foxbase或Foxpro等,本文介绍了如何用Excel开发MIS。一般来说,一套MIS主要包括信息输入、信息处理、信息输出三大组成部分,用Excel 处理这些部分均显得游刃有余。Excel是Windows环境下的一种电子表格软件,可向用户提供史无前例的超强功能和易用性。它同时具有电子数据表、图表和数据库的功能,具有极强的分析性能、报表制作工具和丰富的统计图表。在本文笔者用中文Excel97 for Windows开发了水电管理系统、销售管理系统、试卷分析系统。充分感受到其强大功能和方便性。下面详细阐述水电管理系统、销售管理系统、试卷分析系统的开发过程。

应用程序一:水电计价系统

水电管理是每一个单位每月都要进行的工作。下面我们以保定农校水电计价系统为例讲解VBA在水电管理中的应用。

1、水电计价系统的功能

本程序具有如下功能:

自动计算功能:可完成各户水费、电费、合计的计算。

自动汇总功能:自动汇总全校教职工楼的用电量、用水量及分类汇总。

查询功能:可查询各户的电表数、水表数、电费数、水费数。

报表的打印输出功能。

系统保护功能:具有口令保护、工作表保护以防非法用户进入和修改。

2、程序设计过程

(1)程序总体设计(图1)

(2)界面设计

水电计价系统主界面如图2所示。(图2)

主界面是以EXCEL工作表作为输入输出界面。

具体设计如下:

选定一个工作表并命名为“主界面”。

选定单元格区域,把区域颜色设置成你喜欢的颜色。放置命令按钮,并给按钮指定宏。

分割区域并冻结,锁定界面使之不能滚动。

工作表加密保护使用户不能修改。

记录单界面如(图3)所示。

具体设计过程如下:

选定一个工作表并命名为“记录单”。

制表(如上图所示)。

选定年、月、水表数、电表数空白单元格区域,取消锁定。放置命令按钮,并给按钮指定宏。

工作表保护使用户不能修改。

主报表如(图4、图5)所示。

具体设计过程如下:

选定一个工作表并命名为“主报表”。

制表(如上图所示)。

纵向冻结A、B两列,横向冻结1-5行。

放置命令按钮,并给按钮指定宏。

输入公式:计算上次表底、本月查表记录、水电用量、水、电费、水电费合计的校内、校外合计、楼房合计、平房合计。

在C338单元格输入下面公式,拖动填充柄复制公式至L338。

=SUMIF($M$6:$M$331,"=l校内",C6:C331)+SUMIF($M$6:$M$331,"=p校内",C6:C331)

在C339单元格输入下面公式,拖动填充柄复制公式至L339。

=SUMIF($M$6:$M$331,"=l校外",C6:C331)+SUMIF($M$6:$M$331,"=p校外",C6:C331)

在C340单元格输入下面公式,拖动填充柄复制公式至L340。

=SUMIF($M$6:$M$331,"=l校外",C6:C331)+SUMIF($M$6:$M$331,"=l校内",C6:C331)

在C341单元格输入下面公式,拖动填充柄复制公式至L341。

=SUMIF($M$6:$M$331,"=p校外",C6:C331)+SUMIF($M$6:$M$331,"=p校内",C6:C331)

工作表保护使用户不能修改。

查表档案界面如(下图)所示:

具体设计过程如下:

选定一个工作表并命名为“档案”。

制表(如图6所示)。

纵向冻结A、B两列,横向冻结1-3行。放置命令按钮,并给按钮指定宏。

工作表保护使用户不能修改。

查询档案如(下图)所示:

具体设计过程如下:

选定一个工作表并命名为“查询”。

制表(如图7所示)。

纵向冻结A列,横向冻结1-3行。

放置命令按钮,并给按钮指定宏。

工作表保护使用户不能修改。

(3)、水电计价系统的VBA代码及说明

Dim s As Variant

Dim y As Variant

Dim u As Variant ‘模块级变量声明

Sub shuru() ?指定给主界面输入按钮

s = Worksheets("主界面").Range("v1").Value ‘获取密码For y2 = 1 To 2

x = InputBox("请输入密码:", "保定农校水电计价系统") If x = s Then

Worksheets("主界面").Activate

ActiveSheet.Unprotect

ActiveSheet.DrawingObjects("按钮2").Select Selection.OnAction = "vbb"

ActiveSheet.DrawingObjects("按钮3").Select Selection.OnAction = "ibda"

'ActiveSheet.DrawingObjects("按钮5").Select

'Selection.OnAction = "退出"

ActiveSheet.DrawingObjects("按钮4").Select

Selection.OnAction = "报表查询"

ActiveSheet.Protect

Worksheets("记录单").Activate

Exit Sub

ElseIf x = "" Then

MsgBox "请输入密码"

Else

Exit Sub

End If

Next y2

End Sub ‘以上是根据密码正确与否选择执行代码段

Sub 返回1() ‘指定给返回按钮

Worksheets("主界面").Activate

End Sub

Sub 存档() ?指定给记录单上的存档按钮

thecode = vbYesNo + vbDefaultButton2 + vbExclamation + vbapplicationmodel

'MsgBox "请对输入进行检查,是否正确?", thecode

thereply = MsgBox(prompt:="请对输入进行检查,是否正确?", Buttons:=thecode) Select Case thereply

Case vbYes

m = Worksheets("记录单").Range("c5")

n = Worksheets("记录单").Range("d5")

If m <> "" And n <> "" Then

Worksheets("记录单").Range("c5:d330").Select

Selection.Copy

ElseIf m <> "" And n = "" Then

Worksheets("记录单").Range("c5:c330").Select

Selection.Copy

ElseIf m = "" And n <> "" Then

Worksheets("记录单").Range("d5:d330").Select

Selection.Copy

ElseIf m = "" And n = "" Then

Exit Sub

Else

End If

Worksheets("报表").Activate

ActiveSheet.Unprotect

If m <> "" And n <> "" Then

'Worksheets("报表").Activate

Worksheets("报表").Range("e6").Select

Selection.PasteSpecial

ElseIf m <> "" And n = "" Then

Worksheets("报表").Range("e6").Select

Selection.PasteSpecial

ElseIf m = "" And n <> "" Then

Worksheets("报表").Activate

Worksheets("报表").Range("f6").Select

Selection.PasteSpecial

Else

End If

Worksheets("档案").Activate

y1 = Worksheets("记录单").Range("c2").Value

x = 0

Do Until z = y1

x = x + 1

z = Worksheets("档案").Cells(2, x).Value

Loop

If m <> "" And n <> "" Then

Worksheets("档案").Cells(4, x).Select

Selection.PasteSpecial

ElseIf m = "" And n <> "" Then

Worksheets("档案").Cells(4, x + 1).Select

Selection.PasteSpecial

ElseIf m <> "" And n = "" Then

Worksheets("档案").Cells(4, x).Select

Selection.PasteSpecial

Else

End If

Worksheets("主界面").Activate

Case vbNo

End Select

Exit Sub

End Sub ‘以上代码是把录入数据存入主报表和查表档案

Sub 返回2() ‘指定给主报表上的返回主界面按钮

ActiveSheet.Unprotect

Worksheets("主界面").Activate

End Sub

Sub 取电表底() ‘指定给主报表上的取电表底按钮

y = InputBox("请输入电表底(y0,1,2...12):", "保定农校水电计价系统") ActiveSheet.Unprotect

If y = "y0" Then

Worksheets("档案").Activate

Range("c4:c329").Select

Selection.Copy

Range("c6").Select Selection.PasteSpecial ElseIf y = "1" Then Worksheets("档案").Activate Range("e4:e329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "2" Then Worksheets("档案").Activate Range("g4:g329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "3" Then Worksheets("档案").Activate Range("i4:i329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "4" Then Worksheets("档案").Activate Range("k4:k329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "5" Then Worksheets("档案").Activate Range("m4:m329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "6" Then Worksheets("档案").Activate Range("o4:o329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select

Selection.PasteSpecial ElseIf y = "7" Then Worksheets("档案").Activate Range("q4:q329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "8" Then Worksheets("档案").Activate Range("s4:s329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "9" Then Worksheets("档案").Activate Range("u4:u329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "10" Then Worksheets("档案").Activate Range("w4:w329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "11" Then Worksheets("档案").Activate Range("y4:y329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "12" Then Worksheets("档案").Activate Range("aa4:aa329").Select Selection.Copy Worksheets("报表").Activate Range("c6").Select Selection.PasteSpecial ElseIf y = "" Then

ActiveSheet.Protect

Exit Sub

Else

End If

With Application

.Calculation = xlAutomatic

.MaxChange = .001

End With

ActiveWorkbook.PrecisionAsDisplayed = False

ActiveSheet.Protect

End Sub ‘以上代码是使用选择语句从查表档案中取电表底

Sub 取水表底() ‘指定给主报表上的取电表底按钮

ActiveSheet.Unprotect

u = InputBox("请输入水表底(y0,1,2...12):", "保定农校水电计价系统") If u = "y0" Then

Worksheets("档案").Activate

Range("d4:d329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "1" Then

Worksheets("档案").Activate

Range("f4:f329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "2" Then

Worksheets("档案").Activate

Range("h4:h329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "3" Then

Worksheets("档案").Activate

Range("j4:j329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "4" Then

Worksheets("档案").Activate

Range("l4:l329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "5" Then Worksheets("档案").Activate Range("n4:n329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "6" Then Worksheets("档案").Activate Range("p4:p329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "7" Then Worksheets("档案").Activate Range("r4:r329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "8" Then Worksheets("档案").Activate Range("t4:t329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "9" Then Worksheets("档案").Activate Range("v4:v329").Select Selection.Copy Worksheets("报表").Activate Range("d6").Select Selection.PasteSpecial ElseIf u = "10" Then Worksheets("档案").Activate Range("x4:x329").Select Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "11" Then

Worksheets("档案").Activate

Range("z4:z329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "12" Then

Worksheets("档案").Activate

Range("ab4:ab329").Select

Selection.Copy

Worksheets("报表").Activate

Range("d6").Select

Selection.PasteSpecial

ElseIf u = "" Then

ActiveSheet.Protect

Exit Sub

Else

End If

With Application

.Calculation = xlAutomatic

.MaxChange = .001

End With

ActiveWorkbook.PrecisionAsDisplayed = False

ActiveSheet.Protect

End Sub ‘以上代码是使用选择语句从查表档案中取水表底

Sub bsy() ‘由报表存档过程调用

Worksheets("主界面").Activate

x = 3

Do While Not (IsEmpty(Worksheets("主界面").Cells(11, x).Value))

x = x + 1

Loop

Worksheets("主界面").Cells(11, x).Value = Worksheets("记录单").Range("c2") Worksheets("主界面").Cells(11, x + 1).Value = "月"

Worksheets("主界面").Cells(12, x).Value = u

Worksheets("主界面").Cells(13, x).Value = y

Worksheets("主界面").Cells(12, x + 1).Value = "月"

Worksheets("主界面").Cells(13, x + 1).Value = "月"

Worksheets("报表").Activate

Range("c3:f5").Select

Selection.Copy

Range("c334:f336").Select

Selection.PasteSpecial

Range("a1").Select

ActiveWindow.ScrollRow = 6

ActiveSheet.Protect

End Sub ‘以上代码是把报表月份和表底月份放入主界面上的表格里Sub 返回3() ?指定给返回主界面按钮

ActiveSheet.Unprotect

Worksheets("主界面").Activate

End Sub

Sub 打印设置() ‘指定给主界面上的打印设置按钮

With ActiveSheet.PageSetup

.PrintTitleRows = "$1:$5"

.PrintTitleColumns = ""

End With

ActiveSheet.PageSetup.PrintArea = ""

With ActiveSheet.PageSetup

.LeftHeader = ""

.CenterHeader = "水电计价系统"

.RightHeader = "第&P 页"

.LeftFooter = ""

.CenterFooter = ""

.RightFooter = ""

.LeftMargin = Application.InchesToPoints(.15748031496063)

.RightMargin = Application.InchesToPoints(.15748031496063)

.TopMargin = Application.InchesToPoints(.984251968503937)

.BottomMargin = Application.InchesToPoints(.984251968503937)

.HeaderMargin = Application.InchesToPoints(.511811023622047)

.FooterMargin = Application.InchesToPoints(.511811023622047)

.PrintHeadings = False

.PrintGridlines = False

.PrintNotes = False

.PrintQuality = Array(360, 180)

.CenterHorizontally = True

.CenterVertically = False

.Orientation = xlPortrait

.Draft = False

.PaperSize = xlPaperUser

.FirstPageNumber = xlAutomatic

.Order = xlDownThenOver

.BlackAndWhite = False

.Zoom = 100

End With

End Sub ‘进行打印设置

Sub vbb() ‘指定给主界面上的主报表按钮

Worksheets("报表").Activate

ActiveSheet.Protect

End Sub ‘激活主报表

Sub ibda() ‘指定给主界面上的报表查询按钮

Worksheets("档案").Activate

ActiveSheet.Protect

End Sub ‘激活档案工作表

Sub 打印() ‘指定给主报表上的打印按钮

d = InputBox("请选择打印项(“楼房校内=1;楼房校外=2;平房校内=3;平房校外=4”):", "打印选项窗口")

If d = "1" Then

ActiveSheet.Unprotect

Range("A5:M331").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _

:=Range("c342:c343"), Unique:=False

ActiveWindow.SelectedSheets.PrintOut Copies:=1

ElseIf d = "2" Then

ActiveSheet.Unprotect

Range("A5:M331").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _

:=Range("d342:d343"), Unique:=False

ActiveWindow.SelectedSheets.PrintOut Copies:=1

ElseIf d = "3" Then

ActiveSheet.Unprotect

Range("A5:M331").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _

:=Range("e342:e343"), Unique:=False

ActiveWindow.SelectedSheets.PrintOut Copies:=1

ElseIf d = "4" Then

ActiveSheet.Unprotect

Range("A5:M331").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _

:=Range("f342:f343"), Unique:=False

ActiveWindow.SelectedSheets.PrintOut Copies:=1

ElseIf d <> "1" Or d <> "2" Or d <> "3" Or d <> "4" Then

MsgBox "打印项选择有误,请重选!"

Beep

Exit Sub

Else

End If

ActiveSheet.ShowAllData

ActiveSheet.Protect

End Sub ‘进行选项打印

Sub 退出() ‘指定给主界面上的退出按钮

宏2 ‘系统初始化的逆过程

ActiveSheet.Unprotect

ActiveSheet.DrawingObjects("按钮2").Select

Selection.OnAction = "" ‘撤销按钮2的指定宏

ActiveSheet.DrawingObjects("按钮3").Select

Selection.OnAction = "" ‘撤销按钮3的指定宏

'ActiveSheet.DrawingObjects("按钮5").Select

'Selection.OnAction = ""

ActiveSheet.DrawingObjects("按钮4").Select

Selection.OnAction = "" ‘撤销按钮4的指定宏

ActiveSheet.Protect

thecode = vbYesNo + vbDefaultButton2 + vbExclamation + vbapplicationmodel

thereply = MsgBox(prompt:="是否存盘?(如果不是正式报表请选否!)", Buttons:=thecode) Select Case thereply

Case vbYes

dj = Worksheets("报表").Range("$g$278").Value

uj = Worksheets("报表").Range("$h$278").Value

'zj = worksheets("报表").Range("$h$332").Value

da = Worksheets("报表").Range("$g$277").Value

ub = Worksheets("报表").Range("$h$277").Value

If dj <> 0 Or uj <> 0 Or da <> 0 Or ub <> 0 Then

ActiveWorkbook.Save

ChDrive "a:\"

ActiveWorkbook.SaveAs Filename:="SHUIDIAN.XLS", FileFormat:=xlNormal,

Password:="",WriteResPassword:="",ReadOnlyRecommended:= False, CreateBackup:=False Application.Quit

Else

MsgBox "不是正式报表,不予存盘!"

Application.DisplayAlerts = False

Application.Quit

End If

Case vbNo

Application.DisplayAlerts = False

Application.Quit

End Select

End Sub ‘ 以上是执行退出存盘

Sub 初始化() ‘指定给主界面上的系统初始化按钮

定义界面‘调用定义界面宏改变应用程序标题

Worksheets("记录单").Activate

Worksheets("记录单").Range("c5:d330").Select

Selection.ClearContents

Worksheets("报表").Activate

ActiveSheet.Unprotect

Worksheets("报表").Range("c6:f331").Select

Selection.ClearContents

Worksheets("主界面").Activate ‘以上代码是清除记录单和报表数据

宏1‘调用宏1

End Sub

Sub 宏1()

With Toolbars(1)

.Visible = False

.Position = xlFloating

.Left = 89

.Top = 67

End With

With Toolbars(2)

.Visible = False

.Position = xlFloating

.Left = 79

.Top = 78

End With

ActiveWindow.DisplayWorkbookTabs = False End Sub

' 宏2 Macro

' ykq记录宏1997/1/10

'

' 快捷键: Ctrl+e

Sub 宏2()

ActiveWindow.DisplayWorkbookTabs = True Toolbars(1).Visible = True

Toolbars(2).Visible = False

With Application

.ShowToolTips = True

.LargeButtons = False

.ColorButtons = True

End With

Toolbars(1).Visible = True

With Toolbars(2)

.Visible = True

.Position = xlTop

End With

With Application

.ShowToolTips = True

.LargeButtons = False

.ColorButtons = True

End With

Toolbars(1).Position = xlTop

Worksheets("主界面").Activate

End Sub

Sub 定义界面()

Application.Caption = "保定农校水电计价系统"

ActiveWindow.Caption = ""

End Sub

'快捷键ctrl+s

Sub 密码() ‘指定给主界面上的密码设置按钮

d = InputBox("请输入旧密码:", "保定农校水电计价系统")

If d = Worksheets("主界面").Range("v1").Value Then

For x = 1 To 2

a = InputBox("请输入自定义密码:", "保定农校水电计价系统")

b = InputBox("请重新输入自定义密码:", "保定农校水电计价系统") If a = b And a <> "" Then

c = a

Worksheets("主界面").Range("v1").Value = c

Exit For

Else

MsgBox "密码输入不正确"

End If

Next x

Else Exit Sub

End If

End Sub ‘以上代码是设置密码

Sub 报表查询() ‘指定给报表查询按钮

Worksheets("查询档案").Activate

ActiveSheet.Protect

End Sub ‘以上代码是激活查询档案

Sub 返回4() ‘指定给返回按钮

ActiveSheet.Unprotect ‘解除当前工作表保护

Worksheets("主界面").Activate

End Sub

Sub 报表存档() ‘指定给主报表上的报表存档按钮

dj = Range("$g$278").Value

uj = Range("$h$278").Value

'zj = Range("$h$332").Value

da = Range("$g$277").Value

ub = Range("$h$277").Value

If dj <> 0 Or uj <> 0 Or da <> 0 Or ub <> 0 Then

ActiveSheet.Unprotect

Range("g5:h331,j5:l331").Select

Selection.Copy

Worksheets("查询档案").Activate

x = 1

Do While Not (IsEmpty(Worksheets("查询档案").Cells(3, x).Value))

x = x + 1

Loop

ActiveSheet.Cells(3, x).Select

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Worksheets("查询档案").Cells(2, x).Value = y

Worksheets("查询档案").Cells(2, x).Value = Worksheets("记录单").Range("$c$2")

Worksheets("查询档案").Cells(2, x + 1).Value = "月"

Worksheets("主界面").Activate

bsy ‘调用bsy宏

Else

MsgBox "不是正式报表,不予存档!"

Exit Sub

End If

End Sub ‘以上代码是把报表数据存入查询档案

' 查询档案清理

' 快捷键: Ctrl+h

Sub 宏3() ‘清理查询档案

Worksheets("查询档案").Activate

Range("B2:AN329").Select

Selection.ClearContents

Range("a1").Select

Worksheets("主界面").Activate

End Sub

'

' 宏4 Macro

' ykq记录宏1997/1/10

' 档案库清理

'

' 快捷键: Ctrl+j

Sub 宏4() ‘清理查表档案

Worksheets("档案").Activate

Range("C4:AB329").Select

Selection.ClearContents

Range("a1").Select

Worksheets("主界面").Activate

End Sub

应用程序二:销售管理系统

在商业企业的经营活动中,主要业务活动是进销存。本程序主要解决销售的问题,关于进货和库存留给读者自己在原来程序的基础上进一步开发。

1、销售管理系统的功能

自动计算进货金额、销货金额和毛利。

分类汇总功能,可按商品和经手人代码进行分类汇总。

打印功能

查询功能(可按商品和经手人代码进行查询)。

2、销售管理系统的程序设计

相关主题
文本预览
相关文档 最新文档