VBA相关设置
1 如何设置VBA相关功能
把开发选中
2 excel中调出vba
方法1:Alt+F11
方法2:
3 无法使用vba
4 保存格式
如果想要vba保存后,下一次打开没有把信息覆盖掉,最好保存成xlsm格式文件
5 注释
单行 '
单行 Rem
多行
6 输出日志
Debug.Print fileNo
Debug内容会显示下界面的下方,生成的内容可以随时全部选中后清空
7 录制宏和设计控价
8 乱码问题
无论是中文还是日语乱码,有两种解决方法:
1)乱码是因为在复制的时候,没有选择和文档一致的语言。比如语言是日语,但复制是电脑的输入法是中文,如果统一成日语,就不会出现粘贴乱码
2)设置excel的vba语言格式。
语法
0 常用语法
功能 | 方法 | 备注 |
---|---|---|
注释 | ’或者上方菜单可以多条注释 | |
判断相等 | == | - |
判断不等 | <> | - |
判断为空 | “” | - |
单元格引用 | If Cells(n, 1) = Cells(n, 3) Then | - |
获取当前活动sheet | fname = ActiveSheet.Name ActiveSheetName = "" & fname & "" Debug.Print ActiveSheetName |
- |
选中当前活动sheet | Sheets(ActiveSheetName).Cells(n, 1) <> "" | - |
选中整行 | Cells(n, 1).EntireRow.Select | - |
赋值 | x = Range("C5").Value Range("C5").Value=Cells(n, 1).Value Range("J10").Value= "333" |
- |
连接字符串 | a & b a + b |
- |
如何调用函数/功能 | CreateSql (text) CreateSql () CreateSql 参数1,参数2,参数3 |
1个参数可以写在括号里,大于1个参数不写括号 |
如何调用函数/功能 | CreateSql (text) CreateSql () |
- |
1 定义变量
dim 变量名 as 变量类型 'eg:Dim file As String
Const
- 数据类型
序号 | 内容 | 说明 |
---|---|---|
1 | Integer | 整数 |
2 | Double | 小数 |
3 | String | 字符串 |
4 | Array | 数组 |
5 | Dictionary | 字典 |
6 | Boolean | 布尔 |
7 | Date | 日期 |
8 | Object | 对象 |
如何获取知道数据属于什么类型,可以通过 Debug.Print vartype(变量名) 得到,反馈的是
2 控制流
- If……elseif……else分支
If Item = 1 Then '障害発生日
copy_range = "I20:K20"
ElseIf Item = 2 Then '名前
copy_range = "F13:G15"
EeIf Item = 13 Then '障害解消日2(実績)
copy_range = "E39:F39"
End If
- Do While循环
Do While file <> "" '当指定路径中由文件时进行循环
Set WB = Workbooks.Open(Path & file) '打开符合要求的文件
fileNo = fileNo + 1
Call Click2(file, fileNo) '调用你的另一端对每个excel文件进行具体操作的宏,也可以直接写到这个宏中
Workbooks(file).Close savechanges:=False
file = Dir '找寻下一个excel文件
Loop
- For循环
For Item = 1 To 24 Step 1
Debug.Print Item
Next
- For each循环
For Each sheet In book.Worksheets
text = text & sheet.Name & vbNewLine
Next
- Switch分支
- While……Wend循环
3 常用内置函数
1 特殊类
函数 | 说明 |
---|---|
inputBox | 输入框 |
msgbox | 消息框 |
rnd | 随机数 |
timer | 计时器 |
RGB | RGB取色 |
2 数组
函数 | 说明 |
---|---|
Lbound,Ubound | 下限 上限 |
3 字符串
函数 | 说明 |
---|---|
Len | 返回长度 |
join,split | 拼接和分割 |
left right mid | 取子串 |
instr inStrRev | 找子串位置 |
Trim,LTrim,RTrim | 去空格 |
Format | 格式化 |
Asc Chr | ASC转换 |
LCase UCase | 大小写转换 |
4 数字 | |
函数 | 说明 |
- | - |
IsNumeric | 类型确认 |
Round Fix | 四舍五入 |
5 时间与日期
函数 | 说明 |
---|---|
Date Time Now | 获取系统时间 |
DateAdd DateDiff | 时间加减 |
DatePart month day hour | 时间 |
4 excel交互
- excel
Windows("COMITX本番障害票&調査依頼書_登录工具.xlsm").Activate - sheet
Sheets("システム障害報告書").Select - 单元格
Range(select_range).Select
Range("A1").Select
Cells.Select
Cells(n, 2)
select_range = "A100:A101"
Selection.Copy
ActiveSheet.Paste
5 其他
过程和函数
Sub 过程名()
……
End Sub
函数
Function 函数名(一堆变量)
……
End Function
运算符
算术运算符 | 说明 | 比较运算符 | 说明 | 逻辑运算符 | 说明 | 连接运算符 | 说明 |
---|---|---|---|---|---|---|---|
+ | 加 | = | 等于 | And | 且 | + | 连接 |
- | 减 | <> | 不等于 | Or | 或 | & | 连接 |
* | 乘 | > | 大于 | Not | 非 | - | - |
/ | 除 | < | 小于 | Xnot | 或非 | - | - |
% | 模 | >= | 大于等于 | - | - | - | - |
^ | 幂 | <= | 小于等于 | - | - | - | - |
如何debug
CTRL+G显示debug窗口
debug.print testcontext
清空debug窗口内容的时候,选中Ctrl+A delete即可
连接数据库
解决:
找到报错位置,怀疑是连接ADODB错误,关键词检索,提供方案添加对应的库
但是在日语环境下怎么都找不到配置的位置,后来多文件查询,对应到下图位置,但是功能是置灰的
当报错说没有定义的时候,尤其是这个定义的类型是一个比较特殊的类型时,很可能是因为没有添加对应的库
怎么安装ODBC驱动
如果按照文档操作后,没有postpgeSQL,需要安装文件driver
https://www.postgresql.org/ftp/odbc/versions/msi/
如何返回电脑设置
local x32 x64
Public Const sPostgresIDx32 = "DRIVER={PostgreSQL Unicode};DATABASE=postgres;SERVER=localhost;PORT=5432;UID=postgres;PWD=postgres;"
Public Const sPostgresIDx64 = "DRIVER={PostgreSQL Unicode(x64)};DATABASE=postgres;SERVER=localhost;PORT=5432;UID=postgres;PWD=postgres;"
Sub SetpostgresID()
ExclVer = Application.OperatingSystem
If ExclVer Like "*Windows (32-bit)*" Then
If wCompName Like "*HK-PCB*" Then
sPostgresID = sPostgresIDx32_HK
Else
sPostgresID = sPostgresIDx32
End If
Else
If wCompName Like "*HK-PCB*" Then
sPostgresID = sPostgresIDx64_HK
Else
sPostgresID = sPostgresIDx64
End If
End If
End Sub
常用功能
1 编列excel的sheet表
功能说明:遍历sheet表,并且弹出msgbox返回所以所以结果
Sub mynzH() '遍历循环
Dim book As Workbook, sheet As Worksheet, text As String
For Each book In Workbooks
text = text & "Workbook: " & book.Name & vbNewLine & "Worksheets: " & vbNewLine
For Each sheet In book.Worksheets
text = text & sheet.Name & vbNewLine
Next
text = text & vbNewLine
Next
MsgBox text
End Sub
应用场景
Sub mynzH()
Dim book As Workbook, sheet As Worksheet, text As String
For Each book In Workbooks
For Each sheet In book.Worksheets
text = sheet.Name
Debug.Print text
'调用其他函数 otherFunction(text)
Next
Next
End Sub