2013-03-03 3 views
2

Надеюсь, кто-то может мне помочь в этом. Ниже приведен сценарий VB в Excel и создается новый документ Word. Код скопирует изображение из Excel в Word. Затем он создаст и разместит TextBox над изображением. Затем он будет помещать текст в TextBox. Этот код работает правильно.VBScript из Excel в Word

Set wrdApp = CreateObject("Word.Application") 
wrdApp.Visible = True 
Set wrdDoc = wrdApp.Documents.Add 

Sheets("Sheet1").Shapes("Picture1").Copy 
wrdApp.Selection.Paste 


With wrdDoc.Shapes.AddTextBox(msoTextOrientationHorizontal, 200, 150, 96, 50) 
    .Select 
    .Name = "TextBox1" 
End With 


With wrdApp.Selection 
    .ShapeRange.Fill.Visible = 0 
    .ShapeRange.Line.Visible = 0 
    .TypeText Text:="My picture text" 
End With 

Как уже упоминалось, приведенный выше код действительно работает. Проблема в том, что мне нужно поместить это в цикл, чтобы снова скопировать изображение (число Х). Когда я пишу код, чтобы поместить его в цикл, он вставляет дополнительный снимок в TextBox, потому что последний был выбран. Мне как-то нужно закодировать что-то вроде клавиш Ctrl + End, чтобы он довел курсор до конца документа и вне TextBox. Я не могу заставить это работать.

Для того, чтобы сделать это, мне нужно использовать этот код:

Selection.EndKey Unit:=wdStory 

Так правильное место, чтобы вставить его в код должен быть в этом разделе, как и то, что я ниже:

With wrdApp.Selection 
    .ShapeRange.Fill.Visible = 0 
    .ShapeRange.Line.Visible = 0 
    .TypeText Text:="My picture text" 
    .EndKey Unit:=wdStory 
End With 

Это дает мне ошибку VB, когда я добавляю эту строку. Теперь, если я скопирую этот код в Word и запустил его из Макро, он будет работать отлично. Однако этот код находится в Excel и должен создавать все в Word.

Может кто-нибудь рассказать мне, как я могу его получить, чтобы он перемещал курсор из TextBox и до конца документа? Я знаю, проблема в том, что код находится в Excel и пытается перейти в Word, должен быть какой-то способ заставить его работать или аналогичный код с использованием ASCII. Я пробовал все, что мог придумать, и искал часы для решения.

Спасибо за любую помощь кто-то может предоставить,

Chris

+0

Как насчет вызова макроса в Word изнутри Excel? –

ответ

1

Если я правильно понимаю ваш вопрос, это работает для меня:

With wrdapp.ActiveDocument 
    .Range(.Range.Characters.Count, .Range.Characters.Count).Select 
End With 

Редактировать

Попробуйте это (добавьте материал, удалите материал, посмотрите, что работает):

With wrdapp.ActiveDocument 
    .Range(.Range.Characters.Count, .Range.Characters.Count).Select 
    .GoTo wdgotobookmark, name:="\EndOfDoc" 
    Selection.Move wdCharacter, .Characters.Count 
End With 
+0

Спасибо тонну mkingston! Это работает отлично! Гений, я бы никогда не придумал этого. – Chris

+0

Ха-ха, я могу не дойти до гения. На самом деле, нет, я возьму его. Рад был помочь :). – mkingston

+0

Привет, mkingston, ваш код отлично работает, когда я делаю только один экземпляр, но когда я помещаю его в цикл, он копирует несколько изображений в документ, создающий TextBox для каждого изображения, код помещает курсор перед изображение (для каждого изображения после первого). Итак, с 1-м изображением/TextBox установите код работы (поместите курсор в конец документа, после изображения). Затем, когда он петли, чтобы сделать 2-й набор, после этого курсор переходит к передней части каждого набора. Мне нужно, чтобы курсор всегда располагался в самом конце документа каждый раз. У тебя есть идеи? Спасибо – Chris

0

Хотя это может быть не идеальный способ, код ниже очистит выделение в Word, перемещая фокус из текстового поля.

wrdApp.Activate 
SendKeys "{ESC}" 
+0

Спасибо за ответ Tolga Ozudogru, я не получаю никаких ошибок, но это все еще сохраняет выбранное текстовое поле. Ответ, который дал mkingston, отлично работает. Я благодарен за ответ. – Chris

+0

Собственно, исправление моего последнего комментария. Это работает, и я был так близок к этому. Мой ситакс был просто слегка выключен. Вот как это должно быть для того, что мне нужно: wrdApp.Activate SendKeys "^ {END}" Еще раз спасибо Tolga Ozudogru! – Chris

Смежные вопросы