Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Excel 2013中的循环_Excel_Loops_Vba - Fatal编程技术网

Excel 2013中的循环

Excel 2013中的循环,excel,loops,vba,Excel,Loops,Vba,我在运行循环时遇到问题 我有一个Source1电子表格,在CC选项卡的a列中有一个值列表。每个数字将分别复制到Source2电子表格模板选项卡上的单元格B1中。 单元格B1触发信息(主要是索引信息)的合并,并将其显示在模板中—大量背景数据的聚合图片。然后复制A1:K71,并将其粘贴到Source1电子表格的“输出”选项卡中 我想在CC选项卡的A列中列出,并将Source2电子表格中的每个输出自动附加到output选项卡中 我有复制/粘贴工作,但我有循环问题 Selection.Copy Wind

我在运行循环时遇到问题

我有一个Source1电子表格,在CC选项卡的a列中有一个值列表。每个数字将分别复制到Source2电子表格模板选项卡上的单元格B1中。 单元格B1触发信息(主要是索引信息)的合并,并将其显示在模板中—大量背景数据的聚合图片。然后复制A1:K71,并将其粘贴到Source1电子表格的“输出”选项卡中

我想在CC选项卡的A列中列出,并将Source2电子表格中的每个输出自动附加到output选项卡中

我有复制/粘贴工作,但我有循环问题

Selection.Copy
Windows("Source2.xlsx").Activate
Range("B1").Select
ActiveSheet.Paste
Range("A1:K71").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Source1.xlsm").Activate
Sheets("Ouput").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
  ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

@安德鲁,在反复阅读了你的问题之后,我认为没有必要进行任何形式的循环。上面给出的宏记录器结果提供了有关如何解决此问题的信息。我通过创建一个Source1工作簿来测试这一点,该工作簿的值放在标有CC的工作表的a列中。我还添加了一个标签为Output的工作表。然后,我打开了第二个工作簿,其中有一张标签为Template的工作表。下面是我用来产生上述结果的子过程:

 Sub AndrewProject()
 '    COMMENT: Declare variables used throughout this procedure
      Dim InitialVals As Range
      Dim OutputVals As Range
      Dim FinalResults As Range
      Dim FinalOutput As Range
      Dim cell As Variant

 '    COMMENT: Set the range objects so they are easier to manipulate
      Set InitialVals = Workbooks("Source1").Worksheets("CC's").Range("A2:A72")
      Set OutputVals = Workbooks("Source2").Worksheets("Template").Range("B2:B72")
      Set FinalResults = Workbooks("Source2").Worksheets("Template").Range("A2:K72")
      Set FinalOutput = Workbooks("Source1").Worksheets("Output").Range("A2:K72")

 '    COMMENT: This line copies the values in Source1 Workbook and pastes them into Source2 Workbook
      InitialVals.Copy
      OutputVals.PasteSpecial xlPasteValues
 '    COMMENT: Additional code goes here to create the desired output. To simplify things, I put a
 '    function in Source2, column K that concatenates the string "Output" with InitialVals copied
 '    from Source1. To emulate your Source2 Template, I placed random values between 1 and 1000 in
 '    Cells A2:A72 and C2:J72.

 '    COMMENT: Copy the FinalResults from Source2 "Template" tab into the Source1 "Output" tab
      FinalResults.Copy
      FinalOutput.PasteSpecial xlPasteAll
 End Sub

好了,安德鲁……这一定是我最后一次尝试了。我相信这回答了你的问题

Sub AutomateIt()
'   Declare your variables
    Dim cell         As Range
    Dim Src1CC       As Range
    Dim Src2Template As Range
    Dim Src2Calcs    As Range
    Dim Src1Output   As Range
    Dim NextRow      As Long
    Dim count        As Integer

'   Set the ranges so they can be manipulated
    Set Src1CC = Workbooks("Source1").Worksheets("CC").Range("A1")
    Set Src2Template = Workbooks("Source2").Worksheets("Template").Range("B1")
    Set Src2Calcs = Workbooks("Source2").Worksheets("Template").Range("A1:K72")
    Set Src1Output = Workbooks("Source1").Worksheets("Output").Range("A1:K72")
    Src2Template.ClearContents
    count = 0

'   Loop through all the cells and calculate stuff
    For Each cell In Src1CC.Range(Src1CC, Src1CC.End(xlDown))
        'Determine the next empty row (plus a space for readability)
        NextRow = Cells(Rows.count, 1).End(xlUp).Row + 2

        'Send a copy of the Src1CC cell value to the Src2Template
        cell.Copy Src2Template

        'Re-calculate A1:K72 based on cell value
        Src2Calcs.Calculate

        'Copy Src2Calcs results and paste to Source1 Output
        Src2Calcs.Copy
        Src1Output.PasteSpecial xlPasteValues

        count = count + 1
        MsgBox "You have pasted " & count & " results."

        'Change Src1Output Range so that the next paste is the next blank row 
        'plus one additional row for readability.
        Set Src1Output = Workbooks("Source1").Worksheets("Output").Range(Cells(NextRow, 1), Cells(NextRow, 11))
    Next cell
End Sub

嗨,安迪,非常感谢你看这个。我按照你的建议试过了,但我认为我的解释有错。嗨,安迪,非常感谢你看这个。我按照你的建议试过了,但我认为我的解释有错。您的建议导致我复制并将整个Source1 CC列表粘贴到两个电子表格中。出于我的目的,Source1 CC的选项卡有一个数值列表。列表可以在20到1000行之间。Source2是将Source1值放入单元格B1的模板。然后用信息填充模板,然后复制并粘贴回Source1上的“输出”选项卡。我需要将每个模板副本附加到上一个模板副本的底部。我写的小脚本允许我做我需要的事情,但一次只能做一个条目。考虑到我必须完成的一些卷,它需要比我目前拥有的自动化程度更高。@Andrew,你的补充解释会有所帮助。我再看一看,看能不能帮你把它自动化。很快回来。你好,安迪,对不起,我昨天不在。这看起来在一定程度上是可行的,但我仍然遇到一些问题。这可能是我缺乏理解,而不是剧本。输出结果是Src1CC的列表被粘贴到B1 Src2Template中,然后模板的一部分被复制到Src1Output中。什么循环?我看不到任何循环。请展示您解决问题的尝试,以便我们可以帮助您解决问题。嗨,安迪,非常感谢您的耐心。我认为它将与一个调整,这再次是由于我的理解,而不是你的代码缺乏工作。您的行集Src1Output=Workbooks(“test”)。工作表(“Output”)。范围(单元格(NextRow,1),单元格(NextRow,11))下一个单元格查找下一个可用的空行,但我需要在下一个单元格查找下一个可用的空行后放置附加副本,但是,我需要将附加的副本放在模板的最后一行之后,这是一个65行的常量。因为您的命令在模板中找到空行,所以它将被忽略。这也是我对这个话题缺乏了解。嗯……希望我能给你一个好的开始。我不能再花时间在这个项目上了,但我相信如果你使用宏录制器作为指导,你可以学习实现目标的主要对象、属性和方法。你的描述让我相信你90%都在那里,只要花点时间和耐心,你就能解决问题。