当前位置:   article > 正文

VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件_vba type

vba type

VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件_sun0322的博客-CSDN博客_vba数据字典赋值与读取

目录

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.打开另外一个Excel,并操作其中的内容 (有坑)

19.VBA 后台打开Excel (坑)

20.Excel  VBA 读取 XML  (各种参照资料) 

21.Excel  VBA 读取 XML  (简单应用) 

读取对象XML

读取XML用的VBA代码

读取XML节点的结果 

23.动态二维数组定义

24.行列扩展操作(右拉,下拉)

25.数字列,字母列转化

26.代码补全操作

27.全角 转换 成半角  (【StrConv】 函数)

28.空行グループ化   ( 空行  group )

29.把字符串中的某一个字符,由小写转换为大写

30.XXX

31.XXX

■其他

1.快捷键操作

2.代码补全操作


====

1.各种数据类型

  1. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. '*
  3. '*  自定义学生对象
  4. '*  做成时间:2020/01/20
  5. '*  做成者: sun
  6. '*  跟新日:
  7. '*  更新者:
  8. '*
  9. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  10. Type STUDENT_INFO
  11.     '学号
  12.     stuNo As String
  13.     stuName As String
  14.     stuAge As String
  15.     stuSexCode As String
  16. End Type
  17. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  18. '*
  19. '*  定义各种数据类型,处理学生对象情报
  20. '*  做成时间:2020/01/20
  21. '*  做成者: sun
  22. '*  跟新日:
  23. '*  更新者:
  24. '*
  25. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  26. Sub getStudentInfo()
  27.     
  28.     ' 从Excel的Sheet页中取得情报 例子
  29.     ' Dim sheet As Worksheet
  30.     ' Set sheet = Worksheets("testSheetName")
  31.     ' cellValue = sheet.Cells(2, 3) '2C 单元格 "1001,张三,30,1、1002,李四,31,1、1003,XiaoHong,29,2"
  32.     ' MsgBox cellValue
  33.     
  34.     ' 全部学生信息 以字符串形式保存
  35.     Dim allStudentInfo As String
  36.     allStudentInfo = "1001,张三,30,1、1002,李四,31,1、1003,XiaoHong,29,2"
  37.     
  38.     ' 全部学生信息 以数组形式保存【数组使用】
  39.     Dim studentInfoList() As String
  40.     studentInfoList = Split(allStudentInfo, "、")
  41.     
  42.     ' 全部学生姓名信息 以key-学号  value-姓名 的Map形式保存
  43.     Dim studentDataList As Object '【数据字典使用-定义】
  44.     Set studentDataList = CreateObject("Scripting.Dictionary")
  45.     
  46.     ' UBound 返回数组的上界 ,★★★不是数组的大小★★★比如数组大小时4,那么上届是3
  47.     For i = 0 To UBound(studentInfoList)
  48.     
  49.         ' 循环设定每个学生的信息
  50.         Dim stuObject As STUDENT_INFO '【自定义数据类型使用】
  51.         stuObject = setStudentInfo(studentInfoList(i))
  52.         
  53.         
  54.         ' 以学号作为Key,存储上面设定好的学生的信息
  55.         ' studentDataList.Add stuObject.stuNo, stuObject  '不好用,无法保存自定义对象
  56.         studentDataList.Add stuObject.stuNo, stuObject.stuName '【数据字典使用 - 设定值】
  57.         
  58.     Next
  59.     
  60.     ' 显示学号是「1002」小明同学的信息
  61.     If studentDataList.exists("1002") Then '【数据字典使用 - 取值】
  62.         MsgBox studentDataList.Item("1002") '【数据字典使用 - 取值】
  63.     End If
  64.         
  65. End Sub
  66. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  67. '*
  68. '*  设定单个学生对象情报
  69. '*  做成时间:2020/01/20
  70. '*  做成者: sun
  71. '*  跟新日:
  72. '*  更新者:
  73. '*
  74. '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  75. Public Function setStudentInfo(studentInfo As String) As STUDENT_INFO
  76.     ' 单个学生的信息
  77.     Dim infos() As String
  78.     infos = Split(studentInfo, ",")
  79.     
  80.     ' 使用上面定义的学生对象
  81.     Dim stuObject As STUDENT_INFO
  82.     stuObject.stuNo = infos(0)
  83.     stuObject.stuName = infos(1)
  84.     stuObject.stuAge = infos(2)
  85.     stuObject.stuSexCode = infos(3)
  86.     
  87.     ' 设定返回值
  88.     setStudentInfo = stuObject
  89.     
  90. End Function

