【问题标题】:Copy and paste data into the same range of multiple worksheets by using a VBA module code使用 VBA 模块代码将数据复制并粘贴到多个工作表的同一范围内
【发布时间】:2019-05-21 23:40:38
【问题描述】:

我是新手。

我需要将单个工作表(名为“FILE MASTER”)中的特定单元格区域(“B6:C36”)复制到同一工作簿中的所有其他工作表。

之后,我需要将此全新的宏分配给文件主工作表中存在的按钮(因此此宏必须具有名称/子,否则我无法将其分配给按钮)。

话虽如此,我尝试使用 MS Excel 的录制功能创建一个宏,并且它可以工作。但它有一个严重的弱点:这种自动编码过程使用/阐明了源代码中每个工作表的名称。所以如果我添加一个新的工作表,这个宏就不能正常工作了。

希望已经足够清楚

提前感谢大家。

【问题讨论】:

  • 在您的FILE MASTER 工作表中,您指定的输入范围是否发生了变化?
  • 你有没有做过任何研究 (How to Ask)? “VBA 循环遍历所有工作表” 应该会在 Google 中为您提供数以千计的结果,其中解释了如何遍历所有工作表。
  • 看看这个答案 - 如果有帮助,请给它投票...,请参阅:stackoverflow.com/a/30605765/4961700
  • @mray190 要复制的范围始终相同,即 FILE MASTER 的“B6:C36”。我忘了说,我需要从这些单元格中复制数据和格式。为了避免误解,我需要这段代码替换每个工作表中相同位置“B6:C36”的相同范围“B6:C36”
  • @Pᴇʜ 在决定在这里提问之前,我尝试了大约 40 次谷歌搜索。对不起,打扰你。欢迎任何帮助:)

标签: excel vba


【解决方案1】:

您可以更改代码并尝试以下操作:

Option Explicit

Sub CopyYes()

    Dim ws As Worksheet

    With ThisWorkbook
        'Copy the range
        .Worksheets("FILE MASTER").Range("B6:C36").Copy

        'Loop sheets
        For Each ws In .Worksheets

            With ws
                'Avoid FILE MASTER
                If .Name <> "FILE MASTER" Then
                    'Paste only values in A1 of each sheet
                    .Range("A1").PasteSpecial xlPasteValues
                End If

            End With

        Next ws

    End With

End Sub

【讨论】:

  • "运行时错误 '9' --> 下标超出范围" 我使用上面的代码得到了这个错误
  • @ValerioS 检查您的工作表名称,确保工作表 FILE MASTER 确实存在并且其名称中没有额外的空格。
  • @Pᴇʜ 你是对的!!!! FILE MASTER 之后有一个空格。最后一件事:我更改了错误 1004 建议的代码的第二部分,即“B6:C36”中的“A1”范围。现在它可以工作了,但它只复制单元格的值,而不是格式。
  • @ValerioS 查看Range.PasteSpecial method 的文档。你会发现XlPasteType enumeration 是什么,xlPasteValues 意味着只有值被粘贴(没有格式)。 • 您的问题的解决方案在文档中。
【解决方案2】:
Option Explicit

Sub CopyYes()

Dim ws As Worksheet

With ThisWorkbook
    'Copy the range
    .Worksheets("FILE MASTER").Range("B6:C36").Copy

    'Loop sheets
    For Each ws In .Worksheets

        With ws
            'Avoid FILE MASTER
            If .Name <> "FILE MASTER" Then
                'Paste values and formats in B6:C36 of each sheet
                .Range("B6:C36").PasteSpecial xlPasteValues
                .Range("B6:C36").PasteSpecial xlPasteFormats
            End If

        End With

    Next ws

End With

结束子

【讨论】:

  • 我在这里分享修改后的代码。现在它起作用了。谢谢你们!! :)) 特别是错误 1004 和 Pᴇʜ
  • 请注意,根据文档,它必须是xlPasteValuesxlPasteFormats
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多