Приветствую, дорогие форумчане. При написании программы проведения соревнований, создал макрос, который будет очень большим, что прибавит много рутинной работы. Суть такая: Книга А (макет с таблицами для разного количества участников), Книга Б (протокол взвешивания участников), Книга В (турнирная сетка). Мой макрос копирует определенный лист из Книги А (в зависимости от участников взвешивания в Книге Б) в Книгу В. Как его можно оптимизировать, чтобы он стал максимально короче? Спасибо.
Приветствую, дорогие форумчане. При написании программы проведения соревнований, создал макрос, который будет очень большим, что прибавит много рутинной работы. Суть такая: Книга А (макет с таблицами для разного количества участников), Книга Б (протокол взвешивания участников), Книга В (турнирная сетка). Мой макрос копирует определенный лист из Книги А (в зависимости от участников взвешивания в Книге Б) в Книгу В. Как его можно оптимизировать, чтобы он стал максимально короче? Спасибо.
Макрос можно поместить в любую книгу, но запускать ОБЯЗАТЕЛЬНО с листа "протокол взвешивания" [vba]
Код
Sub Мяу() Dim wbM As Workbook, wbS As Workbook Dim sh As Worksheet, shS As Worksheet Dim k&
Set wbM = Workbooks("3840739.xls") '("Матрица.xlsm") Set wbS = Workbooks("4206750.xls") '("экс.сор..xlsm") Set sh = ActiveSheet With sh k = WorksheetFunction.CountA(Range("D7:D300")) 'k = .Range("C101").Value If k = 8 Then wbM.Sheets("8 участников").Copy After:=wbS.ActiveSheet ElseIf k = 9 Then wbM.Sheets("9уч").Copy After:=wbS.ActiveSheet ' добавить по вкусу ' ElseIf k = 100 Then 'wbM.Sheets("100 участников").Copy After:=wbS.ActiveSheet End If Set shS = ActiveSheet shS.Range("B3").Value = .Range("B3").Value shS.Range("A2").Value = .Range("A2").Value shS.Range("B7:F" & 6 + k * 2).Value = .Range("B7:F" & 6 + k * 2).Value End With End Sub
[/vba]
Макрос можно поместить в любую книгу, но запускать ОБЯЗАТЕЛЬНО с листа "протокол взвешивания" [vba]
Код
Sub Мяу() Dim wbM As Workbook, wbS As Workbook Dim sh As Worksheet, shS As Worksheet Dim k&
Set wbM = Workbooks("3840739.xls") '("Матрица.xlsm") Set wbS = Workbooks("4206750.xls") '("экс.сор..xlsm") Set sh = ActiveSheet With sh k = WorksheetFunction.CountA(Range("D7:D300")) 'k = .Range("C101").Value If k = 8 Then wbM.Sheets("8 участников").Copy After:=wbS.ActiveSheet ElseIf k = 9 Then wbM.Sheets("9уч").Copy After:=wbS.ActiveSheet ' добавить по вкусу ' ElseIf k = 100 Then 'wbM.Sheets("100 участников").Copy After:=wbS.ActiveSheet End If Set shS = ActiveSheet shS.Range("B3").Value = .Range("B3").Value shS.Range("A2").Value = .Range("A2").Value shS.Range("B7:F" & 6 + k * 2).Value = .Range("B7:F" & 6 + k * 2).Value End With End Sub
RAN, Здравствуйте. что нужно поменять в макросе, если листы из '("Матрица.xlsm") и ("экс.сор..xlsm") будут в одной общей книге ("экс.взв..xlsm")? хочу упростить, чтобы открывать один файл и все операции проводить в рамках одной книги, чтобы новый лист копировался в конец книги
RAN, Здравствуйте. что нужно поменять в макросе, если листы из '("Матрица.xlsm") и ("экс.сор..xlsm") будут в одной общей книге ("экс.взв..xlsm")? хочу упростить, чтобы открывать один файл и все операции проводить в рамках одной книги, чтобы новый лист копировался в конец книгиamaksimus85