我在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
任何人都可以帮我解决这些问题。
答案 0 :(得分:2)
首先要做的事 - 避免使用ActiveSheet
,Application.GoTo
和Selection
。在每种情况下。
How to avoid using Select in Excel VBA
第二件事 - 避免使用Cell
和Range
等名称声明变量,因为这些名称是特殊的,它们由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