我在Excel中使用宏来遍历单元格并将数据写入Word中的模板。一切都运行得很好,直到我想添加更多单元格来从中获取数据。一切仍然工作正常,除非我的名称“j”的变量值为25,我得到一个错误说“运行时错误'5941':集合中请求的成员不存在。”
我玩过不同的行和列,每个组合都有效。只有当“j
”达到25时才会发生错误。当它到达wrd.ActiveDocument.Tables(1).Rows(j)
...行时失败。
Sub Label_ExcelToWord_Single()
'Variable that stores file path for
'word template
Dim strpath As String
strpath = Cells(28, 8)
'opens Microsoft Word to edit template
Call OpenWord
Set wrd = GetObject(, "Word.Application")
wrd.Visible = True
wrd.Activate
wrd.ActiveDocument.Close savechanges:=False
wrd.Documents.Open strpath
'Variables used for loop data manipulation
Dim k As Integer
Dim j As Integer
k = 1
j = 1
'Primary loop responsible for exporting Excel
'data to word template
For Col = 1 To 3
For Row = 3 To 32
wrd.ActiveDocument.Tables(1).Rows(j).Cells(((Row - 3) Mod 7) + k).Range.Text = Cells(Row, Col) & vbCrLf & Cells(Row, Col)
If k = 7 Then
k = 0
j = j + 2
End If
If Col = 3 Then
If Row = 32 Then
'When we reach the last cell containing data exit routine
Exit Sub
End If
End If
k = k + 1
Next
Next
End Sub
答案 0 :(得分:1)
我认为在Word中使用DocVariables并将数据从Excel单元格推送到DocVariables中要容易得多。最终游戏大致相同,但我认为代码设置和维护更容易。
Sub PushToWord()
Dim objWord As New Word.Application
Dim doc As Word.Document
Dim bkmk As Word.Bookmark
sWdFileName = Application.GetOpenFilename(, , , , False)
Set doc = objWord.Documents.Open(sWdFileName)
'On Error Resume Next
objWord.ActiveDocument.variables("FirstName").Value = Range("FirstName").Value
objWord.ActiveDocument.variables("LastName").Value = Range("LastName").Value
objWord.ActiveDocument.variables("AnotherVariable").Value = Range("AnotherVariable").Value
objWord.ActiveDocument.Fields.Update
'On Error Resume Next
objWord.Visible = True
End Sub
设置MS Word对象库的参考。
答案 1 :(得分:0)
看起来该表可能没有足够的行。如果是这样,蛮力的方法是根据需要添加行:
#ticks .tick:last-child:before {
content: '$0';
position: absolute;
left: -5em;
bottom: -5px;
margin: 0 0 0 0.5em;
}
我还建议将...
For Col = 1 To 3
For Row = 3 To 32
' vvv new lines vvv
Do While wrd.ActiveDocument.Tables(1).Rows.Count < j
wrd.ActiveDocument.Tables(1).Rows.Add
Loop
' ^^^ new lines ^^^
...
,j
,k
和Row
重命名为更具描述性的名称。你有Excel行/列索引和Word表行/列索引,除非名称清楚,否则很容易让它们混淆。
(注意:是的,上面的代码很慢,很笨重,没有优化,yadda yadda。希望它能帮助OP。:))