您好,对于我在代码中遇到的两个小问题,您有什么建议吗?
我正在开发一个表单,当输入出发城市(输入城市 #1:)和目的地城市(输入城市 #2:)时,根据其坐标(经度和纬度)计算两者之间的直线距离(以英里和公里表示)。第一个问题是,当我按城市搜索时,我得到了正确的数据,但我得到了一个警告框,如图所示。
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:)中显示的那样,如图所示,但是,当我打开表单时,我得到的是空白。如果我下拉该选项,我可以选择州及其相应的城市,但在打开表单时它不会显示它们。
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:这是可以找到代码的书的链接
答案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 个选项可以解决这个问题。
- 分配一个变量来保存范围内的值。然后,使用该变量选择组合框的文本
Dim x As String
x = Range("E1:E" & nStates).Cells(1, 1).Value
UserForm1.state1select.Text = x
UserForm1.state2select.Text = x
- 更好地利用列表属性组合框的检索值。我更喜欢这个选项。
UserForm1.state1select.Text = UserForm1.state1select.List(0)
UserForm1.state2select.Text = UserForm1.state2select.List(0)