如果此问题在此委员会之前得到回答,我道歉。我的搜索没有找到我正在寻找的东西。我是VBA新手,想知道是否有一种方法可以使用预定义目录中包含的所有子目录的名称填充userform组合框(我需要在每次启动用户窗体时更新列表)。我已经看到一些代码在其他网站上执行此操作,但它们用于早期版本的Excel,我无法让它们工作。我正在使用Excel 2007.感谢您提供的任何帮助。
答案 0 :(得分:1)
Option Explicit
Private Sub UserForm_Initialize()
Dim name
For Each name In ListDirectory(Path:="C:\", AttrInclude:=vbDirectory, AttrExclude:=vbSystem Or vbHidden)
Me.ComboBox1.AddItem name
Next name
End Sub
Function ListDirectory(Path As String, AttrInclude As VbFileAttribute, Optional AttrExclude As VbFileAttribute = False) As Collection
Dim Filename As String
Dim Attribs As VbFileAttribute
Set ListDirectory = New Collection
' first call to Dir() initializes the list
Filename = Dir(Path, AttrInclude)
While Filename <> ""
Attribs = GetAttr(Path & Filename)
' to be added, a file must have the right set of attributes
If Attribs And AttrInclude And Not (Attribs And AttrExclude) Then
ListDirectory.Add Filename, Path & Filename
End If
' fetch next filename
Filename = Dir
Wend
End Function
一些注释,因为你说你对VBA没什么经验。
Option Explicit
生效。没有任何借口。Dir()
列出文件。name:=value)
。你不必使用它们,但它们有助于理解长参数列表。如果使用命名参数,参数顺序无关紧要。你不能但是,混合了命名和未命名的参数。ListDirectory
)会设置函数的结果。因此,您可以直接将函数名称用作该函数内的变量。AttrInclude
设置为-1
。方便的是,-1
是True
的数值,即ListDirectory("C:\", True)
。AttrExclude
设置为0
。方便的是,0
是False
的数值,即ListDirectory("C:\", True, False)
,这也是默认值。If Attribs And VbDirectory Then ...
Or
结合使用,例如vbSystem Or vbHidden
。VbFileAttribute
枚举中的常量。