在VBA中执行循环时如何更改目录?

在VBA中执行循环时如何更改目录?,vba,loops,powerpoint,chdir,Vba,Loops,Powerpoint,Chdir,我想上升一级来处理以下循环。我想我可以使用ChDir,但我发现当我调用文件时,我的目录不正确。任何帮助都将不胜感激 我想概括一下路径,因为目录总是在变化,对于其他用户来说是不同的 不过,下面是我希望代码如何工作的参考资料。。我正在处理的文件将在Data1中,并且此VBA模块将在处理中,请参见下文。所以我需要上一个目录,到Data1,拉取文件,转换它们,然后将转换后的文件保存在同一个目录Data1中 C:\Users\Documents\CDRL\Data1\Processing Sub loop

我想上升一级来处理以下循环。我想我可以使用ChDir,但我发现当我调用文件时,我的目录不正确。任何帮助都将不胜感激

我想概括一下路径,因为目录总是在变化,对于其他用户来说是不同的

不过,下面是我希望代码如何工作的参考资料。。我正在处理的文件将在Data1中,并且此VBA模块将在处理中,请参见下文。所以我需要上一个目录,到Data1,拉取文件,转换它们,然后将转换后的文件保存在同一个目录Data1中

C:\Users\Documents\CDRL\Data1\Processing

Sub loopFiles()

Dim fso As New FileSystemObject
Dim fil As File
Dim fold As Folder
Dim yourfolder As String

Set fold = fso.GetFolder(Application.ActivePresentation.Path)

ChDir ".."

For Each fil In fold.Files

    If InStr(1, fil.Name, ".potx") > 0 Then
        Application.Presentations.Open fil.Path
        ActivePresentation.SaveAs Replace(fil.Path, ".potx", ".pptx"), ppSaveAsDefault
        ActivePresentation.Close

        fil.Delete True
    End If

Next fil

End Sub

您实际上不需要使用chdir,只需将dir放入saveas:

Sub loopFiles()

Dim fso As New FileSystemObject, fil As File, fold As Folder, yourfolder As String, UpOneDir As String

Set fold = fso.GetFolder(Application.ActivePresentation.Path)

For Each fil In fold.Files

    If InStr(1, fil.name, ".potx") > 0 Then
        Application.Presentations.Open fil.Path
        UpOneDir = Left(fil.Path, Len(fil.Path) - Len(fil.name) - 1 - Len(Split(Left(fil.Path, Len(fil.Path) - Len(fil.name) - 1), "\")(UBound(Split(Left(fil.Path, Len(fil.Path) - Len(fil.name) - 1), "\")))))
        ActivePresentation.SaveAs UpOneDir & Replace(fil.name, ".potx", ".pptx"), ppSaveAsDefault
        ActivePresentation.Close

        fil.Delete True
    End If

Next fil

End Sub
我创建了一个名为UpOneDir的变量,它接受fil.path并从中删除fil.name。然后我使用\分割结果,计算出数组上边界值的长度,然后取字符串的左侧减去我们刚才计算的长度

它看起来很凌乱,但它能工作。使用文件系统对象可能有一种更简单的方法来实现这一点,我只是不太了解它


如果你真的愿意,你可以通过将UpOneDir创建的各个部分分为几个小部分来让它看起来很漂亮,但我感觉,对于你来说,将一些文件简单地转换为当前的powerpoint格式将是一件非常有用的事情。

如果需要在循环中更改目录,这是显而易见的我需要先上一个目录才能打开,然后我想把它保存在同一个目录中这毫无意义,你在一个目录中轮询文件,但你想在打开它们之前上一个目录?从本质上说,除非你将每个文件复制到父文件夹中,否则文件不会在该目录中,我的代码在理论上仍然可以工作,因为它可以工作在原始文件夹而不是副本上。我需要更多的细节才能进一步提供帮助。嗯,有个误会。。我的桌面上有一个文件夹处理,其中包含matlab、vba等多个处理文件。我将此文件夹复制到另一个文件夹Data1中,其中包含数百个文件,对于每个数据集,该文件夹始终是不同的文件夹。然后,我打开一级以下的处理文件,处理数据,然后从Data1文件夹中删除文件夹处理。这样我就可以把我的处理文件夹带到任何地方来运行这些数据集。我想你需要做的是编辑这个问题,并在其中放置一个文件结构布局。这样我们就能更好地了解你需要什么。好的,我编辑了描述。正如我提到的,我希望保持路径的通用性,因为它将为每个用户更改。