我试图建立为预算跟踪系统创建导航菜单的逻辑:每个预算行有12张表,每张表有12个月表。
导航菜单基于两个组合框,一个列出工作表,另一个是月份名称 - 当用户选择去哪里时,所选表格中的工作表和第一个单元格会激活。
我正在寻找的是一种更有效的组织方式,而不是编写144个不同的if-then条件,用于考虑用户可能选择的每个可能的listindex组合。选择案例方法也有效,但范围同样很大......
我一直在研究使用循环来达到目的 - 例如ListIndex值可以在一个循环中定义,但我对于总体概念的想法很缺乏。
提前谢谢!
答案 0 :(得分:1)
选择表单非常简单。只需创建一个数组,该数组将保存与ListIndex对应的工作表名称。像这样的东西
Dim myArray(11) As String
myArray(0) = "a"
myArray(1) = "b"
myArray(2) = "c"
...
myArray(10) = "k"
myArray(11) = "l"
Worksheets(myArray(ComboBox1.ListIndex)).Activate
如果此人选择了第5个ComboBox元素,则表单" e"会被激活。
选择表格单元格有点问题,因为它取决于表格所在的工作表上的位置。如果它们等距离间隔,则可以使用简单的数学公式。也就是说,如果1月表在E7,2月在E27,3月在e47开始,则使用listindex计算起始行是一件简单的事情。例如:
Worksheets(myArray(ComboBox1.ListIndex)).Cells(7 + ComboBox2.ListIndex * 20, "E").Select
希望这会有所帮助。 :)
答案 1 :(得分:1)
我在这里设置了一个包含12个工作表的工作簿,每个月一个。每个工作表上都有12个表。当用户从下拉列表(cboWorkSheets)中选择工作表时,将清除第二个下拉列表(cboTables)列表,然后将所选工作表中的所有表名添加回列表。
当用户从cboTables中选择一个表名时,将搜索cboWorkSheets引用的工作表以查找该表。然后选择表格数据集范围中的第一个单元格。
SELECT *,
( 3959 * acos( cos ( radians(47.64585) )
* cos( radians( lat ) )
* cos( radians( longitude ) - radians(-117.159999) )
+ sin( radians(47.64585) )
* sin( radians( lat ) )
)
) AS distance
FROM table
WHERE
companyname LIKE '%" . $name . "%'
OR address LIKE '%" . $name . "%'
OR city LIKE '%" . $name ."%'
OR state LIKE '%" . $name ."%'
HAVING distance > 100
答案 2 :(得分:0)
作为一般兴趣,这是我在@Tim的例子中构建的概念证明文件的代码的功能版本,如上所述。这是:
在Module1中:
Sub ComboBox1_Change()
Dim sheets_array(0 To 2) As Variant
sheets_array(0) = "Sheet1"
sheets_array(1) = "Sheet2"
sheets_array(2) = "Sheet3"
With UserForm1.ComboBox1
.Clear
.List = sheets_array
.Style = fmStyleDropDownCombo
End With
Call ComboBox2_Change
UserForm1.Show
End Sub
Sub ComboBox2_Change()
Dim monthsarray(0 To 3) As Variant
monthsarray(0) = "April"
monthsarray(1) = "May"
monthsarray(2) = "June"
With UserForm1.ComboBox2
.Clear
.List = monthsarray
.Style = fmStyleDropDownCombo
End With
End Sub
在UserForm1代码窗口中:
Private Sub ComboBox1_Change()
With UserForm1.ComboBox1
Worksheets(.List(.ListIndex)).Activate
End With
End Sub
Private Sub ComboBox2_Change()
With Worksheets(UserForm1.ComboBox1.ListIndex)
.Select
.Cells(7 + UserForm1.ComboBox2.ListIndex * 20, "E").Select
End With
End Sub