ACCESSVBA编程分解.docx
《ACCESSVBA编程分解.docx》由会员分享,可在线阅读,更多相关《ACCESSVBA编程分解.docx(120页珍藏版)》请在冰豆网上搜索。
ACCESSVBA编程分解
ACCESS-VBA编程
第一章控件1
常量控件
acBoundObjectFrame绑定对象框
acCheckBox复选框
acComboBox组合框
acCommandButton命令按钮
acCustomControlActiveX(自定义)控件
acImage图像
acLabel标签
acLine线条
acListBox列表框
acObjectFrame未绑定对象框或图表
acOptionButton选项按钮
acOptionGroup选项组
acPage页
acPageBreak分页符
acRectangle矩形
acSubform子窗体/子报表
acTabCtl选项卡
acTextBox文本框
acToggleButton切换按钮
在VB中对窗体控件的引用
键入包含控件的窗体或报表的标识符,后面紧接!
运算符和控件的名称。
例如,下列标识符将引用“订单”窗体上“订单ID”控件值:
Forms!
[订单]!
[订单ID]
引用子窗体或子报表上的控件,不必使用“窗体”或“报表”属性为窗体或报表指定完整的标识符。
例如,可以使用下列标识符来引用“订单”子窗体上的“数量”控件:
Forms!
[订单]!
[订单子窗体]!
[数量]
判断窗体或报表中控件的数目,然后将该数目赋给一个变量。
DimintFormControlsAsInteger
DimintReportControlsAsInteger
intFormControls=Forms!
Employees.Count
intReportControls=Reports!
FreightCharges.Count
设置控件可见性
Dimi,iiAsInteger
Forii=3To10
Me.Controls.Item(ii).Visible=True
Next
Fori=11To22
Me.Controls.Item(i).Visible=False
Next
按特殊名在VBA中设置控件的可见性:
Fori=27To47
IfMe.Controls.Item(i).NameLike"A*"Then
Me.Controls.Item(i).Visible=False
EndIf
Next
指定一个控件能否接受焦点
Enabled属性:
me.控件.Enabled=true'能
=false'不能
指定一个控件能否被编辑:
locked
如:
me.控件.Locked=true
me.控件.Locked=false
设置控件标题显示的文字
Me.控件.Caption="显示窗体"
设置标签颜色:
Me.LabelColor=200
获得焦点及失去焦点时字段变更颜色。
如果你的控件是文本框,名称为“txt字段”,写如下代码:
PrivateSubtxt字段_GotFocus()
Me.txt字段.BackColor=12632256
EndSub
当中“12632256”是灰色,你可以自己选择希望的颜色,如果想在失去焦点时改为原来的颜色,写如下代码:
PrivateSubtxt字段_LostFocus()
Me.txt字段.BackColor=16777215
EndSub
使标签闪烁以引人注意
设置窗体的TimerInterval值为1000(1秒).
formsOnTimer加入代码:
SubForm_Timer()
YourTextLabel.Visible=NotYourTextLabel.Visible
End_Sub
设置标签字体颜色:
Me.Label1.ForeColor=
设置文本框颜色:
Me.TextColor=300
设置文本框字体颜色:
Me.TextFontColor=500
标签等左边距离:
Me.Label2.Left=2200
定位控件
Me.控件.Top=8290VBA编程
Me.控件.Left=100
标签等字体粗细:
Me.Label2.FontWeight=20000
控件边框颜色:
Me.Label2.BorderColor=0
控件边框线条
BorderStyle属性使用以下设置:
透明0(仅对于标签、图表和子报表而言是默认值)透明的
实线1(默认值)实线
虚线2虚线
短虚线3短虚线
点线4点线
稀疏点线5点距较宽的点线
点划线6虚线与点线组合的点划线
点点划线7虚线-点线-点线组合的点点划线
双实线8双实线
指定控件的边框宽度
使用BorderWidth属性可以指定控件的边框宽度
取值:
0或1-6
指定控件是否透明
使BackStyle属性可以指定控件是否透明。
True、False
解除子窗体锁定
Me.进_子窗体.Locked=False'解除子窗体锁定
将窗体上所有控件的输入法关掉!
来源:
不祥
PrivateSubForm_Open(CancelAsInteger)
DimctlAsAccess.Control
ForEachctlInMe.Controls
Debug.Printctl.Name&ctl.ControlType
Ifctl.ControlType=acTextBoxThen
ctl.IMEMode=2
EndIf
Next
EndSub
上述代码控制文本框,你还可以控制其他的,只要copy进窗体就可以了
列表框的值的引用
如果是单选的列表框,用me.[列表框名]来引用;如果要引用不是结合型列的值,可以用me.[列表框名].column(n)(第一列n=0,第二列n=1…)
引用多列组合框或列表框中特定的列或列与行的组合
用0引用第一列,用1引用第二列,依此类推。
用0引用第一行,用1引用第二行,依此类推。
例如在含有一列客户ID和一列客户名称的列表框中,可以使用如下方式引用第二列、第五行的客户名称:
Forms!
Contacts!
Customers.Column(1,4)
可以使用Column属性将组合框或列表框的内容指定给另一控件,如文本框。
例如,若要将文本框的ControlSource属性设为列表框第二列中的值,可以使用以下表达式:
=Forms!
Customers!
CompanyName.Column
(1)
如果引用了组合框或列表框中的列,但用户未做选择,则Column属性设置将为Null。
可以使用IsNull函数来确定是否进行了选择,示例如下:
IfIsNull(Forms!
Customers!
Country)
ThenMsgBox"Noselection."
EndIf
显示获得焦点的控件的Name:
ctlAsControl
Setctl=Screen.ActiveControl
MsgBoxctl.Name
第二章窗体
指定当窗体上的命令按钮保持按下状态时,是否重复执行事件过程或宏
使用AutoRepeat属性可以指定当窗体上的命令按钮保持按下状态时,是否重复执行事件过程或宏
True、False
允许添加
me.AllowAdditions=True
记录不锁定
me.RecordLocks=1
是否自动居中
AutoCenter=True,False
是否自动调整
AutoResize=True,False
窗体边框样式
me.BorderStyle=1中译:
无
其它
1无
2细边框
3可调边框
4对话框边框
设置窗体、页眉、页脚颜色:
Me.Section(0).BackColor=200
Me.Section
(1).BackColor=200
Me.Section
(2).BackColor=200
窗体标题
me.Caption="中国ACCESS软件网"中译:
窗体标题为"中国ACCESS软件网"(不含引号)
关闭按钮
me.CloseButton=True中译允许关闭按钮
其它:
true:
允许False:
不允许
控制框
me.ControlBox=True允许
其它:
true:
允许False:
不允许
默认视图
me.DefaultView=0为单一窗口
其它:
0:
单一窗口1:
连续窗体2:
数据表
允许分隔线
me.DividingLines=True中译允许分隔线
其它:
true:
允许False:
不允许
允许打印版式
英文:
me.LayoutForPrint=True中译允许打印版式
其它:
true:
允许False:
不允许
无最大最小化按钮
英文:
me.MinMaxButtons=0中译无最大最小化按钮
其它:
0:
无1:
最大化2:
最小化3:
两者都有
允许浏览按钮
英文:
me.NavigationButtons=True中译允许浏览按钮
其它:
true:
允许False:
不允许
滚动条
me.ScrollBars=0二者均无
其它:
0:
二者均无1:
只垂直2:
只水平3:
二者都有
允许/不允许添加
me.AllowAdditions=True/False
允许/不允许删除
me.AllowDeletions=True/False
允许/不允许编辑
me.AllowEdits=True/False
指定是否允许打开绑定窗体进行数据输入
使用DataEntry属性可以指定是否允许打开绑定窗体进行数据输入。
DataEntry属性不决定是否可以添加记录,只决定是否显示已有的记录。
Boolean型,可读/写。
True、False
允许/不允许筛选
me.AllowFilters=True/False
Filter="筛选内容"筛选
应用与/否筛选
FilterOn=True/False
将MyForm窗体的BackColor属性,改成ColorCode参数指定的色彩。
使用QBColor函数将MyForm窗体的BackColor属性,改成ColorCode参数指定的色彩。
QBColor可接受0到15的整型值。
SubChangeBackColor(ColorCodeAsInteger,MyFormAsForm)
MyForm.BackColor=QBColor(ColorCode)
EndSub
窗体真正居中显示
如下代码可以做到真正居中显示
PrivateSubForm_Load()
DoCmd.EchoFalse
Dimx,yAsInteger
DoCmd.Maximize
x=Me.WindowWidth
y=Me.WindowHeight
DoCmd.Restore
DoCmd.EchoTrue
Move(x-Me.WindowWidth)/2,(y-Me.WindowHeight)/2
EndSub
隐藏窗体[学生名册]数据表视图中的性别字段
Table!
学生名册!
性别.ColumnHidden=-1
显示获得焦点窗体的Name属性设置:
使用ActiveForm属性(和Screen对象一起)可以标识或引用获得焦点的窗体。
DimdqhdctAsForm
Setdqhdct=Screen.ActiveForm
MsgBoxdqhdct.Name
判断窗体是否打开的方法
FunctionIsLoaded(strNameAsString,OptionalintObjectTypeAsInteger=acForm)
IsLoaded=(SysCmd(acSysCmdGetObjectState,intObjectType,strName)<>0)
EndFunction
使用IsLoaded属性可以确定当前是否加载了AccessObject。
Boolean型,只读。
以下是一个示例:
IfCurrentProject.AllForms("frmMain").IsLoaded=TrueThen
Forms!
frmMain.Form.Visible=False
EndIf
窗体中组合框不在列表中示例
不在列表中事件代码:
PrivateSub名称_NotInList(NewDataAsString,ResponseAsInteger)
Response=acDataErrContinue
IfMsgBox("您输入的名称不在列表中,在列表中添加新记录吗?
",68,"银河酒业")=6Then
Me!
[名称]=Null
DoCmd.GoToControl"单价"
DoCmd.OpenForm"酒名列表",,,,acAdd,acNormal
Else
Me!
[名称]=Null
Me!
[名称].Dropdown
EndIf
EndSub
获得焦点事件代码:
PrivateSub名称_GotFocus()
Me!
[名称].Requery
EndSub
如何让窗体总在最前面?
*API函数声明
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
注释:
常量声明
PrivateConstSWP_NOSIZE=&H1
PrivateConstSWP_NOMOVE=&H2
PrivateConstHWND_TOPMOST=-1
PrivateConstHWND_NOTOPMOST=-2
注释:
在某个form里写:
SetWindowPosme.hWnd,WND_TOPMOST,0,0,0,0,SWP_NOMOVE注释:
或下面
SetWindowPosme.hWnd,WND_TOPMOST,0,0,0,0,SWP_NOSIZE
用代码选择图表样式
"柱形图"
Me.graphnow.Object.ChartType=xlColumnClustered
"折线图"
Me.graphnow.Object.ChartType=xlLineMarkers
"饼形图"
Me.graphnow.Object.ChartType=xl3DPie
"条形图"
Me.graphnow.Object.ChartType=xlBarClustered
柱形图簇状柱形图xlColumnClustered
三维簇状柱形图xl3DColumnClustered
堆积柱形图xlColumnStacked
三维堆积柱形图xl3DColumnStacked
百分比堆积柱形图xlColumnStacked100
三维百分比堆积柱形图xl3DColumnStacked100
三维柱形图xl3DColumn
条形图簇状条形图xlBarClustered
三维簇状条形图xl3DBarClustered
堆积条形图xlBarStacked
三维堆积条形图xl3DBarStacked
百分比堆积条形图xlBarStacked100
三维百分比堆积条形图xl3DBarStacked100
折线图折线图xlLine
数据点折线图xlLineMarkers
堆积折线图xlLineStacked
堆积数据点折线图xlLineMarkersStacked
堆积百分比折线图xlLineStacked100
百分比堆积数据点折线图xlLIneMarkersStacked100
三维折线图xl3DLine
饼图饼图xlPie
分离型饼图xlPieExploded
三维饼图xl3Dpie
三维分离型饼图xl3DPieExploded
复合饼图xlPieOfPie
复合柱饼图xlBarOfPie
XY(散点图)散点图xlXYScatter
平滑线散点图xlXYScatterSmooth
无数据点平滑线散点图xlXYScatterSmoothNoMarkers
折线散点图xlXYScatterLines
无数据点折线散点图xlXYScatterLinesNoMarkers
气泡图气泡图xlBubble
三维气泡图xlBubble3DEffect
面积图面积图xlArea
三维面积图xl3DArea
堆积面积图xlAreaStacked
三维堆积面积图xl3DAreaStacked
百分比堆积面积图xlAreaStacked100
三维百分比堆积面积图xl3DAreaStacked100
圆环图圆环图xlDoughnut
分离型圆环图xlDoughnutExploded
雷达图雷达图xlRadar
数据点雷达图xlRadarMarkers
填充雷达图xlRadarFilled
曲面图三维曲面图xlSurface
曲面图(俯视图)xlSurfaceTopView
三维曲面图(框架图)xlSurfaceWireframe
曲面图(俯视框架图)xlSurfaceTopViewWireframe
股价图盘高-盘低-收盘图xlStockHLC
成交量-盘高-盘低-收盘图xlStockVHLC
开盘-盘高-盘低-收盘图xlStockOHLC
成交量-开盘-盘高-盘低-收盘图xlStockVOHLC
圆柱图簇状柱形圆柱图xlCylinderColClustered
簇状条形圆柱图xlCylinderBarClustered
堆积柱形圆柱图xlCylinderColStacked
堆积条形圆柱图xlCylinderBarStacked
百分比堆积柱形圆柱图xlCylinderColStacked100
百分比堆积条形圆柱图xlCylinderBarStacked100
三维柱形圆柱图xlCylinderCol
圆锥图簇状柱形圆锥图xlConeColClustered
簇状条形圆锥图xlConeBarClustered
堆积柱形圆锥图xlConeColStacked
堆积条形圆锥图xlConeBarStacked
百分比堆积柱形圆锥图xlConeColStacked100
百分比堆积条形圆锥图xlConeBarStacked100
三维柱形圆锥图xlConeCol
棱锥图簇状柱形棱锥图xlPyramidColClustered
簇状条形棱锥图xlPyramidBarClustered
堆积柱形棱锥图xlPyramidColStacked
堆积条形棱锥图xlPyramidBarStacked
百分比堆积柱形棱锥图xlPyramidColStacked100
百分比堆积条形棱锥图xlPyramidBarStacked100
三维堆积柱形棱锥图Color属性
移动无边框窗体例子
模块:
DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
DeclareFunctionReleaseCaptureLib"user32"()AsLong
PublicConstWM_NCLBUTTONDOWN=&HA1
PublicConstHTCAPTION=2
应用:
PrivateSubForm_Close()
DoCmd.RunCommandacCmdAppMaximize
EndSub
PrivateSubForm_Load()
DoCmd.RunCommandacCmdAppMinimize
EndSub
PrivateSubXPForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=1Then
ReleaseCapture
SendMessageMe.hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0&
EndIf
EndSub
PrivateSub命令20_Click()
DoCmd.Close
EndSub
第三章 日期、时间函数
如何将文本型:
2003.08.04转换为日期型:
2003-08-04
cdate(replace("2003.08.04",".","-"))
显示当前日期在该年中所处的星期号
=Format(Now(),"ww")
ww为1到53。
显示日期字段值的四位年份值。
=DatePart("yyyy",[订购日期])
显示日期字段值前10天的日期值。
=DateAdd("y",-10,[应付日期])
显示日期字段值前一个月的日期值。
=DateAdd("m",-1,Date())
显示日期1和日期2之间相差的天数。
=DateDiff("d",[订购日期],[发货日期])
从今天算起到三个月后的日期之间的记录。
Betweebdate()andadddate(3,date())
根据出生日期计算年龄(周岁)
=IIf(Month(Date())-Month([出生年月日])>-1,Year(Date())-Year([出生年月日]),Year(Date())-Year([出生年月日])-1)
自定义日期/时间格式(Format函数)
(:
)时间分隔符。
在一些区域,可能用其他符号来当时间分隔符。
格式化时间值时,时间分隔符可以分隔时、分、秒。
时间分隔符的真正字符在格式输出时取决于系统的设置。
(/)日期分隔符。
在一些区域,可能用其他符号来当日期分隔符。
格式化日期数值时,日期分隔符可以分隔年、月、日。
日期分隔符的真正字符在格式输出时取决于系统设置。
C以ddddd来显示日期并且以ttttt来显示时间。
如果想显示的数值无小数部分,则只显示日期部分,如果想显示的数值无整数部分,则只显示时间部分。
D
没有前导零的数字来显示日(1–31)。
Dd
以有前导零的数字来显示日(01–31)。
ddd
以简写来表示日(Sun–Sat)。
dddd
以全称来表示日(Sunday–Saturday)。
ddddd
以完整日期表示