----

2.VBA定义公共数组(全局都可以使用)

  1. public sqlList
  2. public Function sql_init()
  3. ActiveWorkbook.sheets("sql").Activate
  4. ActiveWorkbook.sheets("sql").Select
  5. var1 = ActiveSheet.Range("C2").value
  6. var2 = ActiveSheet.Range("C3").value
  7. var3 = ActiveSheet.Range("C4").value
  8. sqlList= Array(var1, var2, var3)
  9. End Function

扩展

「プロシージャの外では無効です」错误发生原因
只写了End,而没有写 End Function

----

3.读写文件

ファイルの操作(Shift-JIS/UTF8対応)[ExcelのVBA]

SJIS 写入

  1. Private Sub CommandButton2_Click()
  2. Dim fileNo As Integer ' ファイル番号
  3. ' ファイルを開く為のファイル番号を取得
  4. fileNo = FreeFile
  5. ' 指定されたファイルを開く(ない場合は作成する)
  6. Open "Sjisの書き込みテスト.txt" For Output As #fileNo
  7. ' 一行毎に文字列を書き込む
  8. Print #fileNo, "エクセル講座"
  9. Print #fileNo, "http://www.petitmonte.com/excel/excel.html"
  10. Close #fileNo
  11. End Sub

UTF8 写入

  1. Private Sub CommandButton4_Click()
  2. Dim Stream As Object
  3. ' VB標準のADODB.Streamオブジェクトを作成する
  4. Set Stream = CreateObject("ADODB.Stream")
  5. ' ストリームの文字コードをUTF8に設定する
  6. Stream.Charset = "UTF-8"
  7. ' ファイルのタイプ(1:バイナリ 2:テキスト)
  8. Stream.Type = 2
  9. ' ストリームを開く
  10. Stream.Open
  11. ' ストリームの保存形式をテキスト形式にする
  12. Stream.WriteText "エクセル講座" & vbCrLf & "http://www.petitmonte.com/excel/excel.html"
  13. ' ストリームに名前を付けて保存する(1は新規作成 2は上書き保存)
  14. Stream.SaveToFile ("utf8の書き込みテスト.txt"), 2
  15. ' ストリームを閉じる
  16. Stream.Close
  17. Set Stream = Nothing
  18. End Sub

--

读取 SJIS

  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3. Dim fileNo As Integer ' ファイル番号
  4. Dim buffer As String ' 一時的に文字列を格納
  5. ' ファイルを開く為のファイル番号を取得
  6. fileNo = FreeFile
  7. ' 指定されたファイルを開く
  8. Open "C:\excel_vba_22_sjis.txt" For Input As #fileNo
  9. ' ファイルがEOF(ファイルの終端)になるまでループをする
  10. Do Until EOF(fileNo)
  11. ' ファイルから一行づつbufferに読み込む
  12. Line Input #fileNo, buffer
  13. ' 読み込んだ一行をイミディエイトに出力
  14. Debug.Print buffer
  15. Loop
  16. Close #fileNo
  17. End Sub

