填充 ComboBox 的解决方案

填充 ComboBox 的解决方案

您好,对于我在代码中遇到的两个小问题,您有什么建议吗?

我正在开发一个表单,当输入出发城市(输入城市 #1:)和目的地城市(输入城市 #2:)时,根据其坐标(经度和纬度)计算两者之间的直线距离(以英里和公里表示)。第一个问题是,当我按城市搜索时,我得到了正确的数据,但我得到了一个警告框,如图所示。

图片 1

Private Sub SearchButton1_Click()
Dim i As Integer, j As Integer, k As Integer
Dim Cities() As String, States() As String
Dim Ans As Integer, commaposition


If UserForm1.city1input = "" Then
    MsgBox "You din't type anything in the search bar. Please do so before pressing the search button."
    Exit Sub
End If
On Error GoTo Here
.
.
.
Here:

MsgBox ("The place you are looking for found no results, please check spelling.")
Sheets("Sheet1").Visible = False

End Sub

我曾尝试修复代码,但我的尝试并未成功!

第二个与 ComboBox2(城市 #2:)有关,我希望显示其值,就像它们在 ComboBox 1(城市 #1:)中显示的那样,如图所示,但是,当我打开表单时,我得到的是空白。如果我下拉该选项,我可以选择州及其相应的城市,但在打开表单时它不会显示它们。

图片 2

Sub PopulateStates()
Dim i As Integer
Sheets("Main").Select
Range("A1").Select
Sheets("Sheet1").Select
nStates = WorksheetFunction.CountA(Columns("E:E"))
nCities = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row - 2
For i = 1 To nStates
    UserForm1.state1select.AddItem Range("E1:E" & nStates).Cells(i, 1)
    UserForm1.state2select.AddItem Range("E1:E" & nStates).Cells(i, 1)
Next i
UserForm1.state1select.Text = Range("E1:E" & nStates).Cells(1, 1)
UserForm1.state2select.Text = Range("E1:E" & nStates).Cells(1, 1)
End Sub

我不知道错误出在哪里,非常感谢您的关注。

pdt:这是可以找到代码的书的链接

https://docs.google.com/spreadsheets/d/1as_CO6exyiEZmFO7Br1kqdJ4HwRuVgpZ/edit?usp=sharing&ouid=101869202251884156480&rtpof=true&sd=true

答案1

问题 1

显示错误处理消息是因为您在到达错误处理代码之前没有中断程序。这里

为了防止在未发生错误时运行错误处理代码,请在错误处理例程之前放置 Exit Sub、Exit Function 或 Exit Property 语句

您需要将代码修改为如下形式:

Sheets("Sheet1").Visible = False

Exit Sub

Here:
MsgBox ("The place you are looking for found no results, please check spelling.")

问题 2

第二个状态组合框Change事件未触发。您可以通过对代码的这一部分使用断点来检查这一点UserForm1.state2select.Text = Range("E1:E" & nStates).Cells(1, 1)。您有 2 个选项可以解决这个问题。

  1. 分配一个变量来保存范围内的值。然后,使用该变量选择组合框的文本
Dim x As String
x = Range("E1:E" & nStates).Cells(1, 1).Value

UserForm1.state1select.Text = x
UserForm1.state2select.Text = x
  1. 更好地利用列表属性组合框的检索值。我更喜欢这个选项。
UserForm1.state1select.Text = UserForm1.state1select.List(0)
UserForm1.state2select.Text = UserForm1.state2select.List(0)

相关内容