主题:[原创]vb 编程的一点心得和体会 ,希望会给您带来一点帮助
aspzym
[专家分:840] 发布于 2005-04-13 10:07:00
[em1]
(1)
消息框中按钮之定义
MsgBox strMsg1, c1+c2+c3 , strMsg2
其中 strMsg1 为提示信息
strMsg2 为标题内容
c1+c2+c3 定义按钮形式,具体如下:
c1: 按钮的类型
0 vbOkOnly 只有一个按钮“确定”
1 vbOkCancel 两个按钮“确定”和“取消”
2 vbAbortRetryIgnore 三个按钮“终止”、“重试”和“忽略”
3 vbYesNoCancel 三个按钮“是”、“否”和“取消”
4 vbYesNo 两个按钮“是”和“否”
5 vbRetryCancel 两个按钮“重试”和“取消”
返回值: vbOk 1 确定
vbCancel 2 取消
vbAbort 3 终止
vbRetry 4 重试
vbIgnore 5 忽略
vbYes 6 是
vbNo 7 否
c2: 图标的类型
16 vbCritical ×
32 vbQuesion ?
48 vbExclamation !
64 vbInformation i
c3: 默认焦点
0 vbDefalaultButton1 左起第一个按钮自动获得焦点
256 vbDefalaultButton2 左起第二个按钮自动获得焦点
512 vbDefalaultButton3 左起第三个按钮自动获得焦点
和为: 00 0000 0000 B
c3 c2 c1
例: 1. i = MsgBox " 是否要删除该条记录 ? ", 1+32+0 , " 请确认"
2. MsgBox " 是否要删除 ! ", 0+32+0 , " 请...."
(2)
判断表的存在
Function M_fucScanTable(strTName As String) As Integer ' 搜索表 strTableName
On Error GoTo OpenErr
Set MyRsm = New Recordset
MyRsm.Open "Select * From " & strTName,Cn, adOpenKeyset, adLockOptimistic
MyRsm.MoveLast
M_fucScanTable = MyRsm.RecordCount ' 返回记录数,0 为空表
MyRsm.Close
Set MyRsm = Nothin
Exit Function
OpenErr:
M_fucScanTable = -1 ' 无表
End Function
(3)
动态建立表
strSQL = "CREATE TABLE " & strTName & _
"( Xh char(3) Not Null Primary key,Mc char(10),Xb char(2)," & _
"Csrq char(10),Zw char(20),Gz numeric(9,2),Bz char(30),Xp image )"
cn.Execute strSQL, , adCmdText
其中: Primary key 为设置主键(唯一)
(4)
插入记录 Insert
strSQL = "Insert Into A01(Xh,Mc,Xb,Csrq,Zw) " & _
"Values ( '" & Xhp & "','" & Mcp & "','" & Xbp &"','" &Rqp& "','" & Zwp & "' "
Cn.Execute strSQL
(5)
导出表格到excel
Dim newxls As Excel.Application
Dim newbook As Excel.Workbook
Dim newsheet As Excel.Worksheet
Set newxls = CreateObject("excel.application")
newxls.Visible = True
Set newbook = newxls.Workbooks.Add
Set newsheet = newbook.Worksheets(1)
For i = 0 To 7
For j = 0 To 4
MSFlexGrid1.Row = i
MSFlexGrid1.col = j
newsheet.Cells(1, 3) = Trim(Combo1.Text) & "班"
newsheet.Cells(1, 4) = "第" & bytXq & "学期"
newsheet.Cells(1, 5) = "课程表"
newsheet.Cells(i + 3, j + 2) = Trim(MSFlexGrid1.TextMatrix(i, j))
Next j
Next i
注意此项操作你先要 引用 excelctl type library 和 microsoft excel 9.0 object library
(6) with 语句的应用
With msflexgrid1
.CellAlignment = 4
.TextMatrix(1, 0) = "考试编号"
.TextMatrix(1, 1) = "学号"
.TextMatrix(1, 2) = "姓名"
.TextMatrix(1, 3) = "班号"
.TextMatrix(1, 4) = "课程名称"
.TextMatrix(1, 5) = "分数"
End With
(7)
响应回车
Private Sub Text2_KeyPress(KeyAscii As Integer) ' Text2 响应回车键
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub
(8)
隐藏任务栏
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub Form_Load()
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
End Sub
希望能给您在编程时带来一点方便
同时我也只是起到一个抛砖引玉的 目的
希望您也能供稿 我方便大家努力
谢谢各位 vb 爱好者们
[em80]
回复列表 (共29个回复)
沙发
aspzym [专家分:840] 发布于 2005-04-12 16:13:00
不同作用范围变量的声明方式
作用范围 局部变量 模块级变量 公用变量
声明方式 Dim,ststic Dim,private Public
声明位置 过程内部 通用部分 模块的声明段
其他过程能否调用 不能 能 能
其他模块能否调用 不能 不能 能
2. 变量的声明技巧
Public strSQL As String
Dim intI As Integer
由上面的两个例子可以看出声明变量时应该注意变量的命名规则
变量类型 & 变量名
变量一定要有意义,这样的好处是当看到变量时很快就能知道变量的类型从而避免了变量赋值时出现类型不匹配的错误,而且增加了程序的可读性.
3 在应用变量时一定要保正变量已赋初值.
二. 常量
用户一但定义了常量,在以后的程序中不能再给这个常量赋新值,否则在程序运行时,vb会错误提示.
定义常量的例子:
Public Const Db_Name1 = "f:\qqqq\db\zhang.mdb"
关键字 常量名 = 常量的值
板凳
aspzym [专家分:840] 发布于 2005-04-12 16:14:00
一. 条件判断语句
1 . 单行 if …… then 与 iif( …… ) 结构
例: If Text1.Text = " " Then msgbox “ 空值”
例 strdata = iff( a>b , text1.text , text2.text)
目标变量 条件 值1 值2
当a>b = true 时 strdata=text1.text
当a>b= false 时 strdata=text2.text
2. if ….. then ….. else ……. end if
例:If Size > 0 Then
Text1.Text = ""
Else
Text1.Text = " ok "
End If
应该注意的是此种结构的书写格式!
3. select case 结构
当需要完成多重判定的任务时,可以使用select case 结构
语法: Select 测试条件
Case 表达式1
语句组1
Case 表达式2
语句组2
……….
Case 表达式n
语句组n
End Select
二. 循环语句
Vb主要有两种循环结构,即 do…..loop 和 for……next.
1. do….loop 结构
使用do 循环重复执行一语句块,并计算测试条件以决定何时结束循环,循环条件必须是一个数值或者值为true 或false 的表达式. Do….loop语句有四种形式:
[1] do while [2] do
……. ……..
Loop Loop while
[3] do until [4] do
……… ……..
Loop Loop until
退出do循环用 Exit do
2 for ……. Next 结构
语法: for 计数器= 初值 to 终值
………….
Next
例: dim intz as integer , inty as integer
For intz =1 to 100
If intz mod 2 = 0 then inty =inty+1
next
其中的 计数器 ,初值 和 终值 都必须是数值型!
三. 定义过程和函数
1. 定义过程
语法: private sub P_fcz( )
………
End sub
例: 表格初始化.
Private sub P_bgcsh( )
With msflexgrid1
.TextMatrix(1, 0) = "考试编号"
.TextMatrix(1, 1) = "学号"
.TextMatrix(1, 2) = "姓名"
.TextMatrix(1, 3) = "班号"
.TextMatrix(1, 4) = "课程名称"
.TextMatrix(1, 5) = "分数"
End With
End sub
过程调用 call 过程名
2. 函数定义
语法: Function 函数名(参数 As 类型) As 类型
…………
End function
例: Function M_sf1(strn As String) As String
Dim strSz As String, n As Integer, a As Integer, b As String
n = Len(strn)
strSz = " "
a = n - 8 - 5
If n = 1 Then strSz = "hello"
If n = 2 Then strSz = "pool"
If n = 3 Then strSz = "how do yu do"
b = Mid(strn, 6, a)
End Function
函数调用 目标量=函数名( 参数 )
3 楼
pc8899 [专家分:10] 发布于 2005-04-12 19:06:00
写的不错啊.
导出表格到excel里的excelctl type library 在什么地方引用,怎么在引用菜单里找不到?
4 楼
aspzym [专家分:840] 发布于 2005-04-12 19:11:00
你单击 工程里的引用
选择里面的excelctl type library 和 microsoft excel 9.0 object library两项
就哦了
5 楼
aspzym [专家分:840] 发布于 2005-04-13 09:32:00
up
6 楼
pc8899 [专家分:10] 发布于 2005-04-13 09:36:00
hehe,找到microsoft excel 9.0 object library好像就ok了,另外一个有什么用?
以下两行不是笔误吧?
MSFlexGrid1.Row = i
MSFlexGrid1.Row = j
7 楼
aspzym [专家分:840] 发布于 2005-04-13 10:08:00
第 6 楼
的朋友 谢谢指教
加分
8 楼
aspzym [专家分:840] 发布于 2005-04-13 16:35:00
up
9 楼
yijun [专家分:3580] 发布于 2005-04-13 20:58:00
up
可惜,MSFlexGrid1最大行数由微机内存决定,大程序很难用。
10 楼
FieldMAX [专家分:12740] 发布于 2005-04-13 21:04:00
第一页我收藏
关于函数和过程部分我进行下补充
Function aaa(index As Integer, Optional aaa As Integer = 1) As String
'Optional 表示可选参数,如果没有对aaa指定变量,则aaa=1
End Function
我来回复