2013-05-30 2 views
-1

VB 매크로를 사용하여 Excel (.xlsm)의 데이터를 사용하여 워드 문서 (.docm)의 생성을 자동화하려고합니다.VB에서 테이블을 Excel에서 Excel로 복사하는 방법

현재 Excel의 정보 일부를 Word 문서로 복사 할 수 있습니다. 문제는 내가 단어를 책갈피로 테이블 정보를 전달하는 솔루션을 찾을 수 없습니다.

Sub Word() 

Dim wdApp As Word.Application 
Dim WDDoc As Word.Document 
Dim BMRange As Word.Range 
Dim cliente As Range 
Dim CPE As Range 
Dim localidade As Range 
Dim numproposta As Range 
Dim DIRECT, saveAsName, data As String 
Dim table1 As Table 

Set wdApp = CreateObject("Word.Application") 'Create an instance of word 
Set WDDoc = wdApp.Documents.Open("C:\Users\PT13217294\test.docm") 'Open word file 
wdApp.Visible = True 

'excel ranges 
'Windows(shtname).Activate 

Set cliente = Sheets("Dados").Range("C10") 
Set CPE = Sheets("Dados").Range("C15") 
Set localidade = Sheets("Dados").Range("C13") 
Set table1 = Sheets("Cálculos").Range("B5:K17") 

'word's bookmark 

'cabeçalho 
ActiveDocument.Bookmarks("cliente4").Range.Text = cliente 

'rodapé 
ActiveDocument.Bookmarks("num_proposta4").Range.Text = numproposta 

'corpo texto 
Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="cliente1") 
BMRange.Text = cliente 

Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="Table") 
BMRange.Text = table1 

'Guardar word na pasta das propostas 
With wdApp.ActiveDocument 
saveAsName = "C:\Users\PT13217294\test.docm" 
ActiveDocument.SaveAs Filename:=saveAsName 
wdApp.Quit 
End With 

Set BMRange = Nothing 
Set WDDoc = Nothing 
Set wdApp = Nothing 

이 문제를 해결하려면 어떻게해야합니까? 사전에 감사합니다,

앙드레

+1

우선, 프로그래밍을 위해'Option Explicit'을 사용해야합니다 ... 둘째, 코드 내에서 변수 이름을 확인하십시오 - 당신은'table1'을 가지고 있고'talbe'라는 책갈피를 넣으려고합니다 ... 아무것도 ... –

+0

아, 코드를 여기에 복사 할 때 실수 였어. 그것은 같은 이름입니다. – andrescpacheco

답변

1

당신은 (코드에서 table1 인) Excel Range Object를 할당 할 수 없습니다 : - (> 워드 매크로,하지만 난 그것을 사용하기 때문에이 잠시있었습니다 내 예를 들어 Excel에서이가)이 작업을 수행 할 필요가 ~ Word Range.Text Properties. 그런 상황에서 우리는 대개 두 개의 응용 프로그램 사이에 >> paste를 복사해야합니다.

따라서 다음을 수행해야합니다

'....your code here 
Set BMRange = WDDoc.Goto(What:=wdGoToBookmark, Name:="Table") 
'new code for you 
    table1.Copy 
    BMRange.Paste 
'rest of your code 
'Guardar word na pasta das propostas 
With wdApp.ActiveDocument 
'...and so on 

이 필요하다면 당신은 붙여 넣을 때 테이블 형성을 실험 할 필요가있다. 위의 솔루션을 시도하고 테스트합니다.

+0

내가 유 제안 무엇을하는 코드 세그먼트를 변경 : -'Set BMRange = WDDoc.Goto (무엇 : = wdGoToBookmark, 이름 = "표")' 'table1.Copy' 'BMRange.Paste' 에게 그리고 컴파일 오류가 발생합니다 : 메서드 또는 데이터 멤버를 찾을 수 없습니다. – andrescpacheco

0

당신 카즈의 제안을 (Option Explicit 오류 이런 종류의 방지) 사용 후에는 테이블을 복사 한 후, 당신은 (테스트되지 않은)이 같은 시도 할 수 있습니다 :

Dim wdRange as Object 
Set wdRng = WDDoc.Bookmarks("Table").Range 
wdApp.Goto(What:=wdGoToBookmark, Name:="Table") 
wdApp.Selection.PasteAndFormat wdTableOriginalFormatting '## Modify as needed 

당신은 기존의 테이블 모양을 삭제하는 몇 가지 논리를 추가해야 할 수도 있습니다 새로운 하나를 붙여 전에.

삭제하면 내가 당신 도, 생각

wdApp.Selection.Bookmarks.Add "Table", wdRng 
관련 문제