Excel ComboBox - 直到从组合框失去焦点时才显示键入的文本
Excel ComboBox - typed text not displaying until focus lost from combobox
我有一个组合框,在您键入时,下拉列表会动态填充与键入的输入相匹配的结果。
我面临的问题是,当您在组合框中键入内容时,您看不到您键入的内容。在下图中,您可以看到有一个带有“Build”的单元格 - 这是我临时设置为显示输入内容的链接单元格。
上面单元格和列表之间的白框是我输入的地方。但是正如您所见,没有文字可见。
单击 sheet 上的其他位置后,会出现键入的文本
我想要发生的事情(而且我确定曾经发生过)是,当我在组合框中键入文本时,应该在键入时显示正在键入的内容。
假设这与我设置的 vba 代码有关,我已将其复制到下方以及组合框的属性。
搜索了几个小时后,我还没有找到相关的 post 或解决此问题的方法。
Private Sub OccupationComboBox_Change()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_DropButtonClick()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_Click()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Sub OccupationComboBox_Populate()
Dim arrIn As Variant, arrOut As Variant
Dim i As Long, j As Long
arrOccupation = Sheets("Occupation classes").Range("B2:B2000")
arrOccupationKeys = Sheets("Occupation classes").Range("C2:C2000")
arrOccupationCode = Sheets("Occupation classes").Range("A2:A2000")
ReDim arrCodeOut(1 To UBound(arrOccupation), 1 To 1)
ReDim arrOut(1 To UBound(arrOccupation), 1 To 1)
For i = 1 To UBound(arrOccupationKeys)
If LCase(CStr(arrOccupationKeys(i, 1))) Like "*" & LCase(OccupationComboBox.Text) & "*" Then
'If CStr(arrIn(i, 1)) Like OccupationComboBox.Text & "*" Then
j = j + 1
arrOut(j, 1) = arrOccupation(i, 1)
arrCodeOut(j, 1) = arrOccupationCode(i, 1)
End If
Next
OccupationComboBox.List = arrOut
Range("G18") = arrCodeOut(1, 1)
If Range("D18").Value = "" Then
Range("G18") = ""
End If
ActiveSheet.Calculate
End Sub
作为更新,文本框似乎也发生了同样的事情。在 select 输入文本框后我开始输入,但我无法看到输入的内容,直到我 select 工作中的另一个单元格 sheet 。在任何一种情况下都不能突出显示组合框或文本框中的文本
事实证明,有时会出现与多台显示器相关的错误。
将我电脑的投影模式更改为该屏幕后,一切正常。
如果您遇到同样的问题,请尝试
- 将您正在使用的 s/s 拖到您的 1 号显示器或
- 将您的投影模式更改为仅此屏幕
非常感谢。我从来没有想过这个问题与多台显示器有关。顺便一提。这可以通过对两个显示器使用相同的“缩放比例”来解决(例如 125%)。
我有一个组合框,在您键入时,下拉列表会动态填充与键入的输入相匹配的结果。
我面临的问题是,当您在组合框中键入内容时,您看不到您键入的内容。在下图中,您可以看到有一个带有“Build”的单元格 - 这是我临时设置为显示输入内容的链接单元格。
上面单元格和列表之间的白框是我输入的地方。但是正如您所见,没有文字可见。
单击 sheet 上的其他位置后,会出现键入的文本
我想要发生的事情(而且我确定曾经发生过)是,当我在组合框中键入文本时,应该在键入时显示正在键入的内容。
假设这与我设置的 vba 代码有关,我已将其复制到下方以及组合框的属性。
搜索了几个小时后,我还没有找到相关的 post 或解决此问题的方法。
Private Sub OccupationComboBox_Change()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_DropButtonClick()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_Click()
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Private Sub OccupationComboBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call OccupationComboBox_Populate
OccupationComboBox.DropDown
End Sub
Sub OccupationComboBox_Populate()
Dim arrIn As Variant, arrOut As Variant
Dim i As Long, j As Long
arrOccupation = Sheets("Occupation classes").Range("B2:B2000")
arrOccupationKeys = Sheets("Occupation classes").Range("C2:C2000")
arrOccupationCode = Sheets("Occupation classes").Range("A2:A2000")
ReDim arrCodeOut(1 To UBound(arrOccupation), 1 To 1)
ReDim arrOut(1 To UBound(arrOccupation), 1 To 1)
For i = 1 To UBound(arrOccupationKeys)
If LCase(CStr(arrOccupationKeys(i, 1))) Like "*" & LCase(OccupationComboBox.Text) & "*" Then
'If CStr(arrIn(i, 1)) Like OccupationComboBox.Text & "*" Then
j = j + 1
arrOut(j, 1) = arrOccupation(i, 1)
arrCodeOut(j, 1) = arrOccupationCode(i, 1)
End If
Next
OccupationComboBox.List = arrOut
Range("G18") = arrCodeOut(1, 1)
If Range("D18").Value = "" Then
Range("G18") = ""
End If
ActiveSheet.Calculate
End Sub
作为更新,文本框似乎也发生了同样的事情。在 select 输入文本框后我开始输入,但我无法看到输入的内容,直到我 select 工作中的另一个单元格 sheet 。在任何一种情况下都不能突出显示组合框或文本框中的文本
事实证明,有时会出现与多台显示器相关的错误。
将我电脑的投影模式更改为该屏幕后,一切正常。
如果您遇到同样的问题,请尝试
- 将您正在使用的 s/s 拖到您的 1 号显示器或
- 将您的投影模式更改为仅此屏幕
非常感谢。我从来没有想过这个问题与多台显示器有关。顺便一提。这可以通过对两个显示器使用相同的“缩放比例”来解决(例如 125%)。