使用textbox1.value填充表格范围

时间:2018-05-21 14:33:33

标签: vba ms-word

Private Sub CommandButton1_Click()

Dim tl As Integer

t1 = 33

'**************

Dim tbl1 As Table
Dim rng As Range

Set doc = ActiveDocument    
Set tbl1 = ActiveDocument.Tables(t1)
Set rng = doc.Range(Start:=tbl1.Cell(2, 5).Range.Start, _
     End:=tbl1.Cell(100, 5).Range.End)

rng.Text = TextBox1.Text 

当我按下按钮时,此代码无法正常工作,我只能填写Start:=tbl1.Cell(2, 5) ....这只填充1个单元格

但是End:=tbl1.Cell(100, 5).Range.End)不起作用。它没有填满所有行。

2 个答案:

答案 0 :(得分:0)

您需要遍历所有相关的单元格。例如:

Private Sub CommandButton1_Click()
Dim tl As Long, r As Long
t1 = 33
With ActiveDocument.Tables(t1)
  For r = 2 To 100
    .Cell(r, 5).Range.Text = TextBox1.Text
  Next
End With
End Sub

答案 1 :(得分:0)

如果您想使用您发现的将一个单元格复制到多个单元格的相同技术,那么这也应该有用。但是,这有点棘手,并且您没有提供足够的信息来重现TextBox,因此您可能需要调整以下内容。

我将ActiveX文本框放在文档表面上,然后使用InlineShapes集合进行拾取。如果您使用的是UserForm,则需要更改该部分。

无法将Word中的Column分配给Range对象。 Range必须是连续的文本流。在Word中,连续流是水平的,然后是垂直的 - 因此Rows可以分配给Range,但不能分配给列。 (这就是为什么另一个Answer循环列中的单元格,这相对较慢。)

但是,可以选择列并使用Selection。因此,下面的代码会将文本框的内容复制到剪贴板,然后选择整个列并粘贴到Selection

Sub CopyToMultipleCells()
    Dim tl As Integer
    Dim doc As word.Document
    Dim tb As MSForms.TextBox

    tl = 1

    '**************

    Dim tbl1 As Table
    Dim rng As Range

    Set doc = ActiveDocument
    'Change if on a UserForm
    Set tb = doc.InlineShapes(1).OleFormat.Object
    'Select the text box content, then copy it
    tb.SelStart = 0
    tb.SelLength = tb.TextLength
    tb.Copy

    Set tbl1 = ActiveDocument.Tables(tl)
    tbl1.Columns(5).Select
    Selection.Paste        
End Sub