Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 动态循环宏_Vba_Excel - Fatal编程技术网

Vba 动态循环宏

Vba 动态循环宏,vba,excel,Vba,Excel,我正在尝试使用visual basic构建一个循环宏,它从一个工作表的某个区域中提取单元格,并将它们放置在另一个工作表中的特定单元格中,该单元格由工作表的选项卡名称在平行区域中指示。范围需要是可变的-根据指示有更多或更少的数据 这是当前适用于一个单元格的代码: Sub Ticker_input() Dim wsname As String wsname = ActiveCell.Value Worksheets("Summary").Range("Tab_name"

我正在尝试使用visual basic构建一个循环宏,它从一个工作表的某个区域中提取单元格,并将它们放置在另一个工作表中的特定单元格中,该单元格由工作表的选项卡名称在平行区域中指示。范围需要是可变的-根据指示有更多或更少的数据

这是当前适用于一个单元格的代码:

Sub Ticker_input()

    Dim wsname As String

    wsname = ActiveCell.Value

    Worksheets("Summary").Range("Tab_name").Select
    Worksheets(wsname).Range("CapIQ_ticker").Value = ActiveCell.Offset(0, 1)

End Sub
我需要把它变成一个循环宏


非常感谢您的帮助。

我不太确定您想要完成什么,但下面是一个循环命名范围的示例。它是dnyamic,因为它将在命名范围内循环,如果重置命名范围的大小,它将仅在这些单元格内循环

~希望这有帮助

Sub loopRnage()

'create your variable outside the loop
Dim wsname

'tell the loop the range you want to loop through
For Each cell In ThisWorkbook.Sheets("Stocks").Range("symbols")

    'set the variable to the current cell
    wsname = cell.Value
    Worksheets("Summary").Range("Tab_name").Select
    'use the variable to set the target name
    Worksheets(wsname).Range("CapIQ_ticker").Value = cell.Offset(0, 1)

Next cell

End Sub

在VBA中执行循环有多种方法。这是一种适用于您的情况的方法:

Sub Ticker_input()

    On Error Resume Next
    Application.ScreenUpdating = False

    Dim wsname As String
    Dim rTabNames As Range, c As Range

    Set rTabNames = Worksheets("Summary").Range("Tab_name")

    For Each c In rTabNames
        If c.Value <> "" Then
            wsname = c.Value
            Worksheets(wsname).Range("CapIQ_ticker").Value = c.Offset(0, 1).Value
        End If
    Next

    Application.ScreenUpdating = True

End Sub
Sub-Ticker\u input()
出错时继续下一步
Application.ScreenUpdating=False
将wsname设置为字符串
Dim rTabNames作为量程,c作为量程
设置rTabNames=工作表(“摘要”).范围(“选项卡名称”)
对于rTabNames中的每个c
如果c.值为“”,则
wsname=c.值
工作表(wsname).Range(“CapIQ_ticker”).Value=c.Offset(0,1).Value
如果结束
下一个
Application.ScreenUpdating=True
端接头

只需确保您的命名区域“Tab_name”是可能包含工作表名称的整个单元格区域(例如,如果您在A中列出工作表名称,“Tab_name”指的是整个列),而不是一个单元格。

我在下面给出了一个循环命名区域的示例,但是,你也可以通过查看需求的公式来做到这一点——没有数据的例子就很难说。非常感谢——额外的问题是范围是动态的,换句话说,范围可以越来越大,越来越小——有没有办法倒计时?这没问题。只要让“Tab_name”范围引用该范围的最大大小(可能是整个列)。循环使用
如果c.Value“”,则忽略空白值,因此命名范围是否大于其包含的数据并不重要。