使用VBA从Excel工作表复制嵌入的文本文件

时间:2014-04-24 19:42:07

标签: excel-vba vba excel

我有一张带有嵌入式txt文件的Excel工作表,我想将其复制到某个目标文件夹中。

我使用以下代码,如果我在计算机上使用它,它可以正常工作:

'copy oleobject
ActiveSheet.OLEObjects(1).Copy

'paste to activeworkbook's path
CreateObject("Shell.Application") _
.Namespace(ActiveWorkbook.path) _
.Self.InvokeVerb "Paste"

但是,我的一些同事确实收到了Excel文件中嵌入的文本文件,其中预先附加了一行,其中包括临时文件夹中的文件保存路径。 我可以用VBA删除这一行,但我想了解为什么这会发生在其他计算机而不是我的计算机上。

请帮忙!

由于

1 个答案:

答案 0 :(得分:0)

好的,这就是问题所在:

  

txt文件是一个模板,VBA应该在字符串文件中再次读取并更改它。到目前为止,它只是保存在一个不同的文件夹中,并且工作正常但出于移动性原因(供许多其他用户使用),如果只用一个文件处理它将是一个很大的优势。

可以使用嵌入在Excel中的txt文件来完成此操作,但VBA自动化并不能很好地支持嵌入式文件。大多数文件只有一些方法可用,如果我没记错TXT文件类型,可用的方法是打开文件。

ActiveSheet.OLEObjects(1).OLEFormat.DoVerb 1

我提到了类似的问题(在PPT中,而不是Excel,但问题是相同的)。我们最初选择的路线在这里给出:

Extracting an OLEObject (XML Document) from PowerPoint VBA

  1. 调用.OLEFormat.DoVerb 1以在记事本中打开文件
  2. 使用WinAPI函数将记事本的内容读入字符串 变量
  3. 使用WinAPI函数关闭记事本
  4. 使用FileSystemObject编写/修改新文本文件
  5. 嵌入新的修改后的文本文件
  6. 这里记录了查找和读取记事本内容的功能,需要使用一些WinAPI函数(所有这些都在链接中注明):

    http://www.excelforum.com/excel-programming-vba-macros/729730-access-another-unsaved-excel-instance-and-unsaved-notepad-text.html

    这是 LOT 的工作没有太大的好处,而是您只需打开一个文件对话框,提示用户选择文本文件(位于共享网络驱动器等)。这样会更可靠。

    或者,根据文本文件的大小,您可以将内容存储在Shape内(并且可以将形状放在隐藏的工作表上等),或者.TextFrame或其他允许文本的属性。最终我们放弃了上面链接中的解决方案,转而将内容存储在Shape的.AlternativeText属性中。这对我们来说非常有效,它可以存储每个文件大约500,000到100万个字符的XML内容。

    我们选择不去记事本路线的原因是文件被读取时存在延迟,用户可能会意外中断程序,破坏文件等,并且记事本不完全支持自动化等。

      

    我还想过使用文本字段,但如果oleoobject可以工作,我想我也可以嵌入其他文件类型,如图片。

    图片很容易使用,因为它们有内置的.Export方法。