>

테이블이 MS WORD에 있지만 VBA를 사용하여 반복하려고합니다. 현재 소스에서 데이터를 추출했으며 MS 단어로 테이블에 입력하고 싶습니다. 테이블에는 여러 행과 2 개의 열이 있습니다. 데이터는 각 행의 두 번째 열 안에 입력됩니다. 현재 많은 데이터가 있으며 각 행 번호를 계속 지정할 수 없으므로 셀이 채워질 때마다 추가 행을 추가하는 방법을 찾고 싶습니다.

Excel에서이 코드 세트는 작동하지만 단어로는 작동하지 않습니다.

Do While (Len(Worksheets("Overall Performance").Cells(NewRecordRow, 12).Value) <> 0)
     NewRecordRow = NewRecordRow + 1
 Loop

현재 이것은 내가 가진 것입니다.

Dim intNoOfRows
Dim intNoOfColumns
Dim objWord
Dim objDoc
Dim objRange
Dim objTable
intNoOfRows = 1 (Initially 6 because I Preset it)
intNoOfColumns = 2
Set objWord = CreateObject ("Word.Application")
Set objDoc = objWord.Document.Add
objDoc.Tables.Add objRange, intNoOfRows, intNoOfColumns
Set objTable = objDoc.Tables(1)
objTable.Borders.Enable = True
For Each cell(intNoOfRows,2) in objDoc.Table(1).range.cells
    If Len(cell.range.text) <1 Then
        intNoOfRows = intNoOfRows + 1
    End if
Next
ObjTable.Cell(intNoOfRows,2).Range.Text = "ABC"


  • 답변 # 1

    내 테스트에 따르면 다음 코드는 내 측면에서 잘 작동합니다 (핵심 포인트는InStr ([시작], 문자열, 하위 문자열, [비교])).

    Do While InStr(1, strCellText, "", vbBinaryCompare) <> 1
               'MsgBox "OK"
              Selection.InsertRowsBelow 1
        Loop
    
    

    전체 코드 작업 (테스트 목적으로, 먼저 N 개의 행과 세 개의 열로 된 테이블을 수동으로 작성하십시오) :

    Sub Test()
    Dim intNoOfRows
    Dim intNoOfColumns
    Dim objWord
    Dim objDoc
    Dim objRange
    Dim objTable As Word.Table
    Dim strCellText As String
    intNoOfRows = 1 '(Need to be the actully row count of your talbe)
    intNoOfColumns = 3
    Set objDoc = ActiveDocument
    Set objTable = objDoc.Tables(1)
    objTable.Borders.Enable = True
    With objTable  
     strCellText = .Cell(intNoOfRow, 2).Range.Text
     intNoOfRows = .Rows.Count
        Do While InStr(1, strCellText, "", vbBinaryCompare) <> 1
               'MsgBox "OK"
               intNoOfRows = intNoOfRows + 1
        Loop      
    .Rows.Last.Select
    Selection.InsertRowsBelow 1
    .Cell(intNoOfRows, 3).Range.Text = "ABC"
    MsgBox intNoOfRows
    End With
    End Sub
    
    

    다음 코드도 사용할 수 있지만 메모리 문제가 발생하여 권장하지 않습니다.

    With objTable
    Do While Len(.Cell(intNoOfRows, 2).Range.Text) <> 0
         intNoOfRows = intNoOfRows + 1
         MsgBox intNoOfRows
    Loop
    End With
    
    

관련 자료

  • 이전 recursion - big-o 표기법 런타임 - 코딩 인터뷰 균열 예
  • 다음 Groovy가 접근 자 메소드에서 필드를 작성하지 못하게하는 방법은 무엇입니까?