尝试写入文件时权限被拒绝
Permission denied when attempting to write to a file
我正在 运行 循环将字符串变量输出到文件。循环的每个 运行 都会更改字符串。在某些循环的 运行 上,我收到错误消息 Invalid procedure call or function.
rst
是 table 的记录集,fl
是一个对象,我将其设置为这样的文件:
Set fso = CreateObject(fileType)
Set fl = fso.createtextfile(path)
这是循环:
Do Until rst.EOF
start = rst.Fields(fieldName))
fl.writeLine start
rst.MoveNext
Loop
尝试使用 Open
命令代替:
Dim FF As Byte
FF = FreeFile
Open "C:\Users\MacroMan\SomeFolder\myTextFile.txt" For Output As #FF
'// Rest of code here
start = rst.Fields(fieldName)
Print #FF, start
'// Rest of code here
Close #FF
创建文件:
Dim fso as Object
Dim f1 as Object
Dim fileType as String
Dim path as String
Dim myFile as Byte
fileType = "Scripting.FileSystemObject"
path = "C:\myFolder\fileName"
Set fso = CreateObject(fileType)
Set fl = fso.createtextfile(path)
路径 - 确保路径指向您拥有 read/write 权限的文件夹。据我所知,以下说明适用于 windows 7-10。它们可能也适用于 XP。
- Right-click 文件夹(在本例中文件夹是 "myFolder" 在驱动器 C 中)
- 单击属性
- 单击“安全”选项卡
- 组或用户名下的框中是电脑用户的列表。 System是默认的系统用户,不用管它。单击您的用户。如果您是管理员,则可以单击 管理员。
- >user< 的 Permissions 下列出了可以对文件执行的所有操作,并在 Allow 列,如果此用户有权执行此操作。否则,将在 Deny 列中进行检查。
- 要更改权限,请单击 组或其他用户名下的 编辑... 按钮:
确保在创建文件后关闭文件以启用 read/write。
f1.close
set f1 = Nothing
现在您可以打开文件并在文件末尾添加行而不删除之前的行。
myFile = FreeFile
Open path For Output As #myFile
Write #myFile, "Something or other " & chr(9) & variableName & rst.Fields(0).Value
#myFile
是我们在代码中给文件取的名字
write
是在文件最后一行后添加一行的命令。
您可以使用 &
连接不同的变量类型,只要它们可以 implicitly 转换为 string/char 类型。我用过:
- 一个字符串:
"something or other"
- 一个字符:
chr(9)
,一个制表符
- 一个变量:
variableName
,字符串类型
rst
记录集中第一个字段的内容:rst.Fields(0).Value
。在括号 rst.Fields().Value
中,您可以将 1
用于第二个字段,2
用于第三个字段,依此类推。或者字符串 "columnName"
.
完成循环并写入文件后,确保关闭它。
Close #myFile
我正在 运行 循环将字符串变量输出到文件。循环的每个 运行 都会更改字符串。在某些循环的 运行 上,我收到错误消息 Invalid procedure call or function.
rst
是 table 的记录集,fl
是一个对象,我将其设置为这样的文件:
Set fso = CreateObject(fileType)
Set fl = fso.createtextfile(path)
这是循环:
Do Until rst.EOF
start = rst.Fields(fieldName))
fl.writeLine start
rst.MoveNext
Loop
尝试使用 Open
命令代替:
Dim FF As Byte
FF = FreeFile
Open "C:\Users\MacroMan\SomeFolder\myTextFile.txt" For Output As #FF
'// Rest of code here
start = rst.Fields(fieldName)
Print #FF, start
'// Rest of code here
Close #FF
创建文件:
Dim fso as Object
Dim f1 as Object
Dim fileType as String
Dim path as String
Dim myFile as Byte
fileType = "Scripting.FileSystemObject"
path = "C:\myFolder\fileName"
Set fso = CreateObject(fileType)
Set fl = fso.createtextfile(path)
路径 - 确保路径指向您拥有 read/write 权限的文件夹。据我所知,以下说明适用于 windows 7-10。它们可能也适用于 XP。
- Right-click 文件夹(在本例中文件夹是 "myFolder" 在驱动器 C 中)
- 单击属性
- 单击“安全”选项卡
- 组或用户名下的框中是电脑用户的列表。 System是默认的系统用户,不用管它。单击您的用户。如果您是管理员,则可以单击 管理员。
- >user< 的 Permissions 下列出了可以对文件执行的所有操作,并在 Allow 列,如果此用户有权执行此操作。否则,将在 Deny 列中进行检查。
- 要更改权限,请单击 组或其他用户名下的 编辑... 按钮:
确保在创建文件后关闭文件以启用 read/write。
f1.close
set f1 = Nothing
现在您可以打开文件并在文件末尾添加行而不删除之前的行。
myFile = FreeFile
Open path For Output As #myFile
Write #myFile, "Something or other " & chr(9) & variableName & rst.Fields(0).Value
#myFile
是我们在代码中给文件取的名字write
是在文件最后一行后添加一行的命令。
您可以使用 &
连接不同的变量类型,只要它们可以 implicitly 转换为 string/char 类型。我用过:
- 一个字符串:
"something or other"
- 一个字符:
chr(9)
,一个制表符 - 一个变量:
variableName
,字符串类型 rst
记录集中第一个字段的内容:rst.Fields(0).Value
。在括号rst.Fields().Value
中,您可以将1
用于第二个字段,2
用于第三个字段,依此类推。或者字符串"columnName"
.
完成循环并写入文件后,确保关闭它。
Close #myFile