411 REFERENCE · Wikibooks
Visual Basic for Applications/Generate Random Dictionary Words
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Summary
This VBA code module works only in MS Word. It generates a pseudo random list of dictionary words, listing them in the immediate window of the VBA editor.
The VBA Code
Copy the code listing into a standard VBA module in MS Word and save the file as a docm type. Set the user options in the top section and run the procedure to produce the list.
The variable Num sets the number of words as output, and the variable TypoLen should be set to the approximate length of the sought-after words.
There is no ready-made collection of English words called a Dictionary in MS Word; the term is used for sets of user-constructed word lists. To access a list of English words, an indirect method needs to be used. A random word is first generated equal in length to TypoLen. The spell checker then fails to recognize the word so generates suggestions, this time as a proper collection. Provided that there is at least one such suggestion in the spell check collection, a random choice is made from among them for the output list. The loop continues until the chosen number of words has been produced.
The Code Module
Sub GetNRandomWords()
'Prints N randomly selected words
'in the Immediate Window
'Works in MS WORD only
Dim Sugg As SpellingSuggestions
Dim TypoLen As Long, n As Long
Dim sMakeWord As String, nR As Long
Dim Num As Long, p As Long
'set user options
TypoLen = 7 'trial text length
Num = 10 'number of samples
Randomize
Do
p = p + 1
Do
DoEvents
sMakeWord = ""
'make a misspelled word of length TypoLen
For n = 1 To TypoLen
'concatenate random charas
sMakeWord = sMakeWord & Chr(Int(26 * Rnd + Asc("a")))
Next n
'get resulting spelling suggestions collection
Set Sugg = GetSpellingSuggestions(sMakeWord)
'random select a suggestion
If Sugg.Count >= 1 Then 'assuming there is at least one
'random select one suggestion
nR = Int((Sugg.Count - 1 + 1) * Rnd + 1)
Debug.Print Sugg(nR) 'OUTPUT
'MsgBox Sugg(nR)
End If
Loop Until Sugg.Count >= 1
Loop Until p >= Num
End Sub
See Also
External Links