读取 UTF-8

  1. Private Sub CommandButton3_Click()
  2. Dim buffer As String ' 一時的に文字列を格納
  3. Dim Stream As Object
  4. ' VB標準のADODB.Streamオブジェクトを作成する
  5. Set Stream = CreateObject("ADODB.Stream")
  6. ' ストリームの文字コードをUTF8に設定する
  7. Stream.Charset = "UTF-8"
  8. ' ファイルのタイプ(1:バイナリ 2:テキスト)
  9. Stream.Type = 2
  10. ' ストリームを開く
  11. Stream.Open
  12. ' ストリームにファイルを読み込む
  13. Stream.LoadFromFile ("C:\excel_vba_22_utf8.txt")
  14. ' ファイルの中身をbufferへ代入
  15. buffer = Stream.ReadText
  16. ' ストリームを閉じる
  17. Stream.Close
  18. ' イミディエイトへ出力
  19. Debug.Print buffer
  20. Set Stream = Nothing
  21. End Sub

--

循环读取的每一行文件

循环对象

  1. Sub Adele()
  2. Dim strAll, vArr, i&
  3. 。。。
  4. strAll = Stream.ReadText
  5. Stream.Close
  6. vArr = Split(strAll, vbCrLf)
  7. For i = 0 To UBound(vArr)
  8. MsgBox vArr(i)
  9. Next
  10. End Sub

---

4.异常处理

  1. Function
  2. On Error GoTo err_handle
  3. 。。。
  4. Exit Function
  5. err_handle:
  6. MsgBox "Error!"
  7. End Function

---

5.忽略错误

  1. Function
  2. On Error resume next
  3. 。。。
  4. End Function

resume [rɪˈzjuːm]  n. 摘要;简历   v. 重新开始,恢复;取回,重新占用

---

6.其他常用1

根据一览,自动生成Sheet页_sun0322-CSDN博客

7.其他常用2:读取(多个)Excel文件

Excel VBA 循环读取一个目录下面多个文件的内容,放到另外一个文件中_sun0322-CSDN博客_vba循环读取文件夹下的文件

8. ★★★ 各种常用操作总结 ★★★

  1. ' 有时即使光标到了A1,因为滚动条的原因,显示效果并不是在最上面,此时要使用下面语句
  2. ActiveWindow.SmallScroll Down:=-2000
  3. ' 对公式进行计算
  4. ActiveSheet.Calculate
  5. ’多个Excel直接发生切换时,使用下面的语句(参数是,要切换到的Excel的名字,不含路径)
  6. ' (对于不是通过代码打开的 Excel文件)
  7. Windows(operateFileName).Activate
  8. ' 对于代码打开的Excel,直接使用下面语句即可切换
  9. Set workbook2 = Workbooks.Open("pathAndName", UpdateLinks:=0)
  10. workbook2.Activate
  11. Sheets("xxx").Select
  12. '关闭打开Excel (不保存)
  13. workbook2.Close savechanges:=False
  14. '【sheet】复制
  15. workbook2.Activate
  16. Sheets("copySheet").Select
  17. Sheets("copySheet").Copy After:workbook1.Sheets(10)
  18. '【sheet】重命名
  19. workbook1.Activate
  20. Sheets("copySheet (2)").Select
  21. Sheets("copySheet (2)").Name = copySheet_比較用
  22. '【sheet】删除
  23. Sheets("copySheet_比較用").select
  24. Application.DisplayAlerts = False
  25. ActiveWindow.SelectedSheets.Delete
  26. ’【单元格】复制,粘贴
  27. Range("A1:C20").Select
  28. Selection.copy
  29. Range("E1").Select
  30. ActiveSheet.Paste
  31. ’【单元格】复制,粘贴 【公式 ⇒ 值】
  32. Rang("A1:C20").Select
  33. Selection.copy
  34. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  35. ’【单元格】删除指定行 (例:删除1120行)
  36. Rows("11:20").Select
  37. Selection.Delete Shift:=xlUp
  38. ' goto A1 ' 遍历所有Sheet页 ' 保存
  39. Dim sh As Worksheet
  40. For Each sh In ActiveWorkbook.sheets
  41. sh.Activate
  42. sh.Range("A1").Activate
  43. Next
  44. ActiveWorkbook.Sheets(1).Activate
  45. ActiveWorkbook.Save

