(VBA)与他人上的CreateTextFile相关的运行时错误76';车站
晚上好, 我已经试着修复这个bug好几个小时了,但没有成功。尤其令人沮丧的是,这个bug并不是在我自己的工作站上表现出来的,而是在每个人的工作站上表现出来的。 代码的目的是创建(FileSystemObject->CreateTextFile)两个.txt文件,并将(TextStream)某些信息写入其中。以下是相关代码行:(VBA)与他人上的CreateTextFile相关的运行时错误76';车站,vba,filesystemobject,Vba,Filesystemobject,晚上好, 我已经试着修复这个bug好几个小时了,但没有成功。尤其令人沮丧的是,这个bug并不是在我自己的工作站上表现出来的,而是在每个人的工作站上表现出来的。 代码的目的是创建(FileSystemObject->CreateTextFile)两个.txt文件,并将(TextStream)某些信息写入其中。以下是相关代码行: Dim username, filename, filename_2, filepath, complete_filepath, complete_filepath_2 A
Dim username, filename, filename_2, filepath, complete_filepath, complete_filepath_2 As String
Dim fso As New FileSystemObject
Dim fso_2 As New FileSystemObject
Dim txtStream, txtStream_2 As TextStream
'Gets username
username = CreateObject("WScript.NetWork").username
filename = "db_Redel"
filename_2 = "db_ship"
complete_filepath = "C:\Users\" & username & "\Documents\" & filename & ".txt"
complete_filepath_2 = "C:\Users\" & username & "\Documents\" & filename_2 & ".txt"
Set txtStream = fso.CreateTextFile(complete_filepath, True) 'RUNTIME ERROR 76
Set txtStream_2 = fso_2.CreateTextFile(complete_filepath_2, True)
我确信声明的文件路径存在于测试过的机器上。我怀疑是什么东西使FileSystemObject对象无法正常工作,例如权限,但我检查了其他工作站上的Office security Center,它们的设置都与我相同。以下是激活的参考:
- visualbasic应用程序
- Microsoft Excel 14.0对象库
- OLE自动化
- Microsoft Office 14.0对象库
- Microsoft脚本运行时
更新:我让我的一个朋友试用了它,它在他的电脑上也运行得很好。从您的输入不清楚
用户名
和日期
的实际值。如果这些有空格,您观察到可能有问题。首先尝试使用fso.FolderExists(“C:\Users\”&username&“\Documents\”
方法,并确保它返回True您的代码在我的电脑上运行正常。但是,在调暗变量时,您会犯一个常见错误。该行:
Dim用户名、文件名、文件名\u 2、文件路径、完整\u文件路径、完整\u文件路径\u 2作为字符串
实际上,只会将dim作为字符串完成\u filepath\u 2。其他的变成了变种
线路也有同样的问题:
将txtStream、txtStream_2设置为TextStream
只有txtStream_2将变暗为Textstream
每行需要调暗一个变量:
将用户名设置为字符串
将文件名设置为字符串
Dim filename_2作为字符串
将文件路径设置为字符串
Dim complete_文件路径为字符串
Dim complete_filepath_2作为字符串
只有这样,您才能获得所需的变量类型。事实证明,问题出在日期格式上。我个人电脑上的格式是DD-MM-YYYY,而其他工作站上的格式是DD/MM/YYYY。正斜杠显然不能出现在文件名中,因此该问题已通过以下方式解决:
DateNow = Date()
filename = Replace(DateNow, "/", "-")
:(如果您怀疑FSO可能是原因,您是否尝试过使用“内置”创建文件VBA文件方法?你有哪些内置的文件方法?我对这方面的知识不是很深。谢谢!KHH-我的意思是类似的东西看起来很有趣。我刚刚测试过,看起来我可以使用它。谢谢。你好,彼得。
用户名总是6个字符长,3个字母和3个数字:XXX####移动了Date
变量,但它的格式为YYYY/MM/DD。宏在我的工作站和电脑上都能工作,所以我看不出问题出在文件名上。@KHH目前我唯一的猜测是-FSO没有写入目标文件夹的权限。只要您使用Win“特殊”文件夹中的一个-“C:\用户",通常具有特殊的访问权限。还有一件值得检查的事情-Microsoft脚本运行时
确实添加到了工作站上的引用中。哇,非常感谢。这可能会在将来给我带来很多麻烦。这真的是声明变量的唯一方法吗?它只是在hat格式。您不需要为每行设置一个变量:dim username as String、filename as String、filename_2 as String、filepath as String、complete_filepath as String、complete_filepath_2 as String
是一个完全有效的强类型声明行。Replace
函数适用于此特定实例(但它会导致ODDDMM的顺序根据用户的设置而混乱),但更可靠的方法将处理任何区域日期格式中的任何潜在无效字符,并保持DD和MM的顺序一致。更安全的方法是使用`filename=Format$(DateNow,“yyyyymmdd”)其中,YYYYMMDD是符合ISO-8601的日期格式。