任务如下:
创建一个带有列表框、两个组合框和一个命令按钮的用户窗体。列表框应使用文本中的小写字符(仅 ASCII 97-122)按升序填充,并且每个字符应仅出现一次。
我对 VBA 还很陌生,仍在努力了解编程背后的思维方式,但遗憾的是考试不会等我。考试就是这么无情。
我原本想使用 Asc() 函数来填充列表框,并且我对 For 迭代有了基本的了解,但我觉得我需要在 For 迭代中的 For 迭代中进行 If 选择,而这远远超出了我的理解。
至于任务的其余部分:ComboBox1 包含字符串值“Red、Blue、Black”,ComboBox2 包含数字“0、1、2”,命令按钮应执行此操作:按钮本身只有在列表框中选择了任何内容时才处于活动状态。如果通过,它应该检查 ComboBox1 中选择了哪种颜色以及 ComboBox2 中的数字是什么。然后它应该检查 Word 中的文本以查找所选字母,并为列表框中包含所选字符数量的每个单词着色。
英语不是我的母语,所以这里有一个例子:
This is a test sentence.
Listbox char selected: e
ComboBox1: Red
ComboBox2: 1
The result should be the "test" word being red.
ComboBox2: 2
The result should be the "sentence" word being red.
ComboBox2: 0
The result should be the "This" "is" "a" words being red.
我的考试在下周,我真的很困惑,所以如果有人能给我最简单(尽可能最短)的代码,我会非常感激,这会对我有很大帮助。提前谢谢!
以下是我目前所写的内容:
Private Sub UserForm_Initalize()
With UserForm1.ComboBox1
.Additem "Red"
.Additem "Blue"
.Additem "Black"
End With
With UserForm1.Combobox2
.Additem "0"
.Additem "1"
.Additem "2"
End With
For i = 1 To ActiveDocument.Characters.Count
letter = ActiveDocument.Characters(i)
If letter > "Z" Then
ListBox1.Additem (Trim(letter))
db = db + 1
End If
Next
'Ascending order
ReDim temp(ListBox1.ListCount)
For r = 1 To ListBox1.ListCount
ListBox1.ListIndex = r - 1
temp(r) = ListBox1.Text
Next r