gpt4 book ai didi

vba - 如何使用语句 Name As 使用 VBA 重命名包含文件的文件夹

转载 作者:行者123 更新时间:2023-12-04 20:10:37 25 4
gpt4 key购买 nike

再会,

我有一个 VBA 项目,它根据给定的名称和 id 自动为某些特定数据类别创建文件夹(文件夹名称为 ID_CategoryName)。因此,当我更改或更新类别的名称时,我还想更新文件夹名称以表示新名称。

我正在使用语句语法 姓名 重命名文件夹如下:

Dim Fld1 as String
Dim Fld2 as String

Fld1 = "C:\Users\rapha\Desktop\1_Category1"
Fld2 = "C:\Users\rapha\Desktop\1_Category2"

If Dir(Fld1, vbDirectory) <> "" And Fld1 <> Fld2 Then
Name Fld1 As Fld2
End if

问题:它适用于空文件夹并重命名它们,但是包含文件的文件夹返回错误 75 路径/文件访问错误

解决方案:我发现问题本身是在我复制 Microsoft Office 文件(Word 的一个实例在任务管理器中打开)后重命名我的窗口中的文件夹。但是我选择了@Ashleedawg 解决方案,因为它可以解决我的问题或其他人的 问题。姓名为 声明,它还有助于我进一步检查其他人是否正在使用文件夹/文件(对于共享驱动器)。

附加信息:

1- 不确定问题是否重复,但是我发现的所有关于 VBA 中文件夹重命名的问题(在 stackoverflow 中)都使用不同的方法(FileSystemObject)。如果有知识的人可以告诉我使用 的区别姓名为 文件系统对象

2- 我在即时窗口中测试了以下行:
Msgbox Dir("C:\Users\rapha\Desktop\Category1", vbDirectory)

它返回我“1_Category1”,证明目录的存在

3- 有没有更有效的方法来重命名文件夹/文件?

4- 我在即时窗口上使用语法名称进行了一些手动测试。我一直通过拖动或使用 Ctrl + C 将文件放入文件夹中,有些文件给了我错误,而其他文件则没有。例如,我放置了一个 300kb 的 PDF 或 Word 文件,每当我运行 姓名 那个文件夹 ThatFolder2 它给了我错误。

5- 当我打开任务管理器时,它说有一个 Microsoft Word Open 实例,即使它没有显示在我的 Windows 界面中。当我结束该过程时,我可以重命名文件夹。因此,当我复制文件时,它似乎会打开该应用程序的实例并保持打开状态。

6- 文件夹中没有打开的文件,但是我有另一个代码在它之前运行,它使用文件夹中的对象。在更改文件夹名称时通常选择的 listbox_click 事件上。
Sub DirectorylistActivate(FPath As String, SH As Worksheet, INPUTFRM As UserForm, FILELSTNAME As String)

Dim objFSO As Object, objFolder As Object, objFile As Object
Dim z As Integer
Dim rnglastrow As Range
Dim rng As Range
Dim fName As String

'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
Set objFolder = objFSO.GetFolder(FPath)
z = 1

SH.UsedRange.Clear

'loops through each file in the directory
For Each objFile In objFolder.Files

Set rng = SH.Range(SH.Cells(z + 1, 1), SH.Cells(z + 1, 1))

'create hyperlink in range
SH.Hyperlinks.Add Anchor:=rng, Address:= _
objFile.Path, _
TextToDisplay:=objFile.name
z = z + 1

Next objFile

'check if directory is empty
fName = Dir(FPath & "\", vbNormal)

Set rnglastrow = DirectoryList.Range("A2:A" & lrow(SH, "A"))
rnglastrow.name = "Datafiles"

'if directory empty clear rowsource
If fName = "" Then
INPUTFRM.Controls(FILELSTNAME).RowSource = ""
Else
INPUTFRM.Controls(FILELSTNAME).RowSource = "DataFiles"
End If

Set objFile = Nothing
Set objFSO = Nothing
Set objFolder = Nothing

End Sub

最佳答案

我敢打赌,您收到错误的原因是因为您有一个或多个文件位于当前文件夹中 打开 .

如果所有文件都已关闭,Name..As无论文件夹中是否有文件,命令都可以正常重命名文件夹而不会出错。

在这种情况下会导致错误的唯一其他(非显而易见的)条件是尝试将文件夹重命名为“到”新驱动器。

此函数返回 TRUE如果指定的文件已打开:

Function IsFileOpen(fileName As String) As Boolean
'returns TRUE if file [fileName] is locked/open
Dim filenum As Long
On Error Resume Next
filenum = FreeFile()
Open fileName For Input Lock Read As #filenum 'try to open (lock) file
Close filenum
If Err = 0 Then Exit Function
If Err <> 70 Then 'not "permission denied"
MsgBox "Error " & Err & ": " & Err.Description
Else
IsFileOpen = True
End If
End Function

此函数返回 TRUE如果指定文件夹中的任何文件已打开。打开的文件列在立即窗口中。 (此函数还需要上面的函数 IsFileOpen。)
Function isFolderOpen(folderName As String) As Boolean
'returns TRUE if any files within folder [folderName] are locked/open
'names of open files are listed in the Immediate Window (CTRL+G to view)
Dim dirStr As String
If Right(folderName, 1) <> "\" Then folderName = folderName & "\"
dirStr = Dir(folderName & "*.*", vbHidden)
Do While dirStr <> ""
If IsFileOpen(folderName & dirStr) Then
isFolderOpen = True
Debug.Print "File Open: " & folderName & dirStr
End If
dirStr = Dir
Loop
End Function

更多信息
  • MSDN : Name Statement
  • MSDN : Open Statement
  • MSDN : Dir Function
  • 关于vba - 如何使用语句 Name As 使用 VBA 重命名包含文件的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764588/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com