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

时间:2016-01-13 19:26:10

标签: excel vba excel-vba batch-file

我正在尝试在我的电子表格中创建一个可以执行以下操作的单元格:

  1. 根据一行中两个单元格的值打开文件夹
  2. 如果文件夹不存在,则从上面两个单元格创建文件夹
  3. 只有当我点击该行时才能工作
  4. 目前,我使用超链接公式链接到我手动创建的文件夹。我有一个明智的想法,即链接到批处理文件,该文件从解析的数据中打开/创建文件夹。我尝试了一段时间,但无法将数据从excel传送到批处理文件。

    无论如何要这样做?无论是我描述的方式还是VBA?

    我的实际电子表格中有更多的列和行,但希望下面的图片说明了我希望链接到文件夹的方式。

    enter image description here

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

    以下是我目前在Excel中使用的超链接公式,试图完成此任务:

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

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

    下面是我写的用于打开/创建文件夹的批处理文件:

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

    从命令行运行时,它可以正常工作,具有以下内容:

    new.bat 2015 Folder 0001
    

    任何方向或帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不确定你的细胞中有什么。但你可以从像这样的值构建路径

Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Sheets("Sheet1")

Dim szPath as string
szPath = ws.Range("B1").Value & "\" & ws.Range("C1").Value

打开文件夹
要打开文件夹,您可以使用shellexecute。在所有代码的顶部声明这个。首先是潜艇和功能。

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

然后你可以给它发一条路径

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

您也可以这样打开文件

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

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)

创建文件夹
最后,您可以创建文件夹。

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

答案 1 :(得分:0)

最好的解决方法可能是使用VBA而不使用shell脚本。 假设你的三个单元格是A1,A2和A3。您可以向工作表添加一个按钮并指定一个宏,如下所示:

SELECT * FROM table LIMIT 10 // Query
SELECT (*) FROM table LIMIT 10 // Query Count