【问题标题】:Insert Data Validation in ever changing sheets using CountA and Offset in VBA使用 VBA 中的 CountA 和 Offset 在不断变化的工作表中插入数据验证
【发布时间】:2019-06-24 00:56:39
【问题描述】:

我收到的数据内容相似,但列的数量和顺序各不相同。我在 A6 中永久安装了一个下拉菜单,将其复制到其他列的第 6 行中的每一列,然后从列表中选择适当的标题。如何修改我的宏,以便它可以从 A6 复制 DV 或在需要时创建相同的标题? (由第 5 行中的 countA 确定)

此 VBA 解决方案将文本放置在我想要下拉列表的位置。请告诉我应该用什么来替换文本“与 A6 相同的下拉菜单”,以便它会自动插入带有标题选项的下拉菜单。

Private Sub CmdSubmit_Click()
    Dim i As Integer
   For i = 1 To 50
   
   
    ActiveSheet.Select
    Range("A5").Select
    
    If ActiveCell.Offset(0, 1).Value >= "1" Then
        ActiveCell.Offset(1, 0).Select
    Else
        Selection.End(xlToLeft).Offset(0, 1).Select
    End If
    ActiveCell.Offset(0, 1).Value = "same drop down as A6"
    ActiveCell.Offset(0, 2).Value = "same drop down as A6"
    ActiveCell.Offset(0, 3).Value = "same drop down as A6"
    ActiveCell.Offset(0, 4).Value = "Same drop down as A6"
   Next i
    
End Sub

这可行,但它不是动态的:我们可以让它动态吗?

Sub Thiscopypaste()
    Dim rngcopy As Range
    Dim i As Integer

    Set rngcopy = ActiveSheet.Range("A6")

        rngcopy.Copy

    
    Range("B5").Select
    If ActiveCell.Value >= "1" Then
    ActiveCell.Offset(1, 0).Select
    ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
    
    Range("C5").Select
    If ActiveCell.Value >= "1" Then
    ActiveCell.Offset(1, 0).Select
    ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
     Range("D5").Select
    If ActiveCell.Value >= "1" Then
    ActiveCell.Offset(1, 0).Select
    ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
    Range("E5").Select
    If ActiveCell.Value >= "1" Then
    ActiveCell.Offset(1, 0).Select
     ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
    Range("F5").Select
    If ActiveCell.Value >= "1" Then
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
End Sub

【问题讨论】:

  • 你好,伊莱恩。很难确切地知道你在问什么。您能否通过示例提供更多信息,也许还可以提供您想要的屏幕截图。谢谢。
  • 感谢Nerd2000,我已在问题的开头附上了截图作为链接。我希望能够在红色框出的单元格中插入下拉菜单。
  • 谢谢你,Nerd2000。我们快要到了。仅当单元格 B5、B6 等的值 >=1 时,才需要 A6 下拉列表的副本。 (很抱歉,我对我提供的显示四个偏移量的示例造成了混淆。)我需要根据第 5 行中的计数是否指示需要下拉菜单来动态插入其他下拉菜单。如何实现?谢谢!感谢您的努力。
  • 您确定不是第 5 行的单元格需要具有 >= 1 的值(例如 b5、c5、d5 等)吗?
  • 我更新了答案。这可能是您正在寻找的。如果您需要,请记住投票并接受作为您的答案。谢谢。

标签: excel vba


【解决方案1】:

如果您所说的下拉列表是数据验证列表,那么您需要执行以下操作:

    Private Sub CmdSubmit_Click()
        Dim i As Integer
        Dim rngCopy As Range

       For i = 1 To 50

        'ActiveSheet.Select
        Set rngCopy = ActiveSheet.Range("A6")

        rngCopy.Copy

        If rngCopy.Offset(-1, i).Value >= 1 Then
            'ActiveCell.Offset(1, 0).Select
            rngCopy.Offset(0, i).PasteSpecial xlPasteAll
        Else
            Set rngCopy = rngCopy.End(xlToLeft).Offset(0, i)
        End If
        'rngCopy.Offset(0, i).PasteSpecial xlPasteAll
        'rngCopy.Offset(0, 2).PasteSpecial xlPasteAll
        'rngCopy.Offset(0, 3).PasteSpecial xlPasteAll
        'rngCopy.Offset(0, 4).PasteSpecial xlPasteAll
       Next i

       Set rngCopy = Nothing

    End Sub

【讨论】:

  • 嗨 Nerd2000。我非常感谢您的帮助。我不想复制单元格 A5,我确实需要复制 A6 并粘贴到随后的第 6 行单元格中“如果”上面第 5 行中的单元格 >=1。我在单元格 A5 等中使用了 counta,因此如果第 6 行下方的列中没有任何内容,则不会创建第 6 行中的下拉列表。如何使您的公式包含对第 5 行中值的考虑?我是否在寻找如何抵消包含偏移量的 If 语句?
  • 嘿,伊莱恩。它现在应该对你有用。我希望能满足你的需要。
  • 嘿Nerd2000!这完美运行。感谢您的出色协助。也感谢您的耐心等待。我也对你投了赞成票 - 并且收到了不会显示的消息,因为我是新人。
猜你喜欢
  • 2020-09-29
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 2015-07-28
相关资源
最近更新 更多