2016-09-26 5 views
-1

単語文書を開くときに、文書内に特定の単語が存在するかどうかを確認できます。もしそうなら、私はユーザーフォームを開きたいと思います。基本的には、挨拶の受取人の姓の代わりに「姓」のテンプレートレターがあります。ドキュメントを開くと、自動的にユーザーフォームがポップアップされるので、テキストボックスにユーザーの姓を入力し、ユーザーフォームで「完了」をクリックすると検索と置換機能が実行されます。 「lastname」をその人の姓に置き換えた場合、私はuserformをポップアップしたくありません。私は "姓"が存在するかどうかをチェックすることを除いてすべてを達成する方法を知っています。これを行う方法はありますか? "ThisDocumentの" コード・ペインの代わりに特定の単語が文書内にあるかどうかを調べるためのVBA

+0

"姓" を持っていない、持っています[ブックマーク](https://support.office.com/en-us/article/Add-or-delete-bookmarks-f68d781f-0150-4583-a90e-a4009d99c2a0)、[ブックマーク](https ://msdn.microsoft.com/en-us/library/office/ff834559.aspx)が空です。 – GSerg

答えて

0

この(コメント)コード:

Option Explicit 

Private Sub Document_Open() 
    Dim lastNameRng As Range 

    Set lastNameRng = GetLastname(ActiveDocument, "lastname") '<--| set 'lastNameRng' range to the one in the active document containing "lastname" 
    If lastNameRng Is Nothing Then Exit Sub '<--| exit if active document doesn't contain "lastname" 

    With UserForm2 '<--| change "UserForm2" to your actual userform name 
     With .TextBox1 '<--| change "TextBox1" to your actual TextBox name 
      .Value = "lastname" '<--| default value 
      .SetFocus '<--| make textbox the active control 
      .SelStart = 0 '<--| set the textbox selected text start from the beginning of the textbox text 
      .SelLength = Len(.Text) '<--| set the textbox selected text length as the textbox text one 
     End With 
     .Show '<--| show the userform and let the user input its text 
     lastNameRng.Text = .TextBox1.Value '<--| change "lastname" to the validated user input in TextBox1 (change "TextBox1" to your actual TextBox name) 
    End With 
    Unload UserForm2 
End Sub 


Private Function GetLastname(doc As Document, strng As String) As Range 
    Dim myRange As Range 

    Set myRange = ActiveDocument.Content '<--| set 'myRange' to passd dcoument entire content 
    myRange.Find.Execute FindText:=strng, MatchCase:=True, MatchWholeWord:=True, Forward:=True '<--| set 'myRange' to the one containing passed string in the passed document 
    If myRange.Find.Found = True Then Set GetLastname = myRange '<--| if 'myRange' has been actually set the return it 
End Function 

ユーザーフォームのコードウィンドウの代わりに、次のコード:

Option Explicit 

Private Sub CommandButton1_Click() '<--| change "CommandButton1" to your actual "Done" button name 
    If Not ValidateInput(Me.TextBox1) Then Exit Sub '<--| exit if invalid input in TextBox1 (change "TextBox1" to your actual textbox name) 
    Me.Hide 
End Sub 

Function ValidateInput(tb As MSForms.TextBox) As Boolean 
    With tb '<--| reference passed textbox 
     If Trim(.Value) = "" Then '<--| if its content is empty... 
      MsgBox "You must enter a last name !", vbExclamation + vbInformation '<--| inform the user 
      .SetFocus '<--| make textbox the active control 
      .Value = "lastname" '<--| set the "default" textbox text 
      .SelStart = 0 '<--| set the textbox selected text start from the beginning of the textbox text 
      .SelLength = Len(.Text) '<--| set the textbox selected text length as the textbox text one 
     Else 
      ValidateInput = True 
     End If 
    End With 
End Function 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = vbFormControlMenu Then '<--| don't let the user close the userform by clicking the white cross at its top left 
     MsgBox "Click the 'Done' button to close the form" 
     Cancel = True 
    End If 
End Sub 
+0

ありがとう、完璧に動作! – Jim

+0

あなたは大歓迎です。次に、回答を受け入れたものとしてマークしてください。ありがとうございました。 – user3598756

関連する問題