2013-05-08 1 views
0

Хорошо, у меня есть шаблон Word 2010, с которым я играю. У меня есть кнопка вверху, которую пользователи нажимают, чтобы автоматически сохранить слово doc в формате pdf с (почти) правильным именем в правильной директории и открыть документ. У меня также есть поле раскрывающегося списка, в котором они могут выбрать месяц.Вывод поля раскрывающегося списка в строку для использования в формуле VBA

Код кнопки:

Private Sub CommandButton1_Click() 
    Convert_PDF 
End Sub 


Sub Convert_PDF() 

Dim desktoploc As String 
Dim filename As String 
Dim date As String 
Dim user As String 
Dim mypath As String 

    desktoploc = CreateObject("WScript.Shell").SpecialFolders("Desktop") 
    filename = "Installs Team Metrics" 
    user = VBA.Environ("USERNAME") 
    mypath = desktoploc & "\Metrics\" & filename & " - " & date & " - " & user 

    ActiveDocument.ExportAsFixedFormat OutputFileName:= _ 
     mypath, _ 
     ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _ 
     wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _ 
     Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _ 
     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _ 
     BitmapMissingFonts:=True, UseISO19005_1:=False 
End Sub 

это выводит файл C: \ Users [имя пользователя] \ Desktop \ Метрики \ INSTALLs Team Метрики - [Месяц] - [имя пользователя] .pdf

Самая большая проблема заключается в том, что я не могу понять, как получить то, что выбрано в раскрывающемся списке, к строке «дата». У меня такое чувство, что я использую неправильный (довольно уверен, что мне нужен элемент управления ActiveX), но я очень новичок в VBA и буду признателен за некоторую помощь.

+0

Вы можете добавить скриншот вашего документа, представляющего тип комбинированного блока, который вы используете? –

+0

не смог добавить его в сообщение, не хватило репутации. http://i.imgur.com/hIA7DkH.png вы получите его, перейдя на вкладку разработчика-> Элементы управления-> Устаревшие инструменты-> раскрывающееся поле формы – jparnell8839

ответ

0

Похоже управления контентом, а не унаследованной поле, так что вам нужно будет

Activedocument.Contentcontrols (I) .Range.Text

Где я это индекс нет. (первый в документе равен 1 и т. д.)

Значит, вам нужно знать номер, или вам нужно использовать заголовок или тег элемента управления (или что-то еще) для идентификации элемента управления , В случае элементов управления содержимым вы должны выполнить итерацию коллекции, чтобы найти ее, например.

Dim cc As ContentControl 
For Each cc in ActiveDocument.ContentControls 
    If cc.Tag = "mytag" Then 
    strDate = cc.Range.Text 
    Exit For 
    End If 
Next 

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

Другой способ сделать это - создать пользовательскую XML-часть с элементом «Дата» и подключить к ней свой контроль с помощью xPath. Затем вы можете получить значение непосредственно из пользовательской части XML, и вам не нужно ничего знать о самом элементе управления. Но я думаю в простой форме, которая добавляет сложности, которые вы можете обойти.

+0

спасибо bibadiak, я дам вам попробовать и разрешить вы знаете, как это получится – jparnell8839

+0

Нужно ли мне помещать это в свой собственный суб? Как именно я буду структурировать это? пожалуйста, имейте в виду, Im общее количество n00b в VBA ... – jparnell8839

+0

Нет, вы можете поместить код в существующую процедуру - при необходимости вы можете перемещать Dim в верхнюю часть вашей подпрограммы, и вам нужно будет Dim «strDate» или измените его на «дату», чтобы он соответствовал вашему существующему коду. В идеале вы бы также рассмотрели случай, когда вы не нашли соответствующий тег и т. Д. – 2013-05-10 19:16:48

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

  • Нет связанных вопросов^_^