Excel VBA全局变量“;终生;?
对不起,这个非描述性的标题,我只是不知道如何描述我的目标。 我是VBA的新手,还不知道事情到底是怎么回事 我编写了一个函数,它从用户那里获取一个目录,并显示目录中第一个文件的数据。现在,我想添加一个“下一步”按钮。 当按下“下一步”按钮时,我的代码将显示目录中下一个文件的数据 我尝试使用全局变量,但每次按下按钮时,它们似乎都会被初始化。 实现目标的最佳方式是什么?我是否必须使用电子表格作为内存,并从中写入和读取所有内容?或者Excel VBA是否有其他“实时内存”机制 谢谢,Excel VBA全局变量“;终生;?,excel,vba,Excel,Vba,对不起,这个非描述性的标题,我只是不知道如何描述我的目标。 我是VBA的新手,还不知道事情到底是怎么回事 我编写了一个函数,它从用户那里获取一个目录,并显示目录中第一个文件的数据。现在,我想添加一个“下一步”按钮。 当按下“下一步”按钮时,我的代码将显示目录中下一个文件的数据 我尝试使用全局变量,但每次按下按钮时,它们似乎都会被初始化。 实现目标的最佳方式是什么?我是否必须使用电子表格作为内存,并从中写入和读取所有内容?或者Excel VBA是否有其他“实时内存”机制 谢谢, Li单击按钮时,通
Li单击按钮时,通常不会重新初始化全局变量。如果重新编译VBA项目,它们将重新初始化。因此,在调试时,您可能会看到正在重新初始化全局
您可以将电子表格用作内存。一种方法是将工作表的可见性属性设置为xlSheetVeryHidden(可以从VBA项目中执行此操作)。此工作表对用户不可见,因此您的VBA应用程序可以使用它存储数据。单击按钮时,通常不会重新初始化全局文件。如果重新编译VBA项目,它们将重新初始化。因此,在调试时,您可能会看到正在重新初始化全局
您可以将电子表格用作内存。一种方法是将工作表的可见性属性设置为xlSheetVeryHidden(可以从VBA项目中执行此操作)。此工作表对用户不可见,因此您的VBA应用程序可以使用它来存储数据。这可以通过多种方式实现,就像我想的任何问题一样 您可以将问题分解为两个子例程: 1) 检索所选目录中的所有文件名并显示第一个文件的数据 2) 如果不是最后一个文件,则获取下一个文件的数据并显示它 您可以使用一个全局变量来存储文件名,并使用一个索引来记住您在文件名集合中的位置
Global filenames As Collection
Global fileIndex As Integer
Public Sub GetFilenames()
Dim selectedDirectory As String
Dim currentFile As String
selectedDirectory = "selected\directory\"
currentFile = Dir$(selectedDirectory)
Set filenames = New Collection
While currentFile <> ""
filenames.Add selectedDirectory & currentFile
currentFile = Dir$()
Wend
' Make sure there were files
If filenames.Count >= 1 Then
fileIndex = 1
' Call a method to display data
DisplayData(filenames(fileIndex))
Else
' No files
End If
End Sub
Public Sub GetNextFile()
' Make sure we have a filenames object
If Not filenames Is Nothing Then
If fileIndex < filenames.Count Then
fileIndex = fileIndex + 1
' Call the display method again
DisplayData(filenames(fileIndex))
Else
' Decide what to do after reaching the final file
End If
Else
' No filenames
End If
End Sub
然后,您可以将按钮的宏设置为“GetNextFile”,每次单击后它都会在文件中循环。至于全局变量的生存期,只有在重置VBA项目或通过过程或即时窗口专门初始化全局变量时,才会重新初始化全局变量。这可以通过多种方式实现,就像我猜想的任何问题一样 您可以将问题分解为两个子例程: 1) 检索所选目录中的所有文件名并显示第一个文件的数据 2) 如果不是最后一个文件,则获取下一个文件的数据并显示它 您可以使用一个全局变量来存储文件名,并使用一个索引来记住您在文件名集合中的位置
Global filenames As Collection
Global fileIndex As Integer
Public Sub GetFilenames()
Dim selectedDirectory As String
Dim currentFile As String
selectedDirectory = "selected\directory\"
currentFile = Dir$(selectedDirectory)
Set filenames = New Collection
While currentFile <> ""
filenames.Add selectedDirectory & currentFile
currentFile = Dir$()
Wend
' Make sure there were files
If filenames.Count >= 1 Then
fileIndex = 1
' Call a method to display data
DisplayData(filenames(fileIndex))
Else
' No files
End If
End Sub
Public Sub GetNextFile()
' Make sure we have a filenames object
If Not filenames Is Nothing Then
If fileIndex < filenames.Count Then
fileIndex = fileIndex + 1
' Call the display method again
DisplayData(filenames(fileIndex))
Else
' Decide what to do after reaching the final file
End If
Else
' No filenames
End If
End Sub
然后,您可以将按钮的宏设置为“GetNextFile”,每次单击后它都会在文件中循环。至于全局变量的生存期,只有在重置VBA项目或通过过程或即时窗口专门初始化全局变量时,才会重新初始化全局变量。也许这两个函数也可以帮助您:
SaveSetting
GetSetting
如图所示:也许这两个功能也可以帮助您:
SaveSetting
GetSetting
如图所示:也许您可以写入某个文件,并在适当的时间重新读取值。您可以共享您当前拥有的代码吗?我的代码太大,包含许多其他操作,这只会让所有人感到困惑。。我是否解释了我的目标?也许你可以在适当的时候写入某个文件并重新读取值。你可以共享你当前拥有的代码吗?我的代码太大,包含许多其他操作,这只会让每个人都感到困惑。。我能解释我的目标吗?+1正是我的想法。+1正是我的想法。