2016-01-29 48 views
-1

我在Microsoft Word中創建表單。我有幾個'文本表單域',其中一些我想限制,所以用戶只能輸入數字。我不明白爲什麼Microsoft允許您在允許輸入任何值時將「類型」更改爲「數字」。因爲這似乎是我轉向VBA的情況。MS Word文檔表格 - 檢查退出時的文本字段值

我試圖運行一個宏,當用戶退出這些字段之一,以確保輸入有效。我寧願不爲每個我想限制爲數字的字段創建一個新的宏。

我想我的問題是我不知道如何獲得當前字段的結果。我可以爲每個字段創建一個不同的宏,並通過明確指定其名稱來獲得結果,但似乎更聰明的方式存在。

這是我到目前爲止。

Sub validateNumericFields() 
'Check to see if the value in the current field is numeric 
'If it is not, send a message to the user, and set value to default value 

If IsNumeric(Selection.Fields(1).Result) = False Then 
    MsgBox "You must enter a valid number.", vbExclamation 
    Selection.Fields(1).Result = Selection.Fields(1).TextInput.Default 
End If 
End Sub 
+0

在我們討論您的問題之前,我們需要確保我們瞭解它。你似乎是「混合和匹配」的術語,這使得很難確定你有什麼。 「UserForm」是一個VBA表單;它有「文本框控件」。 Word文檔可以作爲表單進行保護,並具有「文本表單域」。你有後者而不是前者是正確的嗎? –

+0

是的,後者是正確的。我還沒有使用VBA創建輸入字段。我已將「傳統文本表單域」插入到Word文檔中,並將限制編輯,因此只有表單域可由用戶編輯。 – Jake

+0

您使用的是哪個版本的Word?當我將文本框表單字段的類型設置爲數字時,它不會讓我在其中鍵入文本。文本變成0(零)。 –

回答

1

有多種方法可以獲取表單域的「名稱」,因爲這也是一個書籤。 FormField對象確實有一個Name屬性,但我無法從OnExit運行時可用的Selection對象中獲取它。但我可以獲得書籤名稱,所以:

Sub validateNumericFields() 
    'Check to see if the value in the current field is numeric 
    'If it is not, send a message to the user, and set value to default value 
    Dim ff As word.FormField 
    Set ff = ActiveDocument.FormFields(Selection.Bookmarks(1).Name) 

    If IsNumeric(ff.Result) = False Then 
    MsgBox "You must enter a valid number.", vbExclamation 
    ff.Result = ff.TextInput.Default 
    End If 
End Sub 
+0

謝謝!所以這確實有效,但我必須將我的字段類型更改爲「普通文本」而不​​是數字。如果我將該類型保留爲Number,那麼如果我使用光標導航到另一個字段,則不會總是有效,這與我在問題的評論中所描述的相同。將類型設置爲常規文本,它可以一致地工作。 – Jake