Неправильное смещение макроса в Excel. - PullRequest
1 голос
/ 21 февраля 2020

Я использую этот макрос для вставки значений и форматирования в другую книгу. В основном это работает нормально, но у меня проблема с вставкой строк в Sheet1.

Вместо вставки значений, форматирования и изменения размера шрифта код вставляет значения, затем в следующую пустую строку вставляет форматирование, а затем в следующей пустой строке изменяет размер шрифта.

Я хочу, чтобы значения, форматирование и изменение размера шрифта работали в тех же строках.

Макрос запускается с кнопки. Пользователь выберет параметры, затем нажмите кнопку, чтобы запустить его несколько раз. Идея состоит в том, что Sheet1 будет иметь список из нескольких записей.

Может кто-нибудь указать, что я делаю неправильно?

Спасибо

    Sub CreateNewSheet()
Application.ScreenUpdating = False
Application.Calculation = xlManual

    With Workbooks("Batsmen.xlsx").Worksheets.Add()
    .Name = Range("E3").Value
    End With

Sheets("Summary").Range("A22:J63").Copy
Workbooks("Batsmen.xlsx").Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
Workbooks("Batsmen.xlsx").Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteFormats
Workbooks("Batsmen.xlsx").Sheets(1).Range("A:J").Font.Size = 10

Sheets("Summary").Range("A22:J27").Copy
Workbooks("Batsmen.xlsx").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
Workbooks("Batsmen.xlsx").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteFormats
Workbooks("Batsmen.xlsx").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1).Font.Size = 10

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

1 Ответ

1 голос
/ 21 февраля 2020

Проблема в том, что вы смещены 3 раза И последняя строка изменяется между вашими смещениями, потому что вы добавили одну строку данных.

With Workbooks("Batsmen.xlsx").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1)
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    .Font.Size = 10
End With

Это сместит только один раз и выполнит все три действия в одной и той же ячейке.

В качестве альтернативы вы можете используйте переменную и используйте ее вместо оператора With:

Dim MyDestination As Range
Set MyDestination = Workbooks("Batsmen.xlsx").Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1)

MyDestination.PasteSpecial Paste:=xlPasteValues
MyDestination.PasteSpecial Paste:=xlPasteFormats
MyDestination.Font.Size = 10

Обратите внимание: если вам приходится писать один и тот же код дважды, вам следует подумать об этом. Тогда используйте либо переменную, либо оператор with. Если это повторяющийся блок, то хорошей идеей может быть использование процедур / функций (которые можно использовать повторно). Повторение кода в большинстве случаев является плохим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...