我有一张带有嵌入式txt文件的Excel工作表,我想将其复制到某个目标文件夹中。
我使用以下代码,如果我在计算机上使用它,它可以正常工作:
'copy oleobject
ActiveSheet.OLEObjects(1).Copy
'paste to activeworkbook's path
CreateObject("Shell.Application") _
.Namespace(ActiveWorkbook.path) _
.Self.InvokeVerb "Paste"
但是,我的一些同事确实收到了Excel文件中嵌入的文本文件,其中预先附加了一行,其中包括临时文件夹中的文件保存路径。 我可以用VBA删除这一行,但我想了解为什么这会发生在其他计算机而不是我的计算机上。
请帮忙!
由于
答案 0 :(得分:0)
好的,这就是问题所在:
txt文件是一个模板,VBA应该在字符串文件中再次读取并更改它。到目前为止,它只是保存在一个不同的文件夹中,并且工作正常但出于移动性原因(供许多其他用户使用),如果只用一个文件处理它将是一个很大的优势。
可以使用嵌入在Excel中的txt文件来完成此操作,但VBA自动化并不能很好地支持嵌入式文件。大多数文件只有一些方法可用,如果我没记错TXT文件类型,可用的方法是打开文件。
ActiveSheet.OLEObjects(1).OLEFormat.DoVerb 1
我提到了类似的问题(在PPT中,而不是Excel,但问题是相同的)。我们最初选择的路线在这里给出:
Extracting an OLEObject (XML Document) from PowerPoint VBA
.OLEFormat.DoVerb 1
以在记事本中打开文件FileSystemObject
编写/修改新文本文件这里记录了查找和读取记事本内容的功能,需要使用一些WinAPI函数(所有这些都在链接中注明):
这是 LOT 的工作没有太大的好处,而是您只需打开一个文件对话框,提示用户选择文本文件(位于共享网络驱动器等)。这样会更可靠。
或者,根据文本文件的大小,您可以将内容存储在Shape
内(并且可以将形状放在隐藏的工作表上等),或者.TextFrame
或其他允许文本的属性。最终我们放弃了上面链接中的解决方案,转而将内容存储在Shape的.AlternativeText
属性中。这对我们来说非常有效,它可以存储每个文件大约500,000到100万个字符的XML内容。
我们选择不去记事本路线的原因是文件被读取时存在延迟,用户可能会意外中断程序,破坏文件等,并且记事本不完全支持自动化等。
我还想过使用文本字段,但如果oleoobject可以工作,我想我也可以嵌入其他文件类型,如图片。
图片很容易使用,因为它们有内置的.Export
方法。