2017-10-30 3 views
0

Word 문서에서 매크로를 사용하여 Excel 통합 문서의 데이터를 해당 MS Word 문서에 입력했습니다.런타임 오류 1004 '워크 시트'개체 _Global

루틴은 데이터가 저장된 Excel 통합 문서를 찾은 다음 통합 문서의 필드를 복사하고 단어 문서 텍스트의 항목을 찾은 다음 문서 텍스트 단어로 바꿉니다.

다음 코드가 작동했지만 가끔 런타임 오류가 발생합니다. 이제 모든 실행에 다음과 같은 오류가 발생합니다.
.Replacement.Text = 워크 시트 ("1 조직 서비스 :

런타임 오류 '1004'방법 '워크 시트'object'_Global의 '

그것은이 라인으로 트리거입니다 실패 영역 "). 범위 ("B3 "). 값 '조직 이름 삽입

코드가 훨씬 길지만 여기에 아이디어가 있습니다. 오류는 아래에 표시된 첫 번째 하위에서 트리거됩니다.

Sub InputContractData() 
' 
' You must pick Microsoft Excel Object Library from Tools>References 
' in the Visual Basic editor to execute Excel commands. 

' InputContractData Macro 
' 
' 

'Define Excel and Workbook Information 
Dim objExcelApp As Excel.Application 
Dim objCDCDataWorkbook As Workbook 
Dim CDCDataFile 
Dim CDCDataFilePath 
Dim CDCDataFileName 

'Define Word and Document Information 
Dim objWordApp As Word.Application 
Dim objWordDoc As Word.Document 

'Open Excel Program 
Set objExcelApp = New Excel.Application 

Set objWordApp = Word.Application 
Set objWordDoc = objWordApp.ActiveDocument 
objExcelApp.Visible = True 
objWordApp.Visible = True 
CDCDataFile = objExcelApp.GetOpenFilename("Excel Files (*.xlsx), *xlsx") 
Set objCDCDataWorkbook = objExcelApp.Workbooks.Open(CDCDataFile) 
CDCDataFilePath = Left(CDCDataFile, InStrRev(CDCDataFile, "\")) 

CDCDataFileName = Dir(CDCDataFile) 

Call Sheet001 



'Save Document in same folder as CDC Workbook 
    objWordDoc.SaveAs CDCDataFilePath & "\DraftContract.docx" 

' Close the new Word document. 
    objWordApp.ActiveDocument.Close 
' Close the Word application. 
    objWordApp.Quit 

End Sub 




Sub Sheet001() 
'Sheet 1- Organization Service Area ----------------------------- 
With Selection.Find 
    .ClearFormatting 
    .Text = "[[ORGANIZATION]]" 
    .Replacement.ClearFormatting 
    .Replacement.Text = Worksheets("1- Organization Service Area").Range("B3").Value 'Insert Organization Name 
    .Execute Replace:=wdReplaceAll, Forward:=True, _ 
    Wrap:=wdFindContinue 
End With 
End Sub 
+1

어느 라인 (들) 수행이 오류를 던지는시 디버거 하이라이트? –

+0

.Replacement.Text = 워크 시트 ("1- 조직 서비스 영역") 범위 ("B3"). 값 '조직 이름 삽입 –

+1

질문에 필수 정보를 포함해야합니다. 의견은 언제든지 사라질 책임이 있다고 간주되어야합니다. –

답변

1

라인의 문제 :

.Replacement.Text = Worksheets("1- Organization Service Area").Range("B3").Value 'Insert Organization Name 

가 MS 워드는 워드 개체 모델에 기본 객체가 아니라 이후 Worksheet이 무엇인지 모르고있다는 것이다.

개체를 적절한 부모 개체에 명시 적으로 할당하면 항상 작동합니다. Worksheet은 Excel의 개체이기 때문에 Excel 개체로 완전히 한정합니다. 나는 이것을 아래에 나타내었고 InputContractData 프로 시저에서 변수를 로컬로 선언 한 이후 Excel 통합 문서를 하위로 전달하기로 선택했습니다.

Sub Sheet001(ws as Excel.Worksheet) 
'Sheet 1- Organization Service Area ----------------------------- 
With Selection.Find 
    .ClearFormatting 
    .Text = "[[ORGANIZATION]]" 
    .Replacement.ClearFormatting 
    .Replacement.Text = ws.Range("B3").Value 'Insert Organization Name 
    .Execute Replace:=wdReplaceAll, Forward:=True, _ 
    Wrap:=wdFindContinue 
End With 

End Sub 

다음과 같이 전화 :

Sheet001 objExcelApp.Workbooks(CDCDataFileName).Worksheets("1- Organization Service Area") 
+0

반환 된 인수는 Call Sheet001에서 선택 사항이 아님 –

+0

어느 행이 정확히 일치하는지 –

+0

시트의 이름이 "1- Organization Service Area"인지 정확히 확인하십시오. –