我正在创建宏,该宏将从模板创建Word文档,并从Excel中的每个选定行中移动信息。到目前为止,已创建文档并移动了信息,但是它们来自错误的单元格:
例如,当我从C5到C8选择单元格时,宏会创建3个文档,并使用C1到C3的信息填充它们。我需要用来自选定行的信息填充这些文档。
我知道我需要修复引用,但是我无法想到一种方法来引用当前循环所在的选定范围行。请给我一些建议。到目前为止,我的代码:
Sub Move_info_UPDT()
Dim objWord
Dim objDoc
Dim i As Long
For i = 1 To Selection.Rows.Count
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add(Template:="C:\Users\grusa\Desktop\test2.dotx", NewTemplate:=False, DocumentType:=0)
With objDoc
'I need it to be cell from the same row loop currently is
' now this line move info to first doc from C1, to second from C2 and etc.
.ContentControls.Item(1).Range.Text = Worksheets("Lapas").Cells(i, "C").Value
End With
objWord.Visible = True
Next
objWord.Visible = True
End Sub
其他问题:由于整个过程可能需要一段时间,因此有没有办法显示某种加载条来表明宏正在工作?
答案 0 :(得分:1)
您需要将循环更改为绝对而不是像您一样相对计算到所选范围。
有关状态信息,您可以使用fun expand (xs, n) =
List.foldr (fn (x, acc) => List.tabulate (n, fn _ => x) @ acc) [] xs
在Excel的状态栏中显示宏的工作步骤。
Application.StatusBar
答案 1 :(得分:0)
您可以将它们用于循环的开始和结束:
Dim FirstRow as Long
Dim LastRow as Long
FirstRow = Selection.Rows(1).Row
LastRow = FirstRow + Selection.Rows.Count
然后循环如下:
For i = FirstRow To LastRow
' ...
Next i