只要您从Excel工作表中读取数据,自动将行添加到循环中的MS Word表中

我是一个VBA新手,在我执行这个任务时遇到了很多错误和问题。 任何帮助将不胜感激。

基本上我有一个Word文档中的文本框(TextBox1)。 我有供用户input。这将是一个数字,文本引用回到一个文件夹与数字作为他们的名字的Excel文件。

该文件夹中的所有Excel文件具有相同的格式(由相同的模板创build),但每个文件中的行数彼此不同。

我的老板想让我在Word中创build一个VBA代码,以便将数据从Excel导入到word文档中,但是由于用户可以从文件夹中的任何现有文件中进行select,因此每个文件中的行数都不相同。

有人build议在循环中创build行,只要有从Excel中提取数据,但我不能让代码工作。 特别是在我设置单词表单元格和Excel单元格相等的情况下(我甚至不知道自己在做对)。

这是我到目前为止:

Private Sub CommandButton1_Click() Dim tbl As Table Dim row As row Set tbl = ActiveDocument.Tables(3) Set row = tbl.Rows.Add(BeforeRow:=tbl.Rows(1)) tbl.Rows(1).Range.FormattedText = tbl.Rows(2).Range.FormattedText '~~~> This is required as the above code inserts a blank row in between tbl.Rows(2).Delete Dim objExcel As Excel.Application Dim exWb As Excel.Workbook On Error Resume Next Set exWb = objExcel.Workbooks.Open("S:\Electro-Protocol\Mot_Protocols\" & TextBox1 & ".xls") row.Cells(0) = exwb.Sheets("Tabelle1“).Cells(4,1) 'Now you just need to define the loop in which you execute the previous mentioned code. Here's some pseudo code you got to adapt in VBA for yourself: For counter = 0 To ExcelSheetLength Step 1 row.Cells(1) = exWb.Sheets("Tabelle1").Cells(counter, 0) row.Cells(2) = exWb.Sheets("Tabelle1").Cells(counter, 1) row.Cells(3) = exWb.Sheets("Tabelle1").Cells(counter, 2) Next counter For counter = 0 To ExcelSheetLength Step 1 If counter = 25 Or counter = 26 Or counter = 27 Then 'nothing Else Set row = tbl.Rows.Add(BeforeRow:=tbl.Rows(2)) End If Next counter End Sub 

所以基本上,这是一个混乱。 我试图从select的Excel工作表中select具有相同格式的数据,但是将不同数量的行导入到Word表格中,只要我有数据在Excel工作表中读取,就可以在循环中dynamic添加行。

我想从Excel中获得的信息从A4开始,然后转到D4,在Word doc表(3)中,从第1行第1列开始到第4列。Excel模板一遍又一遍地重复,直到完成全部数据。 每8行之后有5个重复不必要的行。 所以不知道如何循环,因为我打算在将数据导入Word时忽略/跳过不必要信息的5个重复行。

我知道这听起来很混乱,所以如果你有任何问题,请告诉我。 提前致谢!

您可以在读取excel时添加行。 在那个循环里面。

 For counter = 0 To ExcelSheetLength Step 1 row.Cells(1) = exWb.Sheets("Tabelle1").Cells(counter, 0) row.Cells(2) = exWb.Sheets("Tabelle1").Cells(counter, 1) row.Cells(3) = exWb.Sheets("Tabelle1").Cells(counter, 2) Set row = tbl.Rows.Add(BeforeRow:=tbl.Rows(2)) 'set the table column values here with the row.cells 1-3 Next counter 

我一直喜欢这个风格循环

 Dim iCount as integer Dim ws As Excel.Worksheet Set ws = Application.ActiveSheet lRow = 4 Do While lRow <= ws.UsedRange.Rows.Count value1 = ws.Range("A" & lRow).Value value2 = ws.Range("B" & lRow).Value Set row = tbl.Rows.Add(BeforeRow:=tbl.Rows(2)) 'set the table column values here with the row.cells 1-3 'Here you deal with the extras iCount = iCount + 1 if icount = 8 then iCount = 0 lrow = lrow + 5 else lRow = lRow + 1 End if ws.Range("A" & lRow).Activate Loop 

所以对于你的子问题:

每8行之后有5个重复不必要的行。 所以不知道如何循环,因为我打算在将数据导入Word时忽略/跳过不必要信息的5个重复行。

为此,有几个方法来处理它。 1)从Excel表格,包含空白行中获取所有内容,并在MS WORD中使用VBA后删除它们。 我不太喜欢这个方法的想法。

2)稍微慢一点的path是编写一个IF语句,查看EXCEL即将从哪一行读取的数据,并确定该值是否为BLANK / SPACE / EMPTY(无论与被检查的数据块相关的值),移动到下一行并重新开始检查。 如果检查出现有效的数据,摄取和添加到MS WORD表格作为desried。