【问题标题】:copy every cells in a column to particular cell in new sheet every time with a loop每次使用循环将列中的每个单元格复制到新工作表中的特定单元格
【发布时间】:2012-09-06 19:54:21
【问题描述】:

我寻求您的帮助,将第一个工作表(D 列)中的单元格值复制到 16 个现有工作表中的指定单元格位置

我想要价值
D2 在 sheet1 到 sheet2 (G5)

工作表 1 到工作表 3 中的 D3 (G5)

工作表 1 到工作表 4 中的 D4 (G5)

以此类推,直到 D16 复制到 sheet16 的 G5

我是新手,我查看了几个答案并试图自己解决,但是....什么也没发生

Sub latitude()
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 1 To WS_Count
Do Until IsEmpty(ActiveCell)
Sheets("Calculations").Select
Range("d2").Copy
    ActiveCell.Offset(1, 0).Select
'at this point i want it to copy "D3" on next loop
ActiveSheet.Range("G5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Loop
ActiveSheet.Next.Select
' and because the "Sheets("Calculations").Select" above takes it to the first sheet the whole script is a waste till now
Next I
End Sub

【问题讨论】:

  • 您为什么不使用动态内容有什么原因吗?喜欢='sheet1'!D3?

标签: excel copy-paste vba


【解决方案1】:

Alistairs 的尝试很好,但我不会使用shtname = "Sheet" & i,而是尝试以下解决方案并考虑对其进行防弹处理(工作表的存在);)

Sub Copy_to_G5()
    Dim i As Integer

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    i = 2
    Do Until i = 17
        With ThisWorkbook
        .Worksheets(1).Cells(i, 4).Copy
        .Worksheets(i).Range("G5").PasteSpecial
        End With
    i = i + 1
    Loop

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub

【讨论】:

  • 因为 WITH 语句 - 而不是在每个 . 之前写 ThisWorkbook 你可以说 With ThisWorkbook,然后 . 是这个 with 语句的连接器 - 特别适用于复杂的范围/单元格东西。
  • 感谢 Jook,但我必须进行一些小修改才能使其正常工作!必须删除.Worksheets(1).Cells(i, 4).Copy.Worksheets(i).Range("G5").PasteSpecial 前面的. (DOT),我想知道为什么会这样,请您解释一下并再次感谢
  • 很好,忘记了工作表的内置索引! Uttam - 我对必须删除. 使其工作感到有点困惑。使用 With 语句时,. 是必需的。
  • 是的,我也想知道,但它是这样的:使用.Worksheets(i),一个是引用这个宏在其中执行的工作簿的工作表(ThisWorkbook);使用Worksheets(i) 默认指的是ActiveWorkbook,就像你有Application.Worksheets(i)
【解决方案2】:

试试这个。

Option Explicit
Sub Copy_to_G5()
    Dim sht1 As Worksheet, ws As Worksheet
    Dim i As Integer
    Dim shtname As String

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set sht1 = Sheets("Sheet1")
    i = 2
    Do Until i = 17
        shtname = "Sheet" & i
        sht1.Cells(i, 4).Copy
        Sheets(shtname).Range("G5").PasteSpecial
    i = i + 1
    Loop

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub

【讨论】:

  • 亲爱的 Alistair 我尝试了宏,但它只成功地复制了一次到 sheet2 中,之后就没有了。我创建了一个虚拟工作簿来测试这个宏,因为我之前忘了提到我随机命名了工作表。谢谢
  • 好吧,它不起作用的原因是因为工作表名称不同,我认为它们是“工作表 2-工作表 16”。我会尝试围绕不同的工作表名称考虑解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多