我有一个 Excel 电子表格,用作工作跟踪器。我想在 VBA 中编写一段代码,该代码根据为每条记录输入的一些值创建一个目录(带有子文件夹)。
A 栏:PIN 码 乙:团队 C:标题
在 Windows 中已建立的目录中,我有一个文件夹,其中包含我们工作的所有团队的文件夹。基本上,我想要拥有代码,以便它查看我的跟踪器中的团队值并在该团队区域内创建一个新文件夹(带有子文件夹)。
例如:“C:\Teams\Team 1 ew 文件夹位于此处”
我希望创建的新文件夹使用 A 列和 C 列中的 PIN + 标题的格式。另外,在每个新创建的文件夹内,我希望有以下子文件夹:“1_Comms”、“2_Input”、“3_Working” ,“4_输出”。
例如:“C:\Teams\Team 1\PIN 值 + 标题”,此新目录中包含所有上述子文件夹。
对此的任何帮助将不胜感激,因为我是 VBA 的菜鸟,而且仍在学习中。
除了让自己完全尴尬之外,到目前为止还没有尝试过任何事情。
为此,您首先创建主文件夹,如示例中的“C:\Teams\Team 1\PIN 值 + 标题”。因此,之后创建子文件夹。
Sub CreateFolder(ByVal pin_value As String, ByVal title As String)
Dim wb_path As String
Dim folder_1_path, folder_2_path, folder_3_path, folder_4_path As String
wb_path = ThisWorkbook.Path
' create main folder
wb_path = wb_path & "\" & pin_value & "_" & title
MkDir (wb_path)
' create subfolder
folder_1_path = wb_path & "\1_Comms"
folder_2_path = wb_path & "\2_Input"
folder_3_path = wb_path & "\3_Working"
folder_4_path = wb_path & "\4_Output"
MkDir (folder_1_path)
MkDir (folder_2_path)
MkDir (folder_3_path)
MkDir (folder_4_path)
End Sub
如果您的 PIN 码是整数,您需要将其转换为字符串。就像下面这个测试一样:
Sub test()
pin_value = 777
title = "myFolder"
pin_value = CStr(pin_value)
Call CreateFolder(pin_value, title)
End Sub
您可以使用此递归函数来处理丢失的文件夹:
Function SmartCreateFolder(byVal sFolder as String) As Boolean
'inspired by: https://stackoverflow.com/a/54280512/78522
'Works with drive letters but also with UNC paths
Static oFSO As Object
If oFSO Is Nothing Then Set oFSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo hell 'mostly to handle forbidden characters
With oFSO
If Not .FolderExists(sFolder) Then
If SmartCreateFolder(.GetParentFolderName(sFolder)) Then
.CreateFolder sFolder
Else
GoTo hell
End If
End If
End With
SmartCreateFolder = True
hell:
End Function
这非常整洁。如果我希望它查看使用 =year(today)) 公式的年份的单元格,并在根目录上创建一个以其前一年命名的文件夹,然后返回并复制并粘贴以下内容,该怎么办一个目录,另一个文件夹,进去吗?示例单元格 a1=2024 目录创建了 c:�3,然后将 c:oldname\subfolder 复制到 c:�3