Как сохранить введенные данные в макрос, чтобы в следующий раз при заполнении формы ввода эти данные были заполнены? - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно сохранить данные, которые были введены в форму Microsoft Word в VBA после завершения макроса.У меня есть форма, содержащая около 40 полей с именами, адресами, номерами телефонов и т. Д., И я не хочу, чтобы пользователю приходилось вводить все заново, если он осознает, что допустил ошибку и ему необходимо изменить 1 элемент.В настоящее время макрос удаляет все данные, которые были введены в форму при закрытии формы.

Я просматривал форумы и Google, но мне не повезло.

Этот код вызывает мою форму ввода из текстового документа с помощью кнопки команды:

Private Sub CommandButton1_Click()

    InputForm.Show vbModeless
End Sub

Этот код закрывает форму:

Private Sub CloseForm_Click()

    Dim Closing As Integer
    Closing = MsgBox("This will exit the form and erase all the data that has been input. You may want to review the documents to ensure they were generated correctly before closing the form. Click Yes to proceed to close the form or No to go back to the form.", vbYesNo + vbQuestion, "Exit Confirmation")
    If Closing = vbYes Then
        Unload InputForm 'This closes the Input Form and returns the user to Word
    End If
End Sub

Макрос не сохраняет информацию, введенную в форму.Всякий раз, когда он закрывается, вся информация стирается;Я хочу сохранить это.

1 Ответ

0 голосов
/ 04 июля 2019

Варианты сохранения данных в документе

  1. Document.Variables Это доступно в Word с самых ранних дней и доступно во всех версиях начиная с Word 2.0 (начало 1990-х годов). Это просто место для хранения любого количества строк, связанных с идентификатором (именем). По сути, пара ключ-значение. Важно отметить: это должна быть пара, не может быть ключа без значения, а значение не может быть строкой нулевой длины. Присвоение значения имени создает Variable; удаление значения удаляет Variable. Они не видны пользователю.

Пример:

Document.Variables("Name").Value = "John Doe"
  1. Document.CustomDocumentProperties Аналогично Variables, но доступны типы данных, отличные от строк. Существует ограничение на длину данных, которые могут быть сохранены. Они видны пользователю через интерфейс «Свойства». Они должны быть явно созданы / уничтожены. Это было введено, я думаю, в Word 97.

Пример:

Document.CustomDocumentProperties.Add(Name As String, LinkToContent As Boolean, _
                                      [Type], [Value], [LinkSource]) 
  1. CustomXMLParts Это XML-страницы, сохраненные в пакете docx zip. Это хороший способ сохранить данные, и он легко доступен из закрытого файла . Возможность была введена в Word 2010, поэтому она не будет доступна ни в старых версиях, ни в форматах файлов doc, только в формате docx.

Кодирование более сложное, чем для Variables или Properties.

Обычный способ работы с этим в описанном сценарии заключается в создании CustomXMLPart в документе (или шаблоне - документы, созданные из шаблона, должны нести CXP). Затем все, что нужно сделать, это чтение / запись с уже доступных узлов xml. Если VBA-кодер не имеет опыта в разборе XML, будет крутая кривая обучения.

Существует много способов чтения и записи, вот фрагмент, демонстрирующий основы чтения, чтобы дать представление о том, что в нем происходит:

Sub ReadCXP()
    Dim cxp As Office.CustomXMLPart, CXPs As Office.CustomXMLParts
    Dim doc As Word.Document
    Dim sUri As String

    Set doc = ActiveDocument

    'object, not collection, because ID is unique and can return only one
    'ID is unique to each CustomXMLPart - this is won't work as it stands!
    Set cxp = doc.CustomXMLParts.SelectByID("{32B20BB8-F4FB-47D6-9DF4-FFAF5A1D8C18}")

    Dim xmlNds As Office.CustomXMLNodes
    Dim xmlNd As Office.CustomXMLNode
    Set xmlNds = cxp.SelectSingleNode("trees").ChildNodes
    For Each xmlNd In xmlNds
        Debug.Print xmlNd.XML
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...