|有时我们需要将数据从Word文档复制到Excel文件中。我们可以在所有版本的Office中非常轻松地执行此操作。该宏将打开一个现有的/新的excel文件,复制内容,然后保存并关闭该文件。让我们看看这是如何完成的。

Option Explicit __ Sub OpenAndReadWordDoc()

Dim tString作为字符串Dim p长,r作为Long Dim wrdApp作为对象,wrdDoc作为对象Dim wb作为工作簿Dim trange作为变量_Set wb = Workbooks.Add with wb.Worksheets(1).Range(“ A1”)

Value =“ Word文档内容:” .Font.Bold = True .Font.Size = 14 .Offset(1,0)。选择End With_ r = 3 _Set wrdApp = CreateObject(“ Word.Application”)

wrdApp.Visible = True设置wrdDoc = wrdApp.Documents.Open(“ B:\ Test \ MyNewWordDoc.docx”)_ With wrdDoc对于p = 1到.Paragraphs.Count设置trange = .Range(开始:=。 ).Range.Start, End:=。Paragraphs(p).Range.End)

tString = trange.Text tString = Left(tString,Len(tString)-1)_ If Instr(1,tString,“ 1”)> 0然后wb.Worksheets(1).Range(“ A”&r).Value = tString r = r + 1结束If _Next p。关闭在左侧,您将看到Microsoft Excel对象,右键单击并选择插入,然后单击模块*将代码复制到右侧的代码窗口现在,让我们看看该代码的工作原理–首先,我们声明所需的变量–tstring为用于保存文本的字符串(稍后我们将看到什么文本)。 2个变量“ p”和“ r”作为计数器。这些是“多头”类型。然后,我们有2个对象变量wrdApp和wrdDoc。 wrdApp是单词应用程序对象,而wrdDoc是Word文档对象。 Wb是我们在代码中创建的新工作簿的工作簿变量。如果要打开现有工作簿,则可以为此变量分配该变量。最后一个变量是变量的trange变体类型,该变量具有需要从word doc传输到excel文件的内容。

_Set wb = Workbooks.Add_将新工作簿分配给wb变量。如果您不想添加新工作簿而是打开现有工作簿,则可以按以下方式更改此行– * Set wb – Workbooks.Open(“ B:\ Test \ File1.xlsx”) _With wb.Worksheets( 1).Range(“ A1”)

Value =“ Word文档内容:” .Font.Bold = True .Font.Size = 14 .Offset(1,0)。选择End With_ With With wb.Worksheets(1).range(“ A1”)很快引用它的方式。因此,您不必对With和End with语句之间的每一行代码重复该过程。

这些代码行在新工作簿的1 ^ st ^工作表的单元格A1中以粗体和字体大小14放置在文本“ Word文档内容:”中。然后.Offset(1,0).Select选择下一行。

_r = 3_变量“ r”被赋值为3,因为这是excel文件中从Word文档复制数据的起始行。

Set wrdApp = CreateObject(“ Word.Application”)_如果系统中已经在运行Word,则_CreateObject *将创建Word的新实例。因此,此行将对象变量wrdApp分配给Word Application,您可以在以后的代码中使用它。

_wrdApp.Visible = True_新创建的Word实例在创建时将不可见。要使其可见,您需要设置wrdApp.Visible = True使其可见。

_Set wrdDoc = wrdApp.Documents.Open(“ B:\ Test \ MyNewWordDoc.docx”)_我们创建了word应用程序的新实例,但尚未打开源word文档。因此,此命令将打开word文档。对象wrdDoc已分配给该文档,因此我们稍后可以在代码中使用它。

_With wrdDoc….End With_这是我们的“ With”循环,它将完全与wrdDoc对象一起使用。打开此循环后,无需在此循环中再次重复文本“ wrdDoc”。您可以直接以点(“。”)开始

与wrdDoc相关的任何对象之前。该循环以_End With_语句结束。输入End With语句后,您将无法仅使用“。”引用wrdDoc之后的对象。

_For p = 1到.Paragraphs.Count_这是“ For”循环,将从单词文档的第1 ^ st ^到最后几段循环。包含数据的Word文件包含100行信息​​,每行信息存储为一个单独的段落。循环将从1增加到100,然后复制段落。如果设置了某些条件,则复制粘贴将基于这些条件。

_Set trange = .Range(Start:=。Paragraphs(p).Range.Start,End:=。Paragraphs(p).Range.End)_这将每个段落的开始和结束分配为循环的增量。

_tString = trange.text tString = Left(tString,len(tString)-1)_首先将trange中的文本传递到TString。然后,每个段落在句子的末尾都有一个段落字符。使用“左”功能将其删除。从左侧开始,除最后一个字符外的所有字符都存储在tString变量中。

_If Instr(1,tString,“ 1”)> 0然后wb.Worksheets(1).Range(“ A”&r).Value = tString r = r + 1 End If_此IF函数检查tString中的文本是否包含数字1。如果为true,则将tString的内容复制到工作簿中的下一个可用行。 “ r”的第一个值为3。使用r = r + 1时,我们将其递增1,因此可以将下一个条目放置在上一个条目的下方。

Next p .Close _Next p_代码行递增到下一段。

处理完所有段落后,_。Close_将关闭文档。这是我们在excel文件中获得的输出–

img1

您将看到输出中仅包含那些在数字的任何位置都包含数字1的段落。

wrdApp.Quit设置wrdDoc = Nothing设置wrdApp = Nothing wb.Saved = True wrdApp.Quit将关闭单词Application。 Set wrdDoc = Nothing和Set wrdApp = Nothing将释放这2个对象变量占用的内存并将它们设置为Nothing。 wb.Saved = True将保存工作簿。

通过以上代码,我们可以控制将哪些数据从Word文件复制到Excel文件。

image 48