如何获取行号然后遍历所选范围

时间:2018-10-11 08:03:28

标签: excel vba excel-vba

我正在创建宏,该宏将从模板创建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

其他问题:由于整个过程可能需要一段时间,因此有没有办法显示某种加载条来表明宏正在工作?

2 个答案:

答案 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