版本:1.0Ver
作者:郭栋
Blog:hi.baidu/wolfand11
目录
1、 单元格空格问题
Sub Test_B_Item2()
Dim rng As Range
Dim lRows As Long
Dim sValue As String
Set rng = Range("B1")
For lRows = 1 To Cells(Rows.Count, "B").End(xlUp).Row
sValue = rng.Value
If IsEmpty(rng) Then
MsgBox lRows
rng.EntireRow.Interior.ColorIndex = 3
End If
If Trim(sValue) = "" Then
MsgBox lRows
rng.EntireRow.Interior.ColorIndex = 3
End If
Set rng = rng.Offset(1, 0)
Next lRows
End Sub
上面的代码可以测出,B列中所有单元格中只含有空格、Tab符、回车换行符的所有行。
注意:IsEmpty(rng)可以检测单元格是否为空白,含有换行符的单元格也为空白;但是,含有空格和Tab符的单元格不为空白。
注意:IsEmpty(rng)可以检测单元格是否为空白,含有换行符的单元格也为空白;但是,含有空格和Tab符的单元格不为空白。
2、 VBA中的SQL语句格式
objCommand.CommandText = "INSERT INTO 学生" & _
"(ID,[姓氏],[名字],[地址],[年级])" & _
"VALUES('3','李','四','1@example','幼儿园')"
'注意:"(ID,姓氏,名字,地址,年级)" & _ 是错误的,必须加上中括号
3、Error:"标准表达式中数据类型不匹配"
objCommand.CommandText = "UPDATE 学生SET [学生ID]='000003' WHERE ID=CStr(3);"
'注意:不要忘记UPDATE语句后面的分号(;)
'特别注意WHERE ID=CStr(3)不能为WHERE ID='3'
4、 Error:对象变量或With块变量未设置
注意:可能是为Excel对象模型中的变量赋值时,没有用Set关键字。例如:我发现这个错误就是因为,在定义下面的函数时,没有用Set关键字。
Public Function OpenWorkbook(sFName As String) As Workbook
Public Function OpenWorkbook(sFName As String) As Workbook
Dim wkb As Workbook
Dim sPath As String
Dim sFullName As String
'´ò¿ªWorkbook
sPath = ThisWorkbook.Path
sFullName = sPath & "\" & sFName
Set wkb = Workbooks.Open(Filename:=sFullName)
Set OpenWorkbook = wkb ‘注意 Set不能少啊
End Function
5、 问Dim rttitle As String * 256是什么意思?
rttitle为 字符串行变量 可以容纳256个字节长度(限制长度)*是通配符
6、 Windows 中当前路径为:“\”或者“.”;
7、 Windows中上当前路径的上一级路径为:“\.”或者“..”
Windows中上当前路径的上上一级路径为:“\..”
mdb_path = ActiveWorkbook.Path + "\..\Designers_db.mdb"
mdw_path = ActiveWorkbook.Path + "\..\Security.mdw"
8、 在当前Workbook中调用,其他Workbook中的函数
test1.xlsm中代码:
Sub test2()
Application.Run "'" & ActiveWorkbook.Path & "\test2.xlsm'!Test", "Hello"
End SubDos
test2.xlsm中代码:
Function test(sTest As String)
MsgBox sTest
MsgBox ThisWorkbook.Name
End Function
9、cd命令
盘符转换命令 F: 盘符加冒号
CD 是目录转换命令 用于目录间的转换
CD空格目录 进入目录
CD空格目录\子目录\子目录 一直进入子目录
CD.. CD \. 返加上一级目录
CD \.. 返加上上一级目录
CD\ 退回根目录
10、一定要记得进行错误处理,否则VBA运行出错后,无法定位错误出在哪儿、是什么原因造成的错误。如:一般需要在打开文件时、连接数据库时等考虑错误处理:即当文件不存在,打开失败时程序如何执行;当数据库连接失败时如何处理。
11、VBA返回系统时间代码
Sub test4()
Dim sDate As String
sDate = Date & " " & Time
MsgBox sDate
End Sub
12、若在过程中进行错误处理的话,一定要记得在正常执行过程结尾加上Exit Function或者Exit Sub
13、遇到一个非常蛋疼的问题。自己定义了下面的函数
Public Function FillDefaultValue(sFName As String, sDefValFName As String)
通过FillDefaultValue sFName, sDefValFName 调用时正确。
通过Application.Run "'" & ThisWorkbook.Path & "\FillDefValTemplate.xlsm'!FillDefaultValue", sFName, sDefValFName 调用时错误
错误提示:运行时错误’1004’ 无法运行“”宏。可能是因为该宏在此工作薄中不可用,或者所有的宏都被禁用。
解决方法:修改函数名FillDefaultValue为MyFillDefaultValue就可以了。
14、VBA中dim,static和public,private的区别
1、Public和Private一般用于定义全局变量,也可以在类中使用。
1、Public和Private一般用于定义全局变量,也可以在类中使用。
1-1、区别在于:[Public]前者定义的是公共变量,如果在一个模块当中使用,那么整个应用程序都能使用它所定义的变量,如果在类中使用,那么它就是一个共有属性。模块中的过程(Sub或者Function)没指定为Private时,默认为Public;在模块中定义过程外的变量时,必须显式指定为Public或Private。否则,提示错误:Type块外的语句无效。
[Private]而后者定义的是私有变量,如果在一个模块中使用,那么只有这个模块才能访问到它所定义的变量,如果在类中使用,那么它就是一个私有属性。
2、Dim和Static一般在过程(Sub或者Function)内部使用,它们所定义的变量都只能在过程内部被访问。
2、Dim和Static一般在过程(Sub或者Function)内部使用,它们所定义的变量都只能在过程内部被访问。
2-1、区别在于:[Dim]前者定义的是动态变量,过程一旦结束,该变量所占有的内存就会被系统回收,而变量所储存的数据就会被破坏。
[Static]后者定义的是静态变量,这意味着在过程结束后这个变量所占有的内存不会被回收,数据当然也不会被破坏了,这样当你下次再调用该过程的时候,数据就依然存在。
相比之下,Public和Static都有保留数据不被破坏的作用,但是,前者适合于那些所有过程都可能访问到的变量,而后者则把变量的作用范围缩在最小(只在该过程内能被访问)。
15、判断单元格数据类型:
A.
用TypeName()函数可以判断。
比如
TypeName(i)="Single" 就是单精度浮点数
TypeName(i)="String" 就是字符串
B.
Sub 判断单元格数据类型()
Dim MST As String
Dim X As Integer
For X = 1 To 7
Select Case True
Case Application.IsText(Cells(X, 1))
MST = "文本"
Case Application.IsLogical(Cells(X, 1))
MST = "逻辑值"
Case IsEmpty(Cells(X, 1))
MST = "空值"
Case IsNumeric(Cells(X, 1))
MST = "数值"
Case Application.IsErr(Cells(X, 1))
MST = "错误值"
Case IsDate(Cells(X, 1))
MST = "日期"
End Select
MsgBox Cells(X, 1).Address & "的数据类型为:" & MST
Next X
End Sub
16、Excel批量设置数字转化成“以文本形式存储的数字”
选中该列,依次点“数据-->分列-->下一步-->下一步-选文本”...OK了
另注:
将Excel(含混用数据类型列)导入Sql时应注意:
ADO会猜测Excel工作表或范围中各列的数据类型。(这不受Excel单元格格式设置的影响。)如果同一列中既有数字值,也有文本值,会出现相关问题 。Jet 和 ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型 ,则会返回NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
ADO会猜测Excel工作表或范围中各列的数据类型。(这不受Excel单元格格式设置的影响。)如果同一列中既有数字值,也有文本值,会出现相关问题 。Jet 和 ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型 ,则会返回NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
17、VBA处理以文本形式存储的数字时的方法
“文本形式存储的数字”会使程序提示“类型不匹配” VBA函数中,使用 .cells(i,j).value = .cells(i,j).value 可解决此问题。 一段函数,在处理机读成绩时使用: 目的是将各班成绩求出平均来。 Private Sub CommandButton1_Click() With Sheets(1) For i = 1 To 9 Sum = 0 renNum = 0 For j = 3 To 311 .Cells(j, 3) = .Cells(j, 3).Value If .Cells(j, 3) = i Then Sum = Sum + .Cells(j, 4)value函数什么意思 renNum = renNum + 1 End If Next aver = Sum / renNum .Cells(i + 3, 10) = renNum .Cells(i + 3, 10) = aver .Cells(i + 3, 9) = i Next End With End Sub |
18、
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论