【问题标题】:Open Folder from Cell in Excel, Create Folder if it Does Not ExistExcel中从单元格中打开文件夹,如果文件夹不存在则创建文件夹
【发布时间】:2016-01-13 19:26:09
【问题描述】:

我正在尝试在我的电子表格中创建一个单元格来做一些事情:

  1. 根据一行中两个单元格的值打开一个文件夹
  2. 如果文件夹不存在,则从以上两个单元格创建文件夹
  3. 仅当我点击该行时才有效

目前,我正在使用超链接公式链接到我手动创建的文件夹。我有一个好主意,即链接到一个批处理文件,该批处理文件从解析的数据中打开/创建文件夹。我尝试了一段时间,但无法将数据从 excel 获取到批处理文件。

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

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

基本上,我想在该行中单击“打开”,它会从 B2 和 C2 获取数据并在 C:\New Folder\B2\C2 中打开/创建一个文件夹(例如 C:\New Folder\2015 \文件夹 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

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

【问题讨论】:

  • 我猜C:\New folder\new.bat 中的空格 很麻烦;尝试对不包含任何空格的文件夹进行相同操作...
  • 新文件夹中的空间不是问题。我可以在您键入时运行它,但在尝试从单元格中添加信息时(即 new.bat 2015 文件夹 001)则不能。谢谢。

标签: vba excel batch-file


【解决方案1】:

解决此问题的最佳方法可能是使用 VBA 并且不使用 shell 脚本。 假设您的三个单元格是 A1、A2 和 A3。您可以向工作表添加一个按钮并分配一个宏,如下所示:

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

【讨论】:

    【解决方案2】:

    我不确定你的牢房里有什么。但是您可以根据这样的值构建路径

    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")
    

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2013-01-17
      • 2011-01-19
      • 1970-01-01
      • 2013-09-18
      • 2011-02-19
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多