参考文章: 【原创】VBA(实验8)创建新工作簿和写入内容,创建多个sheet

创建工作薄

  1. Sub 创建工作薄()
  2. Dim wb As Workbook
  3. Dim sh As Worksheet
  4. Set wb = Workbooks.Add
  5. wb.SaveAs Filename:="创建工作薄.xlsx"
  6. 'Set sh = wb.ActiveSheet '这个是因为知道,创建workbooks时会自带3sheet
  7. Set sh = wb.Worksheets.Add
  8. With sh
  9. .Name = "new"
  10. .Range("a1:d1") = Array("ID", "属性1", "属性2", "属性3")
  11. End With
  12. ActiveWorkbook.Save '保存文件
  13. End Sub

获取路径

  1. 返回应用程序完整路径
  2. Application.Path
  3. 返回当前工作薄的路径
  4. ThisWorkbook.Path
  5. 返回当前默认文件路径:
  6. Application.DefaultFilePath
  7. Application.ActiveWorkbook.Path 只返回路径
  8. Application.ActiveWorkbook.FullName 返回路径及工作簿文件名
  9. Application.ActiveWorkbook.Name 返回工作簿文件名

判断文件(夹)是否存在

  1. 方法一
  2. Function IsFileExists(ByVal strFileName As String) As Boolean
  3. If Dir(strFileName, 16) <> Empty Then
  4. IsFileExists = True
  5. Else
  6. IsFileExists = False
  7. End If
  8. End Function
  9. Sub Run()
  10. If IsFileExists("D:\vba\abc.txt") = True Then
  11. ' 文件存在时的处理
  12. MsgBox "文件存在!"
  13. Else
  14. ' 文件不存在时的处理
  15. MsgBox "文件不存在!"
  16. End If
  17. End Sub
  18. 方法二
  19. Function IsFileExists(ByVal strFileName As String) As Boolean
  20. Dim objFileSystem As Object
  21. Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  22. If objFileSystem.fileExists(strFileName) = True Then
  23. IsFileExists = True
  24. Else
  25. IsFileExists = False
  26. End If
  27. End Function
  28. Sub Run()
  29. If IsFileExists("D:\vba\abc.txt") = True Then
  30. ' 文件存在时的处理
  31. MsgBox "文件存在!"
  32. Else
  33. ' 文件不存在时的处理
  34. MsgBox "文件不存在!"
  35. End If
  36. End Sub
  37. 方法三
  38. Public Function FileFolderExists(strFullPath As String) As Boolean
  39. On Error GoTo EarlyExit
  40. If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
  41. EarlyExit:
  42. On Error GoTo 0
  43. End Function
  44. Public Sub TestFolderExistence()
  45. If FileFolderExists("c:/windows/") Then
  46. MsgBox "指定的文件夹存在!"
  47. Else
  48. MsgBox "指定的文件夹不存在!"
  49. End If
  50. End Sub
  51. Public Sub TestFileExistence()
  52. If FileFolderExists("d:/Book1.xls") Then
  53. MsgBox "指定的文件存在!"
  54. Else
  55. MsgBox "指定的文件不存在!"
  56. End If
  57. End Sub

VBA 中 ByVal 和 ByRef 的基础用法和区别

删除文件(夹)

  1. 删除文件
  2. kill filepath
  3. 删除文件夹
  4. rmdir dirpath

获取当前日期

  1. Sub run()
  2. Dim idate as date
  3. idate=Format(now,"yyyy/m/d")
  4. MsgBox "当前日期为:" & idate
  5. End Sub

获取变量类型

(1)、TypeName()函数

用来返回变量或对象类型的字符串。

(2)、VarType()函数

用来返回用数字表示的变量或对象类型。不同的是,对于不同的对象,它统一返回对象类型,而不是像TypeName函数一样,返回不同的对象字符描述。

清除单元格内容、格式、批注

Range(“a1:d10”).ClearContents ‘清除A1:D10区域的公式/值
Range(“a1:d10”).Clear’全清(值,格式,批注)
Range(“a1:d10”).clearformats ‘清除格式

UsedRange用法

关于UsedRange属性,你想要的都在这里
(1)已用单元格区域的第一行行序数:UsedRange.Row
(2)已用单元格区域的占用的行数:UsedRange.Rows.Count
(3)已用单元格区域的最后一行的列序数: UsedRange .Row+ UsedRange. Rows.Count-1 (重要)
(4)已用单元格区域的第一列列序数:UsedRange.Column
(5)已用单元格区域的占用的列数:UsedRange.Columns.Count 已用单元格区域的最后一列的列序数:UsedRange.Column+UsedRange.Columns.Count-1,UsedRange.Areas.Count>1除外(Areas(index)也返回的是Range对象)
(6)已用单元格区域的占用的总单元格数:UsedRange.Cells.Count或 Me.UsedRange.Count,返回的只是“行数×列数”,所以无论内部有无合并单元格,此值不受影响。
(7)语句Activesheet.UsedRange.Address返回当前工作表已使用单元格区域的地址

整数转字符串

CStr(45)

个人宏工作簿

把宏保存在Excel自动创建的文件中(后缀名为.xlsb),当打开其他工作薄是也能看到之前创建的宏。方便共享实现调用

数据类型

  • Byte:1字节,范围:0~255
  • Boolean:2字节,范围:True/FALSE
  • Integer:2字节,范围:-32768~32767
  • Long:4字节,范围:-2147483648~2147483647
  • Single:4字节,范围:负:-3.40E38~-1.40E-45;正:1.40E-45~3.40E38
  • Double:8字节,范围:-1.79E308~-4.9E-324,4.94E-324~1.79E308
  • Currency:8字节,范围:-922337203685477~922337203685477
  • String

    注释快捷键

  • 设置注释:Alt + S

  • 取消注释:Alt + Z

    VBA删除整个文件夹(包括下面的文件及子文件夹)

    方法一:

Sub mydel()
Shell “cmd.exe /c rd/s/q d:\test\temp\”
Shell “cmd.exe /c md d:\test\temp”
End Sub

方法二:请小心使用以下代码!!后果自负
Sub DelAll()
strpathname = “D:\”
CreateObject(“scripting.filesystemobject”).getfolder(strpathname).Delete True
End Sub

可参考的FileSystemObject 对象相关操作说明(虽然是js,但也可参考)

列号↔字母(转换)

  1. Sub test3()
  2. MsgBox ConvertToLetter(27)
  3. End Sub
  4. '列号转字母
  5. Function ConvertToLetter(iCol As Integer) As String
  6. Dim iAlpha As Integer
  7. Dim iRemainder As Integer
  8. iAlpha = Int(iCol / 27)
  9. iRemainder = iCol - (iAlpha * 26)
  10. If iAlpha > 0 Then
  11. ConvertToLetter = Chr(iAlpha + 64)
  12. End If
  13. If iRemainder > 0 Then
  14. ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
  15. End If
  16. End Function
  17. '字母转列号
  18. Sub ConverToNum()
  19. Dim x as string
  20. x = "AA"
  21. Range(x & cstr(1)).column
  22. End Sub