【问题标题】:VBA Copy, Past, Rename, Copy past and runs through each columnVBA 复制、粘贴、重命名、复制粘贴并遍历每一列
【发布时间】:2020-04-10 04:06:51
【问题描述】:

我正在尝试构建一个 vba 代码。有些位正在工作,有些则没有。工作:它正在从客户工作簿中收集有价值的单元格并粘贴到供应商工作簿中的新工作表中。新工作表在单元格名称上重命名。不工作:我还想复制供应商工作簿中名为模板的标题。最后一点我希望 VBA 代码贯穿每一列。

Sub Copy_Past_Repeat()

Dim rs As Worksheet
Dim rng As Range
    Windows("Customer.xlsm").Activate
    Set rng = Range("n1:n1000")   'column
    rng.SpecialCells(xlCellTypeConstants).Select   'Selecting only hardcoded data
   Selection.Copy
   Windows("Supplier.xlsm").Activate
   Sheets.Add after:=ActiveSheet
   Range("C2").Select
    ActiveSheet.Paste
     ActiveSheet.Name = ActiveSheet.Range("C2")

  'not working
   ThisWorkbook.Sheets("Template").Range("A1:E1").Select
    Selection.Copy

   ActiveSheet.Paste 'should be pasted in just crated spreadsheet Name=(C2)
   Application.CutCopyMode = False

  End Sub `

【问题讨论】:

  • 阅读this answer 了解如何避免SelectActivate。我认为这将帮助您避免遇到的问题。

标签: excel vba


【解决方案1】:

强烈建议避免使用.Select.Activate 或类似操作。
How to avoid using Select in Excel VBA

还始终指定范围在哪个工作表或工作簿中。否则 Excel 无法识别和猜测。

Option Explicit

Sub Copy_Past_Repeat()
    Dim rng As Range
    Set rng = Workbooks("Customer.xlsm").Range("N1:N1000")   'column

    rng.SpecialCells(xlCellTypeConstants).Copy   'Copy only hardcoded data

    Dim NewWs As Worksheet
    With Workbooks("Supplier.xlsm")
        Set NewWs = .Sheets.Add(After:=.ActiveSheet) 'remember the new added sheet in NewWs so we can access it later 
        NewWs.Range("C2").Paste
        NewWs.Name = NewWs.Range("C2")

        ThisWorkbook.Worksheets("Template").Range("A1:E1").Copy

        NewWs.Paste 'should be pasted in just crated spreadsheet Name=(C2)
        'here you should specify where in the sheet to paste
        'NewWs.Range("A1").Paste
    End With

    Application.CutCopyMode = False
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2019-05-20
    相关资源
    最近更新 更多