主页 > 数据库 > VBA|内置、非内置对象变量的声明、赋值

VBA|内置、非内置对象变量的声明、赋值

VBA中的变量区分对象变量与非对象变量,采用不同的赋值方式。同时,对于对象变量,又区分内置对象与非内置对象,在语法上有所区别。对于非内置对象的引用,可以使用前期绑定或后期绑定的方式。

1 非对象变量的声明和赋值

对于非对象变量,一般使用关键字let来赋值:

Sub 非对象变量赋值()
 Dim i As Integer
 Let i = 23 'Let可省略
 i = 45 '省略Let形式的非对象变量赋值
 Debug.Print i
End Sub

2 内置对象的声明与赋值

Sub 内置对象的声明和赋值()
 Dim wb As Workbook
 Dim sht As Workbook
 Dim rng As Range
 Dim cht As Chart
 Dim shp As Shape
 Dim commt As Comment
 Dim commb As CommandBar
 Dim commbb As CommandBarButton
 Set wb1 = Workbooks("excelVBA.xlsm")
 Set wb2 = Workbooks(1)
 Set wb3 = ActiveWorkbook
 Set wb4 = ThisWorkbook
 Set sht1 = Worksheets("sheet2")
 Set sht2 = Worksheets(1)
 Set sht3 = Workbooks(1).ActiveSheet
 Set sht4 = ActiveSheet
 Set rng1 = Range("A1:F10")
 Set rng2 = Range("A1").Resize(3, 3)
 Set rng3 = ActiveSheet.UsedRange
 Set rng4 = Range("A1").CurrentRegion
 Set rng5 = Cells
 Set rng6 = Cells(8, 8)
 Set rng7 = Selection
 Set shp1 = Sheet1.Shapes(1)
 Set commt1 = Cells(1).Comment
 Set commt2 = ActiveCell.Comment
 Set commt3 = Sheet5.Comments
 Set commt4 = ActiveSheet.Comments
 rng6.Value = 11
End Sub

3 非内置对象的前期绑定和new声明

3.1 引入库(VBE→工具→引用)

VBA|内置、非内置对象变量的声明、赋值

 

3.2 new声明

VBA|内置、非内置对象变量的声明、赋值

 

Sub 非内置对象的前期绑定和new声明()
 Dim dic As New Dictionary
 dic("红") = "red"
 dic("blue") = 2
 Debug.Print dic("红")
 Debug.Print dic("blue")
End Sub
立即窗口中输出:
red
 2 

前期绑定的优势是在引入库后写代码时编辑器有代码提示,弊端是当库未引入时时,会产生如下的编译错误:

VBA|内置、非内置对象变量的声明、赋值

 

需要手动引入包含Dictionary对象的Microsoft Scripting Runtime(scrrun.dll)库。

4 非内置对象的后期绑定和CreateObject()赋值

后期绑定在编辑器编写代码时没有代码提示,但不需手动引入库。

Sub 把数据装入数组与字典()
 Application.ScreenUpdating = False
 Dim arr0, arr, nRow
 arr0 = Range("A1:B7")
 'Dim dic As Object
 Set dic = CreateObject("Scripting.Dictionary")
 Sheets("把数据装入数组与字典").Activate
 Sheets("把数据装入数组与字典").Select
 '把A1到B7的区域的数据,装入数组
 arr = Range("a1").CurrentRegion
 '把A列的数据装入字典的key
 '把B列的数据装入字典的item
 nRow = Range("a" & Rows.Count).End(3).Row
 For i = 1 To nRow
 dic(Cells(i, 1)) = Cells(i, 2)
 Next i
 '把数组写到D E列
 Range("d1").Resize(UBound(arr), UBound(arr, 2)) = arr
 '把字典的key与item分别写到H I列
 Range("h1").Resize(dic.Count, 1) = Application.WorksheetFunction.Transpose(dic.Keys)
 Range("I1").Resize(dic.Count, 1) = Application.WorksheetFunction.Transpose(dic.items)
 Application.ScreenUpdating = True
 Dim k As Integer
 k = 0
 For Each dd In dic
 k = k + 1
 Cells(k, 15) = dic(dd)
 Next
End Sub
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!