目录
1.各种数据类型
2.VBA定义公共数组(全局都可以使用)
3.读写文件
SJIS 写入
UTF8 写入
读取 SJIS
读取 UTF-8
4.异常处理
5.忽略错误
6.其他常用1
7.其他常用2:读取(多个)Excel文件
8. ★★★ 各种常用操作总结 ★★★
9.事件相关处理 (保存,离开单元格等操作时,触发处理)
10.定义(调用)有返回值的函数
11.使用VBA操作IE浏览器
12.Variant 变量类型
13.调用bat (使用cmd,直接运行程序)
14.调用Jar,并获取返回值
核心代码
具体内容
15.循环(For、While)
For
While
16.Excel-VBA:列号与字母(列名)的相互转换
17.使用VBA给单元格设置公式 :( FormulaR1C1 )
18.XXX
---
1.各种数据类型
---
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ' Set sheet = Worksheets("testSheetName") ' cellValue = sheet.Cells(2, 3) '2C 单元格 "1001,张三,30,1、1002,李四,31,1、1003,XiaoHong,29,2" Dim allStudentInfo As String allStudentInfo = "1001,张三,30,1、1002,李四,31,1、1003,XiaoHong,29,2" Dim studentInfoList() As String studentInfoList = Split(allStudentInfo, "、") ' 全部学生姓名信息 以key-学号 value-姓名 的Map形式保存 Dim studentDataList As Object '【数据字典使用-定义】 Set studentDataList = CreateObject("Scripting.Dictionary") ' UBound 返回数组的上界 ,★★★不是数组的大小★★★比如数组大小时4,那么上届是3 For i = 0 To UBound(studentInfoList) Dim stuObject As STUDENT_INFO '【自定义数据类型使用】 stuObject = setStudentInfo(studentInfoList(i)) ' studentDataList.Add stuObject.stuNo, stuObject '不好用,无法保存自定义对象 studentDataList.Add stuObject.stuNo, stuObject.stuName '【数据字典使用 - 设定值】 If studentDataList.exists("1002") Then '【数据字典使用 - 取值】 MsgBox studentDataList.Item("1002") '【数据字典使用 - 取值】 '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Public Function setStudentInfo(studentInfo As String) As STUDENT_INFO infos = Split(studentInfo, ",") Dim stuObject As STUDENT_INFO stuObject.stuNo = infos(0) stuObject.stuName = infos(1) stuObject.stuAge = infos(2) stuObject.stuSexCode = infos(3) setStudentInfo = stuObject
----
2.VBA定义公共数组(全局都可以使用)
public Function sql_init() ActiveWorkbook.sheets("sql").Activate ActiveWorkbook.sheets("sql").Select var1 = ActiveSheet.Range("C2").value var2 = ActiveSheet.Range("C3").value var3 = ActiveSheet.Range("C4").value sqlList= Array(var1, var2, var3)
扩展
「プロシージャの外では無効です」错误发生原因 只写了End,而没有写 End Function
----
3.读写文件
ファイルの操作(Shift-JIS/UTF8対応)[ExcelのVBA]
SJIS 写入
Private Sub CommandButton2_Click() Dim fileNo As Integer ' ファイル番号 ' 指定されたファイルを開く(ない場合は作成する) Open "Sjisの書き込みテスト.txt" For Output As #fileNo Print #fileNo, "http://www./excel/excel.html"
UTF8 写入
Private Sub CommandButton4_Click() ' VB標準のADODB.Streamオブジェクトを作成する Set Stream = CreateObject("ADODB.Stream") ' ファイルのタイプ(1:バイナリ 2:テキスト) Stream.WriteText "エクセル講座" & vbCrLf & "http://www./excel/excel.html" ' ストリームに名前を付けて保存する(1は新規作成 2は上書き保存) Stream.SaveToFile ("utf8の書き込みテスト.txt"), 2
--
读取 SJIS
Private Sub CommandButton1_Click() Dim fileNo As Integer ' ファイル番号 Dim buffer As String ' 一時的に文字列を格納 Open "C:\excel_vba_22_sjis.txt" For Input As #fileNo ' ファイルがEOF(ファイルの終端)になるまでループをする Line Input #fileNo, buffer
读取 UTF-8
Private Sub CommandButton3_Click() Dim buffer As String ' 一時的に文字列を格納 ' VB標準のADODB.Streamオブジェクトを作成する Set Stream = CreateObject("ADODB.Stream") ' ファイルのタイプ(1:バイナリ 2:テキスト) Stream.LoadFromFile ("C:\excel_vba_22_utf8.txt")
--
---
5.忽略错误
resume [rɪˈzjuːm] n. 摘要;简历 v. 重新开始,恢复;取回,重新占用
---
6.其他常用1
根据一览,自动生成Sheet页_sun0322-CSDN博客
7.其他常用2:读取(多个)Excel文件
Excel VBA 循环读取一个目录下面多个文件的内容,放到另外一个文件中_sun0322-CSDN博客_vba循环读取文件夹下的文件
8. ★★★ 各种常用操作总结 ★★★
' 有时即使光标到了A1,因为滚动条的原因,显示效果并不是在最上面,此时要使用下面语句 ActiveWindow.SmallScroll Down:=-2000 ’多个Excel直接发生切换时,使用下面的语句(参数是,要切换到的Excel的名字,不含路径) Windows(operateFileName).Activate ' 对于代码打开的Excel,直接使用下面语句即可切换 Set workbook2 = Workbooks.Open("pathAndName", UpdateLinks:=0) workbook2.Close savechanges:=False Sheets("copySheet").Select Sheets("copySheet").Copy After:workbook1.Sheets(10) Sheets("copySheet (2)").Select Sheets("copySheet (2)").Name = copySheet_比較用 Sheets("copySheet_比較用").select Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Selection.Delete Shift:=xlUp ' goto A1 ' 遍历所有Sheet页 ' 保存 For Each sh In ActiveWorkbook.sheets ActiveWorkbook.Sheets(1).Activate
===
9.事件相关处理 (保存,离开单元格等操作时,触发处理)
指定单元格里面的,内容发生变化,触发事件,调用VBA代码。_sun0322的博客-CSDN博客_单元格变化触发vba
--
10.定义(调用)有返回值的函数
---
public Function checkValue() As Integer ' 设定函数的返回值 ’× :set checkValue = 1
---
11.使用VBA操作IE浏览器
VBS操作IE ---(【当不使用IE时】可以使用Chrome插件,自定义JS插件操作浏览器)_sun0322的博客-CSDN博客_vbs 浏览器
12.Variant 变量类型
Private Sub CommandButton1_Click() 'Declare 【Variant】 variable 'Set 【Variant variable】Value '可以使用F3中定义的变量 'Use the 【Variant】 variable MsgBox "var1:" & var1 & Chr(10) & "var2:" & var2
--- Variant [ˈveriənt] 变种; 变体; 变形;