===

9.事件相关处理 (保存,离开单元格等操作时,触发处理)

指定单元格里面的,内容发生变化,触发事件,调用VBA代码。_sun0322的博客-CSDN博客_单元格变化触发vba

--

10.定义(调用)有返回值的函数

---

  1. ' 定义有返回值的函数
  2. public Function checkValue() As Integer
  3. If XXX then
  4. ' 设定函数的返回值 ’× :set checkValue = 1
  5. checkValue = 1
  6. Exit Function
  7. End If
  8. checkValue = 0
  9. End Function
  10. ' 调用函数
  11. flg = checkValue
  12. If flg <> 0 Then
  13. 。。。
  14. End If

---

11.使用VBA操作IE浏览器

VBS操作IE ---(【当不使用IE时】可以使用Chrome插件,自定义JS插件操作浏览器)_sun0322的博客-CSDN博客_vbs 浏览器

12.Variant   变量类型

  1. Private Sub CommandButton1_Click()
  2. 'Declare 【Variant】 variable
  3. Dim areaA As Variant
  4. 'Set 【Variant variable】Value '可以使用F3中定义的变量
  5. areaA = Range("D6:F9")
  6. 'Use the 【Variant】 variable
  7. var1 = areaA(2, 2)
  8. var2 = areaA(4, 3)
  9. MsgBox "var1:" & var1 & Chr(10) & "var2:" & var2
  10. End Sub

--- Variant  [ˈveriənt] 变种; 变体; 变形;  

 ---

13.调用bat (使用cmd,直接运行程序)

VBA调用bat,doc 命令行 窗口关闭之后,VBA代码 再继续执行_sun0322的博客-CSDN博客_vba执行bat命令

---

14.调用Jar,并获取返回值

核心代码

  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. 。。。
  3. cmdStr = "java -jar c:\xxx\xxx\xx\tool.jar param1 param2"
  4. Set WshShell = CreateObject("WScript.Shell")
  5. Set oExec = WshShell.Exec(cmdStr)
  6. Dim exitCode
  7. exitCode = oExec.exitCode
  8. ' Java ソース中に、正常終了の場合、main関数の最後で、System.exit(666);
  9. ' Java ソース中に、異常終了の場合、System.exit(1);
  10. do While exitCode = 0
  11. ' 遅延確認したいと、返却値ずっと[0]です。
  12. Sleep 3000
  13. exitCode = oExec.exitCode
  14. Loop
  15. Set oStdOut = oExec.StdOut

具体内容

https://blog.csdn.net/sxzlc/article/details/124742355

===

15.循环(For、While)

For

  1. For i =12 To 150
  2. ' 第一次是,【5行,12列】中的数据
  3. cellValue = Cells(5, i).Value
  4. ' 空值的时候,退出
  5. IF cellValue = Empty Then
  6. Exit For
  7. End IF
  8. Next

While

  1. i = 2
  2. cellValue = Cells(5, i).Value
  3. Do While cellValue <> Empty
  4. i = i + 1
  5. cellValue = Cells(5, i).Value
  6. Loop

===

16.Excel-VBA:列号与字母(列名)的相互转换 

核心代码

addrA1 = Replace(Cells(i, j).Address(0, 0), "1", "")

