【问题标题】:populate dropbox based on cell info and then populate other cells based on info selected根据单元格信息填充保管箱,然后根据所选信息填充其他单元格
【发布时间】: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 suspension sheet that will populate the suspension drop box based on the vehicles id in the row and when changed will populate the cells with data on that suspension.

一般车辆详情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。

  1. 按顺序加载完整列表缺少什么?
  2. 有没有办法默认加载列表中的最后一个值?
  3. 如何填充 DV 右侧的单元格? 我们将不胜感激。

【问题讨论】:

  • 好吧,Art,继续用 VBA 来做吧。一旦你完成了一些工作并遇到了问题,你就可以回来。我们不是编码服务。
  • 您可以发布您的数据的快照吗?您希望您的输出如何?
  • 感谢您的到来。我很感激。 Paul Ogilvie,你能指导我从哪里开始吗?网站等。我一直在找。
  • Yasser,在主工作表上,我希望能够将 tank_id 加载到“A1”中,然后根据此数字,将彩色单元格填充为下拉/验证。这些充满了帘式水箱可以使用的悬浮液的名称。 (基于悬浮液,坦克,单元格“B”和主表中的值,“A1”)选择悬浮液(“X3”中的下拉菜单)后,右侧的单元格会相应更新。

标签: excel validation dropbox offset vba


【解决方案1】:

我在这方面做了更多工作,并根据数据制作了一个表格。我有以下代码:

Application.Goto Reference:="sTank_id_turret"

With Sheet5.Range("M3").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=VLOOKUP(A3;tblTurrets;3;0)"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

我这样做是因为我在这张表上有 5 个不同的验证,来自 5 个不同的工作表,都在 1 行上。有 650 行信息。

它只是在下拉列表中给了我 1 个值。我必须有 4 到 5 个可供选择。为什么 为什么我只有1个

【讨论】:

  • 好的……只需使用参考“sTank_id_turret”作为公式 :) 像这样:Formula1:="=sTank_id_turret"
  • 如果这不是一个答案,它应该是您的问题的edit,以便我们知道您目前在哪里。
  • 查看相关下拉列表:techrepublic.com/blog/10-things/…
  • 感谢 QHarr。会记得的。谢谢您的帮助。会去看看
  • 并没有真正帮助我。我使用了 =VLOOKUP(A3;allTurrets;3;0) 但它不起作用然后我尝试了 =INDEX(sTurrets;MATCH(A3;sTank_id_turret;0))。这有效,但只给了我 1 个返回值,我需要在下拉框中选择 4 到 5 个值。我一直在看:=IFERROR(INDEX(sTurrets; SMALL(IF(A$3= sTank_id_turret; ROW(sTurrets)-2;""); ROW()-2));"")。但仍然不太清楚如何在数据验证中获得多个答案。不断给我一个“列表源必须是一个分隔列表......”帮助
猜你喜欢
  • 2015-11-01
  • 2014-09-13
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2020-10-21
相关资源
最近更新 更多