---
13.调用bat (使用cmd,直接运行程序)
VBA调用bat,doc 命令行 窗口关闭之后,VBA代码 再继续执行_sun0322的博客-CSDN博客_vba执行bat命令
---
14.调用Jar,并获取返回值
核心代码
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) cmdStr = "java -jar c:\xxx\xxx\xx\tool.jar param1 param2" Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec(cmdStr) exitCode = oExec.exitCode ' Java ソース中に、正常終了の場合、main関数の最後で、System.exit(666); ' Java ソース中に、異常終了の場合、System.exit(1); exitCode = oExec.exitCode Set oStdOut = oExec.StdOut
具体内容
https://blog.csdn.net/sxzlc/article/details/124742355
===
15.循环(For、While)
For
cellValue = Cells(5, i).Value IF cellValue = Empty Then
While
cellValue = Cells(5, i).Value Do While cellValue <> Empty cellValue = Cells(5, i).Value
===
16.Excel-VBA:列号与字母(列名)的相互转换
核心代码
addrA1 = Replace(Cells(i, j).Address(0, 0), "1", "")
其它代码
Function Num2Name(ByVal ColumnNum As Long) As String Num2Name = "" '超出范围返回空,如调用Num2Name(100000) Num2Name = Replace(Cells(1, ColumnNum).Address(0, 0), "1", "") 'Cell.Address用来返回单元格的地址,参数(0,0)返回相对地址A1,参数(1,1)返回绝对地址$A$1 Function Name2Num(ByVal ColumnName As String) As Long Name2Num = -1 '超出范围返回0,如调用Name2Num("AAAA") ,EXCEL没有那么多列 Name2Num = Range("A1:" & ColumnName & "1").Cells.Count
17.使用VBA给单元格设置公式 :( FormulaR1C1 )
・简单例子
Range("C1").FormulaR1C1 = "=R2C1+R3C5" ' R2C1表示的是【第2行,第1列】的单元格即A2单元格
===
・具体例子
Selection.NumberFormatLocal = "G/標準" ActiveCell.FormulaR1C1 = XXXX ' 设置公式的时候,录制宏,从宏中取得公式即可 'set all columns cell formula Selection.AutoFill Destinaion:=Range("B2:Z2"), Type:xlFillDefault 'set all rows cell formula Selection.AutoFill Destinaion:=Range("B2:Z100"), Type:xlFillDefault
===
获取单元格的公式,下面代码第三行
===
18.XXX
xxx
|