VBA操作Word文档:无法定位并处理第二个表格的问题咨询
问题描述
我的文档里有两个表格,第一个是1行6列的表格,已经能成功处理,但处理第二个表格时,代码一直停留在第一个表格,不知道怎么写代码定位并处理第二个表格。
我的VBA代码
Sub sWordTables(daSN2, daGL, daST, daSY, daBEY, daENY, daSUP) Dim daDB As DAO.Database Dim appWord As Object 'Word.Application Dim WordDoc As Object 'Word.Document Dim wdTable As Object 'Word.Table' Dim cname As String Dim cnum As String Dim gss As Integer Dim rst As DAO.Recordset Dim aVar As String Dim wdcount As Integer Dim strPath As String Dim IntHolder As Integer Set appWord = CreateObject("Word.Application") strPath = "C:\Users\wpulk\Documents\" Set daDB = CurrentDb() Set rst = daDB.OpenRecordset("qry" & daST, dbOpenDynaset) Set WordDoc = appWord.Documents.Open(strPath & "MasterRecord.docx") wdcount = WordDoc.Tables.Count Do While Not rst.EOF With WordDoc cname = rst!CourseName cnum = rst!CourseNumber gss = rst!GradeScore incn = rst!IncrementNumber wdcount = wdcount + 1 If wdcount = 3 Then .Variables.Add ("StudentName"), daST .Variables.Add ("Academic Advisor"), daSUP .Variables.Add ("School Year"), daSY .Variables.Add ("Grade Level"), daGL .Variables.Add ("Beginning Date"), daBEY .Variables.Add ("Ending Date"), daENY .Fields.Update End If If wdcount >= 4 Then MsgBox .Variables(6).Name If .Variables("Math").Value = cname Then .Variables.Add ("Math" & incn & "a"), cnum .Variables.Add ("Math" & incn & "b"), gss ElseIf .Variables("English").Value = cname Then .Variables.Add ("Eng" & incn & "a"), cnum .Variables.Add ("Eng" & incn & "b"), gss ElseIf .Variables("Word Building").Value = cname Then .Variables.Add ("WB" & incn & "a"), cnum .Variables.Add ("WB" & incn & "b"), gss ElseIf .Variables("Lierature").Value = cname Then .Variables.Add ("Lit" & incn & "a"), cnum .Variables.Add ("Lit" & incn & "b"), gss ElseIf .Variables("Science").Value = cname Then .Variables.Add ("Science" & incn & "a"), cnum .Variables.Add ("Science" & incn & "b"), gss ElseIf .Variables("Social Studies").Value = cname Then .Variables.Add ("SocS" & incn & "a"), cnum .Variables.Add ("SocS" & incn & "b"), gss ElseIf .Variables("Bible").Value = cname Then .Variables.Add ("Bible" & incn & "a"), cnum .Variables.Add ("Bible" & incn & "b"), gss ElseIf .Variables("Florida History").Value = cname Then .Variables.Add ("oth" & incn & "a"), cnum .Variables.Add ("oth" & incn & "b"), gss .Fields.Update End If End If End With Loop appWord.ActiveDocument.SaveAs strPath & "MasterRecord" & daST & ".docx" Set WordDoc = Nothing Set appWord = Nothing End Sub
解决办法
你的代码没有直接针对表格进行定位操作,用wdcount变量控制逻辑的方式完全错误——初始值设为表格总数后还持续累加,和表格定位毫无关联。要处理第二个表格,直接通过WordDoc.Tables(index)访问即可,Word表格索引从1开始,第二个表格就是WordDoc.Tables(2)。
核心修改点
- 直接获取表格对象:分别定义两个表格变量,明确区分第一个和第二个表格
- 修复无限循环:原有循环缺少
rst.MoveNext,会导致死循环,必须添加 - 简化逻辑:删除无用的
wdcount变量,直接操作表格对象更清晰
调整后的代码示例
Sub sWordTables(daSN2, daGL, daST, daSY, daBEY, daENY, daSUP) Dim daDB As DAO.Database Dim appWord As Object Dim WordDoc As Object Dim table1 As Object, table2 As Object Dim cname As String Dim cnum As String Dim gss As Integer Dim rst As DAO.Recordset Dim incn As Integer Dim strPath As String Set appWord = CreateObject("Word.Application") strPath = "C:\Users\wpulk\Documents\" Set daDB = CurrentDb() Set rst = daDB.OpenRecordset("qry" & daST, dbOpenDynaset) Set WordDoc = appWord.Documents.Open(strPath & "MasterRecord.docx") ' 获取两个表格对象 Set table1 = WordDoc.Tables(1) Set table2 = WordDoc.Tables(2) ' 处理第一个1行6列的表格(保留你的原有逻辑) With WordDoc .Variables.Add "StudentName", daST .Variables.Add "Academic Advisor", daSUP .Variables.Add "School Year", daSY .Variables.Add "Grade Level", daGL .Variables.Add "Beginning Date", daBEY .Variables.Add "Ending Date", daENY .Fields.Update End With ' 处理第二个表格 Do While Not rst.EOF cname = rst!CourseName cnum = rst!CourseNumber gss = rst!GradeScore incn = rst!IncrementNumber ' 根据课程类型填充第二个表格数据(示例逻辑,可按需修改) With table2 ' 新增行并填充内容 .Rows.Add Select Case cname Case .Variables("Math").Value .Rows(.Rows.Count).Cells(1).Range.Text = cnum .Rows(.Rows.Count).Cells(2).Range.Text = gss Case .Variables("English").Value .Rows(.Rows.Count).Cells(1).Range.Text = cnum .Rows(.Rows.Count).Cells(2).Range.Text = gss ' 其他课程类型逻辑依此类推 End Select End With rst.MoveNext ' 移动记录集指针,避免无限循环 Loop WordDoc.SaveAs strPath & "MasterRecord" & daST & ".docx" WordDoc.Close Set WordDoc = Nothing Set appWord = Nothing End Sub
内容的提问来源于stack exchange,提问作者Wayne Pulkin
相关产品推荐
相关产品推荐

