版本: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符的单元格不为空白。
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
    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、PublicPrivate一般用于定义全局变量,也可以在类中使用。
1-1、区别在于:[Public]前者定义的是公共变量,如果在一个模块当中使用,那么整个应用程序都能使用它所定义的变量,如果在类中使用,那么它就是一个共有属性。模块中的过程(Sub或者Function)没指定为Private时,默认为Public;在模块中定义过程外的变量时,必须显式指定为Public或Private。否则,提示错误:Type块外的语句无效。
[Private]而后者定义的是私有变量,如果在一个模块中使用,那么只有这个模块才能访问到它所定义的变量,如果在类中使用,那么它就是一个私有属性。

2、DimStatic一般在过程(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(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
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小时内删除。