2015-03-02 114 views
0

我有一列数据,我想将四个单元格的范围复制到另一个工作表中的另一个范围。这应该是一个循环,每次都会更改要复制的起始单元格。用于从一个变量范围复制到另一个变量范围的宏

我或多或少是新的宏编程,不能超越下面的代码,它已经在开始时给我一个编译错误(“Sub或函数未定义),我不知道是什么原因这是... 另外,我有我改变我的变量,而不是实际打印的东西进入细胞的感觉。

任何帮助将不胜感激!

干杯, dahlai

Sub CopyingPeriod2() 
    Dim ws As Worksheet 
    Set ws = Worksheets("1") 

    Dim OneCells As Range 
    Set OneCells = ws.Range("C1:C4") 

    Dim works As Worksheet 
    Set works = Worksheet("New") 

    Dim NewCells As Range 
    Set NewCells = works.Range("J51:J54") 

    Do Until ActiveCell.Value = "" 

     NewCells.Value = OneCells.Value 

     OneCells = OneCells.Offset(8, 0) 
     NewCells = NewCells.Offset(0, 1) 


    Loop 

End Sub 

更新:

回答评论: 每次循环运行时,C1:C4范围将被偏移8行。 每次循环运行时,J51单元将被偏移1列。

我继续尝试,并想出了以下代码(包括无回路): 复制和粘贴作品。然而,当OneCells更新原来的范围在工作表的单元格变为空白,OneCells.Select选择相同的范围内之前

Sub CopyingPeriod2d() 

    Dim OneCells As Range 
    Set OneCells = Range("C1:C4") 

    Worksheets("1").Activate 
    OneCells.Select 
    Selection.Copy 
    Worksheets("New").Activate 
    Range("J51").PasteSpecial xlPasteValues 

    Worksheets("1").Activate 
    OneCells.Select 
    ActiveCell.Offset(8, 0).Select 
    OneCells = Range(ActiveCell, ActiveCell.Offset(4, 0)) 
    OneCells.Select 
+0

莫非你告诉我们需要复制/粘贴的范围是什么?他们将如何变化? – Kyle 2015-03-02 19:27:12

+0

未定义的子或函数位于“Worksheet(”New“)行”它需要是Worksheets(“New”),除非您打算创建一个新的工作表,在这种情况下您需要不同的东西。这当然假设你有一个标题为“New”的工作表 – OpiesDad 2015-03-02 20:38:39

+0

如果我错了,有人纠正我,但我不相信你的活动单元会根据你的循环改变,因为活动单元不会改变,除非你告诉它。所以,当你启动宏时,你可能会以无限循环结束,或者循环不会触发,这取决于活动单元格。 – 2015-03-02 22:38:56

回答

0

最终,得到它的工作=)

Sub CopyingPeriod2d() 

    Dim worksh As Worksheet 
    Dim ws As Worksheet 
    Dim OneCells As Range 
    Dim NewCells As Range 

    Set worksh = Sheets("1") 
    Set ws = Sheets("New") 


'AcCoa data copy 
    Set OneCells = worksh.Range("C1:C4") 
    Set NewCells = ws.Range("J51") 

    i = 1 


    'Selection of first cells, else the loop would not run properly since it is checking for the ActiveCell content 
    Sheets("1").Activate 
    OneCells.Select 


    Do Until ActiveCell.Value = "" 
     OneCells.Copy 

     'Paste to destination and update destination for next iteration of the loop 
     NewCells.PasteSpecial xlPasteValues 
      If i = 6 Or i = 12 Then 
       Set NewCells = NewCells.Offset(0, 3) 
      Else 
       Set NewCells = NewCells.Offset(0, 1) 

      End If 
      i = i + 1 


     Set OneCells = OneCells.Offset(12, 0) 
     OneCells.Select 

    Loop