Это мой первый пост, поэтому, пожалуйста, потерпите меня.
Я использую код ( с этого сайта ), который просматривает список в столбце A конкретной таблицы и создает / называет новые таблицы из этого списка (если они еще не существуют). Он также копирует данные из строк с соответствующими именами в соответствующие листы.
Меня интересует, как изменить код, чтобы вместо копирования всей строки на новый лист он копировал только столбцы A:P
. Я был бы очень признателен за любую помощь. Вот код:
Sub yearAssign()
Application.ScreenUpdating = False
On Error GoTo SheetError
sheetname = "initial"
Dim wkb As Workbook
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wkb = ThisWorkbook
Set wks = Sheets(sheetname)
totalsheets = wkb.Worksheets.Count
For i = 1 To totalsheets
Set wks1 = wkb.Worksheets(i)
thename = wks1.Name
If thename <> sheetname Then
wks1.Rows.Clear
End If
Next i
totalrows = wks.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To totalrows
theyear = wks.Cells(i, 1)
Set wks1 = Sheets(theyear)
lastrow = wks1.Cells(Rows.Count, "A").End(xlUp).Row + 1
If lastrow = 2 Then
wks.Rows(1).Copy Destination:=Sheets(theyear).Range("A1")
End If
wks.Rows(i).Copy Destination:=Sheets(theyear).Range("A" & lastrow)
Next i
Application.ScreenUpdating = True
finish = MsgBox("Finished", vbInformation)
SheetError:
If Err.Number = 9 Then
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = theyear
Resume
End If
End Sub
Ответы:
Вот строки, которые выполняют фактическое копирование целых строк:
Таким образом, изменение их следующим образом приведет к копированию только столбцов
A:P
:Кроме того, в коде есть несколько других проблем, в том числе, но не обязательно, следующих:
1) Многие объявления переменных отсутствуют:
2)
sheetname
устанавливается перед объявлением переменных3) Должен быть общий обработчик ошибок, и он
Application.ScreenUpdating
должен быть установлен вTrue
случае возникновения любой ошибки (в противном случаеApplication.ScreenUpdating
останется,False
когда процедура завершится после ошибки)4) Вхождения
Sheets(theyear)
в строках, выполняющих копирование, должны быть заменены наwks1
, потому чтоwks1
переменная уже была установлена вSheets(theyear)
Обратите внимание, что указание
Option Explicit
в верхней части модуля поможет привлечь внимание к таким проблемам, как # 1 и # 2, так как тогда код не будет компилироваться, пока проблемы не будут решены.источник