2017-05-19 2 views
0

현재 두 Excel 문서 간의 숫자를 비교하고 테스트 결과를 Word 문서의 테이블에 작성하려고합니다. 문서에 대한 연결을 설정할 수 있었지만 실제로 테이블을 추가 할 수는 없습니다. Excel 2010 VBA를 통해 Word 문서에 테이블 추가

내가 무엇을 가지고 :

Dim wordObj As Object 
Dim outFile As Object 

On Error Resume Next 
Set wordObj = GetObject(, "Word.Application") 

If wordObj Is Nothing Then 
    Set wordObj = CreateObject("Word.Application") 
End If 

Set outFile = wordObj.Documents.Add 

wordObj.Visible = True 
wordObj.Tables.Add Range:=wordObj.Selection.Range, NumRows:=1, NumColumns:=3 

wordObj.Selection.Tables(1).Select 

With wordObj.Selection 
     .TypeText ("test1") 
     .MoveRight (wordObj.wdCell) 
     .TypeText ("test2") 
     .MoveRight (wordObj.wdCell) 
     .TypeText ("test3") 
     .MoveLeft (wordObj.wdCell) 
     .MoveLeft (wordObj.wdCell) 
     .MoveDown Unit:=wordObj.wdLine, Count:=1   
End With 

나는 또한 단지 일 3 열로 페이지를 분할 시도하지만, 내가 원하는 열 (I 사이에 실제로 전환 내가 프로그램을 얻을 수 있었다 InsertBreak (wdColumnBreak)를 사용하여 시도). 그래서 몇 가지 이유로 열을 추가하지만 테이블이 없습니다.

+0

시작한 것처럼 코드가 보입니다. 당신이 그만 둘 때까지 데리러 갈 사람을 찾는 것은 어려울 것입니다. 질문에 시도한 코드를 포함시켜야하는 이유는 무엇입니까? 그런 다음 코드를 작성하는 대신 누군가가 오류를 수정할 수 있습니다. 내가주의하는 한가지 오류는'wordObj'를 보이게 할 수 없다는 것입니다. 아마 당신이하려는 의도는'wordObj'가'outFile'을 연 창을 활성화하는 것입니다. 단, 코드가 그것을 열지 않는다는 것만 다릅니다. Excel 응용 프로그램에서'wordObj'를 사용하기 때문에 늦은 바인딩이 문제가 될 수 있습니다. "Dim outFile Word.Document'를 더 잘 선언하십시오. – Variatus

+0

답장을 보내 주셔서 감사합니다. 내가 가지고있는 유일한 다른 코드는 테이블을 선택하고 테이블에 값을 쓰는 것이 었습니다.이 테이블은 테이블이 처음부터 존재하지 않았기 때문에 무의미하다고 생각했지만 제 게시물을 편집했습니다. 그리고 그 시간에 잘못된 참조를 변경하여 (예 : outFile 대신 wordObj의 속성에 액세스하려고 시도하는 등) 코드를 작동 시켰습니다. 또한 outFile의 선언을 Word.Document로 변경했습니다. –

답변

0

Tables.Add의 문제점은 잘못된 개체에서 호출하는 것입니다. 또한 문서의 단어를 메서드라고 부르는 것이므로 " 단어 범위 "그게 뭐든간에. 다음은 작동하는 코드이지만 복사 및 붙여 넣기의 대상은 다음과 같습니다.

Sub aaa() 
    Dim wordObj As New Word.Application 
    Dim outFile As Word.Document 
    Dim s As Worksheet 
    Dim r As Range 

    wordObj.Visible = True 
    Set outFile = wordObj.Documents.Add 
    outFile.Activate 

    Debug.Print "Here!" 

    Set s = ActiveWorkbook.Sheets("Sheet1") 
    Call s.Range("E4:J10").Copy 
    ' Call outFile.Tables.Add(wordObj.ActiveDocument.Range(0, 0), NumRows:=3, NumColumns:=3) 
    Call wordObj.ActiveDocument.Range(0, 0).Paste 
End Sub 
0

코드가 정확하지 않습니다. 더 체계적으로 만들려고 노력해야합니다. 먼저 Word 응용 프로그램의 인스턴스를 만듭니다. 그런 다음 해당 응용 프로그램에서 문서를 만들도록하십시오. 그런 다음 해당 문서에 표를 배치하십시오. 그런 다음 해당 테이블에서 셀을 찾습니다. 그리고 그 셀에만 텍스트를 추가하십시오.

비교해 보면 Word 응용 프로그램을 만들거나, 문서를 만들지 않고, 존재하지 않는 문서를 테이블에 추가하고, 아마도 필사적으로 응용 프로그램에 텍스트를 추가하려고합니다. Word 응용 프로그램에는 선택 항목 (wordObj.Selection)이 없으며 문서 만 있습니다.

다음 코드는 원하는 작업을 수행합니다. 나는 당신의 이해를 돕기 위해 그것을 썼습니다. 그렇지 않기 때문에 "아기 언어"라고 생각하지 마십시오. 단지 모서리를 자르지 않습니다. 당신은 더 능숙한 후에 모서리를 자르는 방법을 배울 수 있습니다. 명심하십시오. 코드가 덜 안정적으로 커질수록 코드가 더 잘됩니다.

Sub WriteToWordTable() 

    ' declarations for the Excel application: 
    Dim Ws As Worksheet 

    ' declarations for the Word application: 
    Dim wordObj As Word.Application 
    Dim outFile As Word.Document 
    Dim outTable As Word.Table 
    Dim wdRng As Word.Range 

    Set Ws = ActiveSheet 
    Ws.Cells(2, "A").value = "Test1" 

    On Error Resume Next 
    Set wordObj = GetObject(, "Word.Application") 

    If wordObj Is Nothing Then 
     Set wordObj = CreateObject("Word.Application") 
    End If 

    Set outFile = wordObj.Documents.Add 
    With outFile 
     Set wdRng = .Range(0, 0) 
     Set outTable = .Tables.Add(Range:=wdRng, _ 
            NumRows:=1, NumColumns:=3) 
    End With 

    With outTable 
     .Cell(1, 1).Range.Text = Ws.Cells(2, "A").value 
     .Rows.Add 
     .Cell(2, 1).Range.Text = "Test2" 
    End With 

    With wordObj.ActiveWindow 
     .Visible = True 
     .Activate 
    End With 

' outFile.Close 
' wordObj.Quit 
End Sub 

현재로서는 Word 문서를 언제든지 볼 필요가 없습니다. Word 응용 프로그램을 조용히 닫고 Excel에서 계속 작업 할 수 있습니다. 그러나 그 목적을 위해 닫고 나서 Word를 종료하기 전에 outFile을 저장해야합니다.