其它代码

  1. '列号转字母(列名)
  2. Function Num2Name(ByVal ColumnNum As Long) As String
  3. On Error Resume Next
  4. Num2Name = "" '超出范围返回空,如调用Num2Name(100000)
  5. Num2Name = Replace(Cells(1, ColumnNum).Address(0, 0), "1", "")
  6. 'Cell.Address用来返回单元格的地址,参数(0,0)返回相对地址A1,参数(1,1)返回绝对地址$A$1
  7. End Function
  8. '字母(列名)转列号
  9. Function Name2Num(ByVal ColumnName As String) As Long
  10. On Error Resume Next
  11. Name2Num = -1 '超出范围返回0,如调用Name2Num("AAAA") ,EXCEL没有那么多列
  12. Name2Num = Range("A1:" & ColumnName & "1").Cells.Count
  13. End Function

17.使用VBA给单元格设置公式 :( FormulaR1C1 )

・简单例子

  1. ' D5单元格为 "=B5+C5"
  2. Range("D5").select
  3. ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
  4. ' RC 代表 行 和 列, 以选择单元格为【坐标原点】,
  5. ' 坐标原点是 D5, 4列
  6. ’ 所以取 B5, C5时,
  7. ’ 既是取 第二列, 相对于【坐标原点(4列 )】的位置:RC[-2]
  8. ’ 第三列 相对于【坐标原点(4列 )】的位置:RC[-1]

===

・具体例子

  1. ' one cell set formula
  2. Range("B2").Select
  3. Selection.NumberFormatLocal = "G/標準"
  4. ActiveCell.FormulaR1C1 = XXXX ' 设置公式的时候,录制宏,从宏中取得公式即可
  5. 'set all columns cell formula
  6. Range("B2").Select
  7. Selection.AutoFill Destinaion:=Range("B2:Z2"), Type:xlFillDefault
  8. 'set all rows cell formula
  9. Range("B2:Z2").Select
  10. Selection.AutoFill Destinaion:=Range("B2:Z100"), Type:xlFillDefault
  11. ActivateSheet.Calculate

===

获取单元格的公式,下面代码第三行

  1. a = Range("B1").Value
  2. b = Range("B1").Text
  3. c = Range("B1").Formula

===

18.打开另外一个Excel,并操作其中的内容 (有坑)

正常代码(要定义在Module中)

  1. public Function testFilter1()
  2. Dim wb1 As Workbook
  3. Set wb1 = Workbooks.Open("c:\AAA\BBB\test.xlsx", UpdateLinks:=0)
  4. wb1.Activate
  5. sheets("testSheet").Select
  6. Range(“A5:AA5”).select ' ソースはModuleで定義しないと、ここでエラー発生する。 (坑)
  7. Selection.AutoFilter ' 選択範囲のフィルターを除外する
  8. wb1.Close savechanges:=False
  9. End Function

’ ソースはModuleで定義しない、直接シートで定義なら、下記のように、ソース作成必要です。

(如果不在Module中定义,要像下面4,5行 这样,加上前缀) (不加报错,坑!!!)

  1. Dim wb1 As Workbook
  2. Set wb1 = Workbooks.Open("c:\AAA\BBB\test.xlsx", UpdateLinks:=0)
  3. wb1.Activate
  4. wb1.sheets("testSheet").Select
  5. wb1.sheets("testSheet").Range(“A5:AA5”).select
  6. Selection.AutoFilter
  7. wb1.Close savechanges:=False

====

19.VBA 后台打开Excel (坑)

(坑:一些代码无法运行,不如 上面18中的 【Selection.AutoFilter】)

  1. Dim cpApp As Excel.Application
  2. Set cpApp = CreateObject("Excel.Application")
  3. cpApp.Visible = False
  4. Set wb1 = cpApp.Workbooks.Open("c:\AAA\BBB\test.xlsx")

20.Excel  VBA 读取 XML  (各种参照资料) 

  1. Dim xmlDom
  2. Set xmlDom = CreateObject ("Microsoft.XMLDOM")
  3. xmlDom.Load(folder_location + "\wkf_batch_logging_template.xml")
  4. Set entry_fields = xmlDom.SelectNodes("beans/bean/entry")
  5. For Each entry_field In entry_fields
  6. 。。。

