【发布时间】:2018-02-20 16:05:18
【问题描述】:
我有 633 行带有 ID 号和规格的车辆名称。在车辆 1 的行中,我想使用下拉菜单来选择底盘类型并使用此数据填充一些行。在底盘工作表中,我有一个底盘列表,其中包含可以使用的车辆编号。例如。底盘 4567 可用于车辆 1、37、18。车辆 1 可使用底盘 4567、4657 和 8865。还有变速箱等。主车辆规格表然后有多个下拉菜单,如果选择这些下拉菜单,将更改该行中车辆的规格。 我该怎么做呢。 688辆? 任何帮助都可以,因为我一直在尝试寻找示例。我想用 vba for excel 来做。
主表:The main sheet where the dropboxes will be
一般车辆详情The general vehicle details and vehicle id used to populate all fields in the main sheet
这些工作表都连接到 Web Api 并每周更新。那部分一切正常。只是投递箱...
尝试了以下几段代码:(更新代码)
Private Sub Sheet_Initialize()
Dim sn, e
Dim rngTurTank As Range
Dim oDictionary As Object
Dim x As Integer
Set oDictionary = CreateObject("Scripting.Dictionary")
Set rngTurTank = Sheets("Turrets").Range("b2" & Rows.Count).End(xlUp).Offset(1)
With Sheets("Total details").cbTurret
For Each cel In rngTurTank
If Doictionary.exists(cel.Value) Then
'Do Nothing
Else
oDictionary.Add cel.Value, 0
.AddItem cel.Value
End If
Next cel
End With
Dim iTurTank As Long
lbTurTank.Clear
On Error Resume Next
iTurTank = Sheets("Turrets").Range("B2" & Rows.Count).End(xlUp).Offset(1).Count
Set rngTurTank = Sheets("Turrets").Range("B2" & Rows.Count).End(xlUp).Offset(1).Value
If iTurTank > 0 And rngTurTank = Range("A3").Value Then
lbTurTank.RowSource = Sheets("Turrets").Range("D2:D")
Else
lbTurTank.RowSource = ""
lbTurTank.AddItem "Empty"
End If
这些都不起作用,所以我尝试了这个:
'the reference string to the source range
Dim strTurretRange As String
'Turrets
strTurretRange = Sheets("Turrets").Range("D2", Range("D2").End(xlDown)).Select
With Sheet5.Range("M3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=strTurretRange
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
只有当坦克 ID 相同时,我才如何填充列表。 IE。 A栏
试试2号
With Sheet5.Range("M3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=VLOOKUP(A3;allTurrets;3;0)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
我已经尝试了 3 号:
With Sheet5.Range("M3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=INDEX(sTurrets;MATCH(A3;sTank_id_turret;0))"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
最后一个有效,但只给了我 1 个返回值,我需要在下拉框中选择 4 到 5 个值?
尝试4号:
使用以下:=OFFSET(sTurrets;MATCH($A$3; sTank_id_turret;0);0;COUNTIF(sTank_id_turret;$A$3);1) 获得正确数量的匹配,但不是第一个正确的。即如果 tank_id 14913 的炮塔名称是 't34 mod、Cruizer Mk1、Cz03 LTvz35、Leophard Prototype A1 和 Leophard Prototype A2。此公式省略了 t34 mod,然后添加到保时捷 T169 中,用于 tank_14914。
- 按顺序加载完整列表缺少什么?
- 有没有办法默认加载列表中的最后一个值?
- 如何填充 DV 右侧的单元格? 我们将不胜感激。
【问题讨论】:
-
好吧,Art,继续用 VBA 来做吧。一旦你完成了一些工作并遇到了问题,你就可以回来。我们不是编码服务。
-
您可以发布您的数据的快照吗?您希望您的输出如何?
-
感谢您的到来。我很感激。 Paul Ogilvie,你能指导我从哪里开始吗?网站等。我一直在找。
-
Yasser,在主工作表上,我希望能够将 tank_id 加载到“A1”中,然后根据此数字,将彩色单元格填充为下拉/验证。这些充满了帘式水箱可以使用的悬浮液的名称。 (基于悬浮液,坦克,单元格“B”和主表中的值,“A1”)选择悬浮液(“X3”中的下拉菜单)后,右侧的单元格会相应更新。
标签: excel validation dropbox offset vba