单元格在Excel中打开文件夹,如果不存在,则创build文件夹

我正在尝试在电子表格中创build一个单元格,它将执行一些操作:

  1. 根据一行中两个单元格的值打开一个文件夹
  2. 如果它不存在,从两个单元格上面创build文件夹
  3. 只有当我点击它的行

目前,我正在使用超链接公式链接到我手动创build的文件夹。 我有一个明确的想法,链接到一个batch file,从分析的数据打开/创build文件夹。 我试了很长一段时间,但一直没有能够从Excel中获取数据到batch file。

无论如何要做到这一点? 要么用我描述的方式,要么用VBA?

我的实际电子表格有更多的列和行,但希望下面的图像说明如何我想链接到文件夹布局。

在这里输入图像说明

基本上,我想单击该行中的“Open”,并从B2和C2获取数据,并在C:\ New Folder \ B2 \ C2中打开/创build一个文件夹(例如C:\ New Folder \ 2015 \ Folder 0001 )。

下面是我目前在Excel中使用的超链接公式,试图完成这个:

=HYPERLINK("C:\New folder\new.bat "&B2&" "&C2,"Open") 

我得到一个“无法打开指定的文件”错误。 如果我删除单元格数据,它将打开程序,但没有数据,我没有办法创build必要的文件夹。

下面是我写的打开/创build文件夹的batch file:

 @echo off set dir="C:\New folder\%1\%2" if not exist %dir% mkdir %dir% start "" %dir% 

从命令行运行时,它可以正常工作:

 new.bat 2015 Folder 0001 

任何方向或帮助将不胜感激。 预先感谢。

最好的方法是使用VBA,而不使用shell脚本。 假设你的三个单元格是A1,A2和A3。 你可以添加一个button到你的工作表,并像这样分配一个macros:

 Sub btn1_click() Dim dir as String Dim fso As Object dir = Range("A1").Value & "\" & Range("A2").Value & Range("A3").Value Set fso = CreateObject("scripting.filesystemobject") If Not fso.folderexists(dir) Then fso.createfolder (dir) End If Call Shell("explorer.exe" & " " & dir, vbNormalFocus) End Sub 

我不确定你的细胞里有什么 但是你可以从这样的值中build立一条path

 Dim ws As Excel.Worksheet Set ws = ActiveWorkbook.Sheets("Sheet1") Dim szPath as string szPath = ws.Range("B1").Value & "\" & ws.Range("C1").Value 

打开一个文件夹
要打开一个文件夹,你可以使用shellexecute。 在你所有的代码中声明这个。 以上所有子和function。

 Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long 

然后你可以发送一个path

  ShellExecute 0, "open", "C:\Temp", 0, 0, 1 'or send it the value build from the cells ShellExecute 0, "open", szPath , 0, 0, 1 

你也可以这样打开文件

创build文件
如果你想创build文件,可以这样做。

 Dim fs As FileSystemObject Set fs = New FileSystemObject 'Create a text file Set ts = fs.CreateTextFile("C:\Temp\test.txt", True, False) 'or using the path from the cells Set ts = fs.CreateTextFile(szPath & "\text.txt", True, False) 

创build文件夹
最后你可以创build文件夹。

 fs.CreateFolder ("C:\Temp\SomeNewDir") 'or using the path from the cells fs.CreateFolder (szPath & "\SomeNewDir")