・【xmlDom】创建

vba读取xml文件_jiudihanbing的博客-CSDN博客_vba读取xml文件

Set xmlDom = CreateObject ("Microsoft.XMLDOM")

・【xmlDom】各种方法属性

利用Excel的VBA来处理XML_indifferent_to的博客-CSDN博客_vba xml

    xmlDom.Load(folder_location + "\wkf_batch_logging_template.xml")

・通过selectNodes,selectSingleNode获取 XML文件节点内容

VB读取XML文件,selectNodes获取节点属性_东语~的博客-CSDN博客_vb 读取xml

  1. Set entry_fields = xmlDom.SelectNodes("beans/bean/entry")
  2. For Each entry_field In entry_fields

===

21.Excel  VBA 读取 XML  (简单应用) 

读取对象XML

C:\test\testVBA_XML\pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.sxz</groupId>
  4. <artifactId>test001</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. <properties>
  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  8. </properties>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.3.10.RELEASE</version>
  13. </parent>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-batch</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>junit</groupId>
  29. <artifactId>junit</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.batch</groupId>
  39. <artifactId>spring-batch-test</artifactId>
  40. <scope>test</scope>
  41. </dependency>
  42. <dependency>
  43. <groupId>com.github.springtestdbunit</groupId>
  44. <artifactId>spring-test-dbunit</artifactId>
  45. <version>1.3.0</version>
  46. <scope>test</scope>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.dbunit</groupId>
  50. <artifactId>dbunit</artifactId>
  51. <version>2.6.0</version>
  52. <scope>test</scope>
  53. </dependency>
  54. <dependency>
  55. <groupId>commons-io</groupId>
  56. <artifactId>commons-io</artifactId>
  57. <version>2.8.0</version>
  58. </dependency>
  59. <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
  60. <!-- https://repo1.maven.org/maven2/javax/inject/-->
  61. <dependency>
  62. <groupId>javax.inject</groupId>
  63. <artifactId>javax.inject</artifactId>
  64. <version>1</version>
  65. </dependency>
  66. </dependencies>
  67. <repositories>
  68. <repository>
  69. <id>repo1</id>
  70. <name>repo1</name>
  71. <url>https://repo1.maven.org/maven2</url>
  72. </repository>
  73. </repositories>
  74. <build>
  75. <plugins>
  76. <plugin>
  77. <groupId>org.springframework.boot</groupId>
  78. <artifactId>spring-boot-maven-plugin</artifactId>
  79. <configuration>
  80. <includeSystemScope>true</includeSystemScope>
  81. </configuration>
  82. </plugin>
  83. </plugins>
  84. </build>
  85. </project>

读取XML用的VBA代码

(output:从Excel的 【C8】 单元格 开始)

  1. Public Function readXML()
  2. MsgBox "begin"
  3. Dim xmlDom
  4. Dim folder_location
  5. Set xmlDom = CreateObject("Microsoft.XMLDOM")
  6. folder_location = "C:\test\testVBA_XML"
  7. xmlDom.Load (folder_location + "\pom.xml")
  8. Set dependency_fields = xmlDom.SelectNodes("project/dependencies/dependency/artifactId")
  9. Dim i
  10. i = 0
  11. For Each dependency_field In dependency_fields
  12. 'Range("C" & (8 + i)) = dependency_field.NodeValue
  13. Range("C" & (8 + i)) = dependency_field.Text
  14. i = i + 1
  15. Next
  16. MsgBox "end"
  17. End Function

读取XML节点的结果 

  1. spring-boot-starter-web
  2. spring-boot-starter-batch
  3. spring-boot-starter-thymeleaf
  4. junit
  5. spring-boot-starter-test
  6. spring-batch-test
  7. spring-test-dbunit
  8. dbunit
  9. commons-io
  10. javax.inject

===

