创建文件夹&x2B;基于动态单元格值(VBA)的超链接
我有点进退两难,也许有人能帮我。我有一个主文件,其中有许多项目名称。我想创建文件夹,从第4行开始,文件夹的名称基于“B”列中的编号(1、2、3等)加上每个项目名称(F列)。另外,在“B”列的相应单元格中添加超链接。 看起来像:创建文件夹&x2B;基于动态单元格值(VBA)的超链接,vba,excel,Vba,Excel,我有点进退两难,也许有人能帮我。我有一个主文件,其中有许多项目名称。我想创建文件夹,从第4行开始,文件夹的名称基于“B”列中的编号(1、2、3等)加上每个项目名称(F列)。另外,在“B”列的相应单元格中添加超链接。 看起来像: Column B Column F 1 Project 1 2 Project 2 3 Project 3 这就是我迄今为止所做的完美工作: Sub CreateFolders()
Column B Column F
1 Project 1
2 Project 2
3 Project 3
这就是我迄今为止所做的完美工作:
Sub CreateFolders()
Application.ScreenUpdating = False
Dim xDir As String, xNumber As String, xProjectName As String, xWholeName As String, xFullPath As String
Dim lstrow As Long, i As Long
Dim fso As Object
lstrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "F").End(xlUp).Row
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 4 To lstrow
xNumber = Range("B" & i).Value & "."
xProjectName = " " & CleanName(Range("F" & i).Value)
xWholeName = xNumber & xProjectName
xDir = "O:\certainpath\"
xFullPath = xDir & xWholeName
If Not fso.FolderExists(xFullPath) Then
fso.CreateFolder (xFullPath)
ActiveSheet.Hyperlinks.Add Anchor:=Range("B" & i), Address:=xFullPath
End If
Next
Application.ScreenUpdating = True
End Sub
Function CleanName(strName As String) As String
CleanName = Replace(strName, "/", "")
CleanName = Replace(CleanName, """", "")
CleanName = Replace(CleanName, "?", "")
CleanName = Replace(CleanName, "*", "")
CleanName = Replace(CleanName, ":", ";")
CleanName = Replace(CleanName, "<", "")
CleanName = Replace(CleanName, ">", "")
End Function
Sub-CreateFolders()
Application.ScreenUpdating=False
Dim xDir作为字符串,xNumber作为字符串,xProjectName作为字符串,xWholeName作为字符串,xFullPath作为字符串
我和你一样长,我和你一样长
作为对象的Dim fso
lstrow=ActiveSheet.Cells(ActiveSheet.Rows.Count,“F”).End(xlUp).Row
设置fso=CreateObject(“Scripting.FileSystemObject”)
对于i=4到L行
xNumber=范围(“B”和i).值&“
xProjectName=”“&CleanName(范围(“F”&i).Value)
xWholeName=xNumber&xProjectName
xDir=“O:\certainpath\”
xFullPath=xDir&xWholeName
如果不是fso.FolderExists(xFullPath),那么
fso.CreateFolder(xFullPath)
ActiveSheet.Hyperlinks.Add锚定:=范围(“B”和i),地址:=xFullPath
如果结束
下一个
Application.ScreenUpdating=True
端接头
函数CleanName(strName作为字符串)作为字符串
CleanName=Replace(strName,“/”,“”)
CleanName=Replace(CleanName,“”,“”)
CleanName=Replace(CleanName,“?”,“”)
CleanName=Replace(CleanName,“*”,“”)
CleanName=Replace(CleanName,“:”,“;”)
CleanName=Replace(CleanName,“,”)
端函数
现在我还需要为以下情况添加条件:
Sub CreateFolders()
Application.ScreenUpdating = False
Dim xDir As String, xNumber As String, xProjectName As String
Dim exFolder As String
Dim xWholeName As String, xFullPath As String
Dim lstrow As Long, i As Long, rngHL As Range
lstrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "F").End(xlUp).Row
xDir = "O:\certainpath\"
For i = 4 To lstrow
xNumber = Range("B" & i).Value
xProjectName = ". " & CleanName(Range("F" & i).Value)
xWholeName = xNumber & xProjectName
xFullPath = xDir & xWholeName
'folder with exact name doesn't already exist?
If Len(Dir(xFullPath, vbDirectory + vbNormal)) = 0 Then
'no match, but is there a folder with the same project name?
exFolder = Dir(xDir & "*" & xProjectName, vbDirectory + vbNormal)
If Len(exFolder) > 0 Then
'rename folder to use the new number
Name (xDir & exFolder) As xFullPath
Else
'no existing project folder, so create a brand-new folder
MkDir xFullPath
End If
'made a change, so add/update hyperlink
Set rngHL = Range("B" & i)
If rngHL.Hyperlinks.Count > 0 Then rngHL.Hyperlinks.Delete
ActiveSheet.Hyperlinks.Add Anchor:=rngHL, Address:=xFullPath
End If
Next
Application.ScreenUpdating = True
End Sub
项目名称是否保证是唯一的?如果是,文件夹名称中带前缀的数字的用途是什么?是,始终是唯一的。在项目名称之前编号的目的是使所有创建的文件夹以与文件中名称相同的方式排列。非常感谢,先生!它确实满足了需要。