我需要一些新鲜的眼睛。我一直在逐步进行这项工作,并从让它工作到破碎。此时我的眼睛正在穿越,我可以使用一些帮助。此电子表格中的列H包含计算机ID,列I是日期。如果H和I都是空白的话我希望它什么都不显示(这是我最近破坏它的点,并决定寻求帮助。这个逻辑不包括在内。)如果H或I都有,但两者都没有值,它会显示“NO”。如果H和I都有值,它将调用一个自定义函数,如果该目录尚不存在,将创建该目录。此外,如果目录已创建或存在,我想显示“是”。如果H和I都是空的,我尝试不显示任何内容之前所有功能都正常工作。
这是我正在使用的公式:
=IF(COUNTA(H21:I21)<>COLUMNS(H21:I21), "NO",IF(CREATEDIR(CONCATENATE(TEXT(I21,"yyyy"),"\",TEXT(I21,"m-d-yy"),"\",H21))=0,"YES", "NO"))
这是我正在使用的VBA功能(路径详细信息省略)
Function CREATEDIR(dateId)
If Len(Dir("Z:\pathname\" & dateId, vbDirectory)) = 0 Then
MkDir "Z:\pathname\" & dateId
End If
End Function
:
答案 0 :(得分:0)
将UDF更新为以下内容,以便它可以构建完整的文件夹路径,以防它不存在(这将处理网络文件夹路径,如\\server\folder\subfolders\
以及本地或映射文件夹Z:\pathname\
)之类的路径。您需要将sBeginPath
设置为它应该实际存在的任何内容:
Function CREATEDIR(dateID) As String
Dim sBeginPath As String
Dim sBuildPath As String
Dim vFolder As Variant
Dim i As Long
sBeginPath = "C:\Test\"
If Right(sBeginPath, 1) <> "\" Then sBeginPath = sBeginPath & "\"
For Each vFolder In Split(sBeginPath & dateID, "\")
If Len(vFolder) > 0 Then
If Len(sBuildPath) = 0 Then
If i > 0 Then
sBuildPath = "\\" & vFolder & "\"
Else
sBuildPath = vFolder
End If
Else
If i > 0 Then
sBuildPath = sBuildPath & vFolder & "\"
i = i + 1
Else
sBuildPath = sBuildPath & "\" & vFolder
End If
End If
If (Len(sBuildPath) > 0) And (i = 0 Or i >= 3) Then
If Len(Dir(sBuildPath, vbDirectory)) = 0 Then MkDir sBuildPath
End If
Else
i = i + 1
End If
Next vFolder
CREATEDIR = "YES"
End Function
然后将您的公式更新为以下内容(使用@pnuts建议的CHOOSE
方法):
=CHOOSE(COUNTA(H21:I21)+1,"", "NO",CREATEDIR(CONCATENATE(TEXT(I21,"yyyy"),"\",TEXT(I21,"m-d-yy"),"\",H21)))