VBA中的Dir如何记忆上次使用的路径?

VBA中的Dir如何记忆上次使用的路径?,vba,Vba,在VBA中,当我使用Dir函数时,首先将路径作为参数,然后再不使用任何参数,它将返回路径中下一个文件的名称。即使在完成该函数的执行后,它也会存储最后使用的路径。据我所知,为了“记住”普通函数中的某些东西,我们需要使用一个全局变量。Dir函数如何记住它。我想我在这里缺少了VBA中的一些概念。静态变量是这个谜题缺少的链接。尽管很可能还有其他情况发生,Dir()的行为就像它有一个静态变量,用于保存对函数的最后一次调用。它将保存此信息,直到执行环境停止或重置 下面是一个简单的静态变量示例: Sub Te

在VBA中,当我使用Dir函数时,首先将路径作为参数,然后再不使用任何参数,它将返回路径中下一个文件的名称。即使在完成该函数的执行后,它也会存储最后使用的路径。据我所知,为了“记住”普通函数中的某些东西,我们需要使用一个全局变量。Dir函数如何记住它。我想我在这里缺少了VBA中的一些概念。

静态变量是这个谜题缺少的链接。尽管很可能还有其他情况发生,
Dir()
的行为就像它有一个静态变量,用于保存对函数的最后一次调用。它将保存此信息,直到执行环境停止或重置

下面是一个简单的静态变量示例:

Sub Test()
    Dim n As Long
    For n = 1 To 10
        Debug.Print Counter
    Next
End Sub

Function Counter()
    Static count As Long
    count = count + 1
    Counter = count
End Function

你没有遗漏任何东西,这就是Dir函数的工作原理。Dir是一个有点古怪的函数。自从最初的BASIC语言和一些较旧的函数看起来有点不一致(另请参见:打开和关闭、行输入等)以来,它就一直存在。实现相同功能的另一种方法可能是将函数拆分为两个单独的函数,可以使用参数BeginDir调用Dir,也可以不使用参数ContinueDir调用Dir。这是Dir函数的内部机制。仔细想想,它不仅需要记住路径,还需要记住已返回的文件。你唯一需要担心的是,当你没有完成所有文件的循环时,你不会发出另一个带有参数的Dir命令。相关函数:@NicholasHunter:这完全是在后台完成的,使用
FindFirstFile
FindNextFile
,使用
WIN32\u FIND\u DATAA
数据结构no,我的意思是相关的
ChDir
函数该函数也可以设置为静态,然后将所有局部变量视为静态。请注意:
Dir
的实际实现不是VBA(即VBE7.DLL不是用VBA编写的)。。。因此,这个答案可以被认为是VBA中的演示/简化任务。我应该在我的帖子中提到这一点。事实上,我的答案不是很好。@BigBen很有道理,而且比我自己的答案更好。旁注:VBA中的“静态”与其他语言中的“静态”有着根本不同的含义。其他语言的VB风格等价物
静态
共享
声明的概念。成员级别的
静态
修饰符的含义并不广为人知,而且很容易出现错误;了解
Static
在成员级别的功能是非常好的,使用它。。不太可能;-)