VBA Копировать, Прошлое, Переименовать, Копировать мимо и проходит через каждый столбец - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать код 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 `

1 Ответ

0 голосов
/ 24 октября 2018

Настоятельно рекомендуется избегать использования .Select, .Activate или аналогичных действий.
См. Как избежать использования Select в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...