【VB笔记】
2012.3.11 判断一个文件或者文件夹是否存在
API函数 PathFileExists
声明
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
PathFileExists("一个文件或文件夹") 如果存在 返回1 不存在返回0
If PathFileExists("C:\123") then ...
Dir不准确
如果有下列目录结构
D盘中有文件夹 test 文件夹中有testFile.txt文件
还有空文件夹 testEmpty
则
Dir("d:\test\testFIie.txt") 返回 testFile.txt
Dir("d:\test\testFIie11111111.txt") 返回 ""
Dir("d:\test\") 返回 testFile.txt (返回此文件夹第一个文件)
Dir("d:\testEmpty") 返回空
dir("一个不存在的文件夹")返回空
也就是说如果一个文件夹下没有文件(不管有没有子文件夹)则 dir("一个文件夹")就返回空
所以不能通过 dir("一个文件夹")来判断一个文件夹是否存在。
只能调用api函数
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
PathFileExists("一个文件或文件夹") 如果存在 返回1 不存在返回0
2012.3.11 返回盘符的类型
判断CDEFGHI等盘里有没有1.txt文件!
If Dir("i:\1.txt") <> "" Then End
这样子的话一旦搜索到光驱就会出错了...
有没有办法解决?
可以用GetDriveType返回盘符类型,返回值:0-未知的磁盘类型;
1-无效的磁盘;2-可移动磁盘;3-固定磁盘;4-网络磁盘;5-光驱;6-RAM
如果不是光驱再做判断,复制粘贴下段代码:
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Sub Command1_Click()
Dim dri As String
dri = "C:\"
If GetDriveType(dri) <> 5 Then
If Dir(dri & "1.txt") <> "" Then End
End If
End Sub
http://zhidao.baidu.com/question/54270619.html
2012.3.11 VB 字符长度函数
if Len(Text1.Text)>33 Then msgBox"超出"),
2012.3.9 VB打开指定路径文件夹
Combo3.Text:路径
, vbNormalFocus 使焦点在打开的文件夹上面(弹出到前台)
Private Sub OpenSaveFile_Click()
Dim Path As String
Path = Combo3.Text
Shell "explorer " & Path , vbNormalFocus
End Sub
VB打开指定路径文件-EXE
VB打开XP计算器,并把焦点放在上面
Private Sub Calculator_Click()
Shell "c:\windows\system32\calc.exe", vbNormalFocus
End Sub
在VB中要想调用Excel,需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“Microsoft Excel 11.0 object library”项。由于你的Excel版本不同,所以这个选项的版本号也是不同的。
1\ 因为EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素。
第一层:Application对象,即Excel本身;
第二层:workbooks对象集,指Excel的工作簿文件;
第三层:worksheets对象集,表示的是Excel的一个工作表;
第四层:Cells和Range对象,指向Excel工作表中的单元格。
2\
新建立一个VB的工程,先放一个button,名称为Excel_Out。先定义好各层:
Dim xlapp As Excel.Application 'Excel对象
Dim xlbook As Excel.Workbook '工作簿
Dim xlsheet As Excel.Worksheet '工作表
3\
我们打算做的是:打开/新建一个excel,在其中对某工作表的一些单元格修改其值,然后另存为test.xls文件。
Private Sub Excel_Out_Click()
Dim i, j As Integer
Set xlapp = CreateObject("Excel.Application") '创建EXCEL对象
'Set xlbook = xlapp.Workbooks.Open(App.Path & "\test.xls") '打开已经存在的test.xls工件簿文件
Set xlbook = xlapp.Workbooks.Add '新建EXCEL工件簿文件
'xlbook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏
'xlbook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏
xlapp.Visible = True '设置EXCEL对象可见(或不可见)
Set xlsheet = xlbook.Worksheets(1) '设置活动工作表''
''~~~当前工作簿的第一页,这里也可以换成“表名”
'下面就是简单的在一些单元格内写入数字
For i = 7 To 15
For j = 1 To 10
xlsheet.Cells(i, j) = j '当前工作簿第一页的第I行第J列
Next j
Next i
With xlsheet '设置边框为是实线
.Range(.Cells(7, 1), .Cells(28, 29)).Borders.LineStyle = xlContinuous
End With
'引用当前工作簿的第二页
Set xlsheet = xlapp.Application.Worksheets(2)
xlsheet.Cells(7, 2) = 2008 '在第二页的第7行第2列写入2008
xlsheet.SaveAs App.Path & "\test.xls" '按指定文件名存盘
'Set xlbook = xlapp.Application.Workbooks.Add '新建一空白工作簿
xlapp.Quit '结束EXCEL对象'xlapp.Workbooks.Close
Set xlapp = Nothing '释放xlApp对象
End Sub
这样,我们就可以简单的对excel文件进行操作了。下面再放一些我从网上查到的资料吧,还挺有用的:
1.创建Excel对象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add
3.设置第3个工作表为激活工作表
eole.Worksheets(〃sheet3〃).Activate
4.打开指定工作簿
eole.Workbooks.Open(〃c:\temp\ll.xls〃)
5.显示Excel窗口
eole.visible= true
6.更改Excel标题栏
eole.Caption=〃VB应用程序调用Microsoft Excel〃
7.给单元格赋值
eole.cells(1,4).value=XM(XM为数据库字段名)
8.设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Columns(1).ColumnWidth=5
9.设置指定行的高度(单位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035
(设定行高为1厘米,1磅=0.035厘米)
2012.3.6 打开和关闭EXCEL
Private Sub OpenExcel_Click()
'Dim xls As New EXCEL.Application '声明一个Excel应用程序对象
'Dim xbook As New EXCEL.Workbook '声明一个Excel工作薄对象
'Dim xsheet As New EXCEL.Worksheet '声明一个Excel工作表象
'Private Sub Command1_Click()
' Set xbook = xls.Workbooks.Add '启动Excel,并将自动创建的工作薄赋给xbook
'Set xsheet = xbook.Worksheets(1) '将第一个工作表赋给xsheet
' xls.Visible = True '显示Excel窗口,程序调试阶段显示该窗口非常重要
'End Sub
dialog.Show
Me.Hide
End Sub
Private Sub CloseExcel_Click()
xls.Quit
Set xls = Nothing '释放对象变量
Set xbook = Nothing
Set xsheet = Nothing
End Sub
2012.3.6 CommonDialog的使用
VB问个简单的问题CommonDialog如何使用?
2.创建了一个textbox1,如何通过CommonDialog1,的另存为功能,来另存textbox1里面输入的地址,谢谢诶....
Private Sub Command1_Click()
CommonDialog1.ShowOpen
Open "C:\1.ini" For Output As #1
Write #1, CommonDialog1.FileName
Close #1
End Sub
2,
Private Sub Command1_Click()
CommonDialog1.Filter = "文本文件(*.txt)|*.txt"
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
Write #1, Text1.Text
Close #1
End Sub
2012.3.4 sleep(1000)提示“子程序或函数未定义”
因为不是一个VB的内部函数,所以需要在使用前申明一下:
Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long)
让VB知道这个函数是在哪里的.
如果是只在本窗体中定义和使用可以用
Private Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long)
如果是在模块中申明,并且所有窗体都可以使用:
Public Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long)
使用的时候和VB内部函数一样:
Sleep 1000 '程序停止1秒
VB 延时程序
Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long)
去掉public应该可以,如果为了延时最好用下面方法
Public Function Delay(Mins%, Secs%, Optional ByRef StopFlag) As Long
Dim EndOfDelay
EndOfDelay = DateAdd( "s ", Mins, Now)
'EndOfDelay = DateAdd( "s ", Secs, EndOfDelay)
Delay = 0
Do While (Now < EndOfDelay)
DoEvents
If Not IsMissing(StopFlag) Then
'If StopFlag Then
' Delay = 1
' StopFlag = False
' Exit Do
'End If
End If
Loop
End Function
根据实际情况修改,我就是这么做的,很好用
2012.3.3
On Error GoTo 0
表示禁止当前过程中任何已启动的错误处理程序。
On Error GoTo label
也就是出现错误跳转至指定标签label处执行语句(可以为空语句)
On Error resume
出现错误紧接着出现错误的下一句继续执行.
On Erroro GoTo line
出现错误跳转到指定行
On Error GoTo 0
表示禁止当前过程中任何已启动的错误处理程序。
On Error Resume Next
说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo。
On Error GoTo line
启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。
Exit for 意思是退出当前语句所在的for循环;
Exit sub 是退出当前语句所在的“过程”模块;
Ext function 是退出当前语句所在的函数模块。
for循环、(sub)过程、(function)函数的主要区别是:
for循环是vb的流程控制语句;不独立作为模块存在,是模块、函数中的一个处理流程控制;
sub是VB的“过程”,每个过程都有一个特定标识;创建了一个过程后,即可在VB的语句中调用它,从而实现代码复用的目的。
function是VB的“函数”,主要功能和sub过程一样;不同的是,function可以返回一些参数,从而方便加入到表达式中;过程只是处理,不返回任何值。