【问题标题】:Loop through range select drop down循环范围选择下拉菜单
【发布时间】:2017-05-08 19:48:29
【问题描述】:

我想为以下步骤创建一个宏,但我是宏的新手,可以使用您的帮助。

我在名为“TABLE”的表格中从单元格 G11 开始有 10 行的列表,每行都有一个验证下拉列表(TRUE 或 FALSE)。以下是我想做的事情。

  1. 在宏启动之前,我希望将它们全部设置为 FALSE。

  2. 然后我希望它从单元格 G11 开始并从下拉列表中选择 TRUE。整个工作簿都以此为基础,因此一旦将其设置为 TRUE,就会进行一些计算,然后我想从“SECURITIZATION”页面获取结果并将其粘贴到名为“FINAL”的工作表中。

  3. 在此之后我想再次转到“TABLE”表,将单元格 G11 从 TRUE 切换到 FALSE,然后转到单元格 G12 并从下拉列表中选择 TRUE 并粘贴“SECURITIZATION”中的结果在 G11 的结果下方的页面。

我浏览了这个宏,但它从同一个单元格的下拉列表中选择,而不是列表。 VBA Loop Through drop down, copy range

这就是我目前所拥有的

Sub SpitValues()

Dim dvCell As Range 
Dim inputRange As Range 
Dim c As Range 
Dim i As Long 


 'Which cell has data validation
Set dvCell = Worksheets("Sheet1").Range("G11") 
 'Determine where validation comes from
Set inputRange = Evaluate(dvCell.Validation.Formula1) 


i = 1 
 'Begin our loop
Application.ScreenUpdating = False 
For Each c In inputRange 
    dvCell = c.Value 

    Worksheets("SECURITIZATION").Cells(i, "A1").Value = Worksheets("SECURITIZATION").Range("G30").Value 
    i = i + 1 
Next c 
Application.ScreenUpdating = True 

【问题讨论】:

  • 欢迎来到 SO。请阅读How to Ask。正如所写的那样,这个问题很宽泛,可以在没有人为您编写代码库的情况下真正得到回答。如果您向我们展示您尝试过的方法以及遇到明确具体问题的地方,我们可以更轻松地提供帮助。
  • 我刚刚编辑过,如果有帮助请告诉我。
  • 这确实有帮助。谢谢你。然而,你需要什么的描述和你的代码做看似不同的事情。你需要哪个?
  • 我需要描述,我希望代码循环遍历单元格 G2-G11 并从下拉菜单中选择 TRUE,然后复制粘贴数据,然后在同一单元格中选择 FALSE,然后转到下一个单元格并从下拉列表中选择 TRUE。所有这些都应该是 FALSE 开始

标签: vba excel


【解决方案1】:

试一试。它基于描述。它需要为您的特定副本进行编辑 |粘贴需求,可以在备注中看到。

Option Explicit

Sub SpitValues()

Dim wsTable As Worksheet
Set wsTable = Worksheets("Table")

Dim wsSecuritization As Worksheet
Set wsSecuritization = Worksheets("Securitization")

Dim wsFinal As Worksheet
Set wsFinal = Worksheets("Final")

With wsTable

    .Range("G11").Resize(10, 1).Value = "FALSE"

    Dim rCell As Range
    For Each rCell In .Range("G11").Resize(10, 1)

        rCell.Value = "TRUE"

        'DoEvents
         Application.Wait Now + TimeValue("0:00:10") 'wait for 10 seconds.

        'adjust this to whatever is need for copy | paste operation
        'I didn't see exact requirements for this so I just copy A1 each time below the last used row in column A
        wsFinal.Range("A" & Rows.Count).End(xlUp).Offset(1).Value = wsSecuritization.Range("A1").Value

        rCell.Value = "FALSE"

    Next

End With


End Sub

【讨论】:

  • 谢谢你的帮助,我如何让工作表暂停计算。现在宏复制并粘贴相同的值。它不会等待工作表刷新然后复制粘贴
  • @user2521517 - 将我的编辑视为一种方法。另一种方法可能是关闭自动计算和wsSecuritization.Calculate。但是,我并没有发现它一直都是可靠的。
  • @user2521517 - 考虑标记为已回答,以便其他人知道前进
猜你喜欢
  • 2020-10-02
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多