在VBA中声明变量的正确方法是什么?

时间:2019-12-28 05:25:12

标签: vba

我正在使用VBA,并开始想知道在引用变量之前声明变量是否更好地改善了性能,因为我们在内存中声明了变量,因此下面是在引用变量之前声明变量的版本:

Sub ConnectingToDatabases()

    Dim Conn As ADODB.Connection
    Set Conn = New ADODB.Connection

    Dim C As cConnectionString
    Set C = New cConnectionString

    Conn.ConnectionString = C.GetString(Access)
    Conn.Open

    Dim Cat As ADOX.Catalog

    Set Cat = New ADOX.Catalog
    Set Cat.ActiveConnection = Conn

    Dim Tbl As ADOX.Table
    Dim Col As ADOX.Column

    For Each Tbl In Cat.Tables
        If Tbl.Type = "TABLE" And Tbl.Name = "tblActor" Then
            Debug.Print Tbl.Name
            For Each Col In Tbl.Columns
                Debug.Print Col.Name, Col.Type
            Next Col
        End If
    Next Tbl

    Conn.Close

    Set C = Nothing
    Set Col = Nothing
    Set Tbl = Nothing
    Set Cat = Nothing
    Set Conn = Nothing

End Sub

这是最常见的一种方法,我想知道在性能或可读性方面,上述版本是否比以下版本更好:

Sub ConnectingToDatabases()

    Dim Conn As ADODB.Connection
    Dim C As cConnectionString
    Dim Cat As ADOX.Catalog
    Dim Tbl As ADOX.Table
    Dim Col As ADOX.Column

    Set Conn = New ADODB.Connection
    Set C = New cConnectionString

    Conn.ConnectionString = C.GetString(Access)
    Conn.Open

    Set Cat = New ADOX.Catalog
    Set Cat.ActiveConnection = Conn

    For Each Tbl In Cat.Tables
        If Tbl.Type = "TABLE" And Tbl.Name = "tblActor" Then
            Debug.Print Tbl.Name
            For Each Col In Tbl.Columns
                Debug.Print Col.Name, Col.Type
            Next Col
        End If
    Next Tbl

    Conn.Close

    Set C = Nothing
    Set Col = Nothing
    Set Tbl = Nothing
    Set Cat = Nothing
    Set Conn = Nothing

End Sub

类模块cConnectionString仅供参考:

Option Explicit

Public Enum ConnectionStr
    Access
    Sql
End Enum

Public Function GetString(ByVal cType As ConnectionStr)

    Select Case cType
        Case 0
            GetString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\BIFanatic\" & _
                            "Desktop\Personal\Movies.accdb;Persist Security Info=False;"
        Case 1
            GetString = ""
    End Select

End Function

我知道你们中有些人可能会说这取决于哪一个是绝对正确的,但是想知道我是否要向您发送带有数百个变量的代码,哪种方法可以使您轻松查看我的代码?

0 个答案:

没有答案