在一个工作表中循环值,并在其他工作表上应用宏,其范围在循环范围旁边

时间:2017-11-17 10:14:37

标签: excel vba excel-vba

我在Excel中有两张主要纸张和其他多张纸张.. - >用于执行循环的“控制表”和“目标表”

控制表带有一个范围(在列中),在其上应用循环,在该范围旁边是要用于“目标表”的单元格引用。

目标表有一个名为“Hyp_table”的表,并应粘贴在许多地方的相同“目标表”中,其参考应从要进行循环的范围旁边的列中读取在控制表上。

目标如下 对于控制表中“范围”中的每个值,如果范围中的值为1,则移动到目标工作表,复制“Hyp_table”,并将其粘贴到循环所在的范围旁边的列中存在的单元格编号上。 perfomred。

我使用了以下代码,但它无效:

Sub Testing()
    Dim rng As Range, cell As Range    
    Set rng = Sheets("Control").Range("C5:C10")

    For Each cell In rng    
        If cell = "1" Then
            'Moving to my target sheet
            Sheets(Sheets.Count).Select
            ActiveSheet.Previous.Select
            'Copying my table
            Application.Goto "Hyp_Table"
            Selection.Copy

            'Selecting my cell on "Target sheet" based on value in "Control sheet"
            ActiveSheet.Range(Sheets("Control").cell.Offset(, 1)).Select

            'Pasting the table where the cell is selected as above
            ActiveSheet.Paste
            Application.CutCopyMode = False
        Else
        End If
    Next cell
End Sub

任何人都可以帮我解决这些问题。

1 个答案:

答案 0 :(得分:2)

首先要做的事 - 避免使用ActiveSheetApplication.GoToSelection。在每种情况下。 How to avoid using Select in Excel VBA

第二件事 - 避免使用CellRange等名称声明变量,因为这些名称是特殊的,它们由VBEditor使用。

第三件事 - 尝试下面的代码 - 它可能不起作用,因为我不明白究竟什么是偏移量,但是它声明了sheetName并且它稍后使用它。这是一个很好的做法:

Option Explicit

Sub Testing()

    Dim rng         As Range
    Dim myCell      As Range
    Dim sheetName   As String

    Set rng = Sheets("Control").Range("C5:C10")

    For Each myCell In rng

        If myCell = 1 Then

            Worksheets(Worksheets.Count - 1).Range("Hyp_Table").Copy
            sheetName = Worksheets("Control").Cells(1, 1)
            Worksheets(sheetName).Paste
            Application.CutCopyMode = False

        End If

    Next myCell

End Sub