23.动态二维数组定义

  1. public var01() As String
  2. public itemCount As Integer
  3. Function initProcess()
  4. itemCount = Sheets("Tool").Rang("B3").value
  5. ReDim var01(itemCount, itemCount) As String
  6. End Function

===

24.行列扩展操作(右拉,下拉)

  1. ' 选中要扩展的区域,A1到B4
  2. Range("A1:B4").select
  3. ' 扩展20行 (向下扩展)
  4. Selection.AutoFill Destination:Range("A1:B20"), Type:=xlFillDefault

===

25.数字列,字母列转化

  1. '列数转字母
  2. Function CNtoW(ByVal num As Long) As String
  3. CNtoW = Replace(Cells(1, num).Address(False, False), "1", "")
  4. End Function
  5. '字母转列数
  6. Function CWtoN(ByVal AB As String) As Long
  7. CWtoN = Range("a1:" & AB & "1").Cells.Count
  8. End Function

===

26.代码补全操作

出现提示后,按下【Tab】键,即可补全代码

===

27.全角 转换 成半角  (【StrConv】 函数)

halfConvert = StrConv(originalStr, vbNarrow)

StrConv 定数 | Microsoft Docs

定数説明
vbUpperCase1文字列を大文字に変換します。
vbLowerCase2文字列を小文字に変換します。
vbProperCase3文字列のすべての単語の最初の文字を大文字に変換します。
vbWide4文字列の半角 (1 バイト) 文字を全角 (2 バイト) 文字に変換します。 東アジア ロケールに適用されます。
vbNarrow8文字列の全角 (2 バイト) 文字を半角 (1 バイト) 文字に変換します。 東アジア ロケールに適用されます。
vbKatakana16文字列のひらがなをカタカナに変換します。 日本のみに適用されます。
vbHiragana32文字列のカタカナをひらがなに変換します。 日本のみに適用されます。
vbUnicode64システムの既定のコード ページを使用して文字列を Unicode に変換します (Macintosh では使用できません)。
vbFromUnicode128文字列を Unicode からシステムの既定のコード ページに変換します (Macintosh では使用できません)。

===

28.空行グループ化   ( 空行  group )

  1. ' 空行グループ化 ( B列,从30行开始,一直到400行, 最开始的空行~400行 group 化 )
  2. For i = 30 To 400
  3. cellValue = Cells(i, 2).Value
  4. If cellValue = Empty then
  5. Rows(i & ":400").Select
  6. Selection.Rows.Group
  7. Exit For
  8. End if
  9. Next i
  10. ' 折叠表示(グループ化表示) (最开始的空行~400行 group 化)
  11. ActiveSheet.Outline.ShowLevels RowLevels:=1
  12. ' 展开表示
  13. ' ActiveSheet.Outline.ShowLevels RowLevels:=2

29.把字符串中的某一个字符,由小写转换为大写

比如,把setaXXX 转换为 setAXXX

代码如下

  1. Private Sub CommandButton1_Click()
  2. i = 3
  3. Dim cellValue
  4. cellValue = Cells(i, 2).Value
  5. Do While cellValue <> Empty
  6. cellValue = Cells(i, 2).Value
  7. For j = 1 To 26
  8. cellValue = Replace(cellValue, "set" & Chr(96 + j), "set" & Chr(96 + j - 32))
  9. Next
  10. Range("E" & i).Value = cellValue
  11. i = i + 1
  12. Loop
  13. End Sub

aASCII码数值是97,AASCII码数值是65

=== 

30.XXX

31.XXX

===

■其他

1.快捷键操作

VBA 打开 Debug窗口 进行调试 (同时可以查看debug操作对应的快捷键)_sun0322的博客-CSDN博客_vba调试窗口

===

2.代码补全操作

出现提示后,按下【Tab】键,即可补全代码

==

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/668999
推荐阅读
相关标签
  

闽ICP备14008679号