如何使用VBA从MS字单元格获取内容并将其清除为Excel

时间:2017-08-01 12:23:32

标签: excel vba excel-vba

我正在尝试从MS Word文档的单元格中获取内容,并使用VBA将其复制到带有宏的Excel文档中。

我正在使用此功能来实现它:

Cells(insertRow, 1) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)

但是这只会带来空格的文本,而不考虑行跳转(回车)。

我也试过使用这两个:

Cells(insertRow, 1) = WorksheetFunction.Clean(.cell(iRow, iCol).Range)

Cells(insertRow, 1) = WorksheetFunction.Clean(.cell(iRow, iCol))

结果相同。

这将是主要任务。我还想知道是否可以将此symbol from MS word更改为类似于excel的内容。

2 个答案:

答案 0 :(得分:0)

您可以尝试在MS word文件的每一行末尾添加一个符号,以便恢复行跳转。例如,如果以分号结束行,可以让Excel查找分号,当它找到分号时,跳过一行。

要删除您可以考虑运行此代码的空格:

newString = Replace(strString, " ", "")

可能还有其他方法可以实现您想要做的事情,但这感觉就像最简单的方式。 希望这有帮助!

答案 1 :(得分:0)

我花了很长时间才弄清楚如何做到这一点,因为这是我第一次使用Visual Basic和VBA编程,但这就是我解决它的方法:

我遇到的第一个问题是我有一些垃圾字符我不得不摆脱,我尝试使用

WorksheetFunction.Clean(MyString)

问题是这会删除导入的非打印字符(ASCII代码0-31),其中包括ascii代码13(行跳转或回车)。

即使没有使用WorksheetFunction.clean行跳转也没有被excel正确解释,我用这个解决了

Dim str as String
Dim clearer As String
str=.cell(iRow, iCol).Range.Text 'Get non treated content from word table cell
clearer = Replace(str, Chr(13), vbNewLine)

既然我没有自动清理所有东西,我必须手动完成,但我不知道Ascii代码的奇怪字符。

我这样找他们

 Dim Counter As Integer
MsgBox ("Word " + str)
For Counter = 1 To Len(str)
MsgBox ("Letter is " + Mid(str, Counter, 1) + "And Ascii code is" + 
 CStr(AscW(Mid(str, Counter, 1))))
Next

一旦我知道他们的代码,手动清理的过程对于其他角色是相同的。其中一些代表line_jump而另一些代表垃圾,所以我以不同的方式对待它们

clearer = Replace(str, Chr(13), vbNewLine) 'Replace line jumps from word to excel
clearer = Replace(clearer, Chr(11), vbNewLine) 'Replace line jumps from word 
to excel
clearer = Replace(clearer, Chr(7), "") 'Remover char

这样,我可以按照自己的意愿清理导入的文本。希望这可以在将来帮助某人。