VBA global variables, multiple workbooks

前端 未结 4 1729
轻奢々
轻奢々 2021-01-14 19:08

I have a VB application, that uses some global variables to store data that is required by multiple forms and modules, this works fine. However if a user opens up another wo

4条回答
  •  北恋
    北恋 (楼主)
    2021-01-14 19:50

    I was able to replicate the problem with a simple xla called George:

    Public harry As Variant
    
    Public Sub setHarry(x)
        harry = x
    End Sub
    
    Public Function getHarry()
        getHarry = harry
    End Function
    

    I installed the xla. Then I created Alice.xls with a text box that called setHarry when it changed and a cell with =getHarry() in it. I kept it really simple:

    Private Sub TextBox1_Change()
        Run "george.xla!setHarry", TextBox1
    End Sub
    

    I then made a copy of Alice.xls as Bob.xls and ran them both. As expected, if either workbook changes Harry, both workbooks see the result.

    I say expected because xla's are like dll's in that there's only one copy in memory that everybody shares; that apparently includes global variables, which makes sense. I just wanted to test the theory.

    To my mind, the best way to fix this is to use a class module instead of an ordinary module. This way you can give each workbook its own instance of the class and its variables in the Workbook_Open event. If the variables are declared public, you don't need property gets and sets, though you can use them if there's value in doing it.

提交回复
热议问题