Вызванный объект отключился от своих клиентов, когда VBA копирует диапазон от листа до листа - PullRequest
0 голосов
/ 14 января 2019

это мой первый пост здесь. Я пытался найти исправление безрезультатно. Я не эксперт в VBA, поэтому я уверен, что мой код выглядит неряшливо.

Обычно я пытаюсь скопировать и вставить данные из одного листа в другой в той же книге. Данные для копирования выкладываются в виде таблицы. Диапазон, в который я вставляю, - это один ряд для одной компании.

Sub Save()
Application.ScreenUpdating = False

Dim x As Integer
x = Worksheets("Insurance Tower Template").Range("B37").Value

'date
Worksheets("Data").Range("A" & x) = Date

'policy number
Worksheets("Insurance Tower Template").Range("L5").Copy
Worksheets("Data").Range("H" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("H" & x).PasteSpecial Paste:=xlPasteFormats

'status
Worksheets("Insurance Tower Template").Range("L6").Copy
Worksheets("Data").Range("G" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("G" & x).PasteSpecial Paste:=xlPasteFormats

'producer
Worksheets("Insurance Tower Template").Range("L7").Copy
Worksheets("Data").Range("EX" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("EX" & x).PasteSpecial Paste:=xlPasteFormats

'primary
Worksheets("Insurance Tower Template").Range("D10:L10").Copy
Worksheets("Data").Range("I" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("I" & x).PasteSpecial Paste:=xlPasteFormats

'1xs
Worksheets("Insurance Tower Template").Range("D11:L11").Copy
Worksheets("Data").Range("R" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("R" & x).PasteSpecial Paste:=xlPasteFormats

'2xs
Worksheets("Insurance Tower Template").Range("D12:L12").Copy
Worksheets("Data").Range("AA" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("AA" & x).PasteSpecial Paste:=xlPasteFormats

'3xs
Worksheets("Insurance Tower Template").Range("D13:L13").Copy
Worksheets("Data").Range("AJ" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("AJ" & x).PasteSpecial Paste:=xlPasteFormats

'4xs
Worksheets("Insurance Tower Template").Range("D14:L14").Copy
Worksheets("Data").Range("AS" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("AS" & x).PasteSpecial Paste:=xlPasteFormats

'5xs
Worksheets("Insurance Tower Template").Range("D15:L15").Copy
Worksheets("Data").Range("BB" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("BB" & x).PasteSpecial Paste:=xlPasteFormats

'6xs
Worksheets("Insurance Tower Template").Range("D16:L16").Copy
Worksheets("Data").Range("BK" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("BK" & x).PasteSpecial Paste:=xlPasteFormats

'7xs
Worksheets("Insurance Tower Template").Range("D17:L17").Copy
Worksheets("Data").Range("BT" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("BT" & x).PasteSpecial Paste:=xlPasteFormats

'8xs
Worksheets("Insurance Tower Template").Range("D18:L18").Copy
Worksheets("Data").Range("CC" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("CC" & x).PasteSpecial Paste:=xlPasteFormats

'9xs
Worksheets("Insurance Tower Template").Range("D19:L19").Copy
Worksheets("Data").Range("CL" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("CL" & x).PasteSpecial Paste:=xlPasteFormats

'10xs
Worksheets("Insurance Tower Template").Range("D20:L20").Copy
Worksheets("Data").Range("CU" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("CU" & x).PasteSpecial Paste:=xlPasteFormats

'11xs
Worksheets("Insurance Tower Template").Range("D21:L21").Copy
Worksheets("Data").Range("DD" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("DD" & x).PasteSpecial Paste:=xlPasteFormats

'12xs
Worksheets("Insurance Tower Template").Range("D22:L22").Copy
Worksheets("Data").Range("DM" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("DM" & x).PasteSpecial Paste:=xlPasteFormats

'13xs
Worksheets("Insurance Tower Template").Range("D23:L23").Copy
Worksheets("Data").Range("DV" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("DV" & x).PasteSpecial Paste:=xlPasteFormats

'14xs
Worksheets("Insurance Tower Template").Range("D24:L24").Copy
Worksheets("Data").Range("EE" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("EE" & x).PasteSpecial Paste:=xlPasteFormats

'15xs
Worksheets("Insurance Tower Template").Range("D25:L25").Copy
Worksheets("Data").Range("EN" & x).PasteSpecial Paste:=xlPasteValues
Worksheets("Data").Range("EN" & x).PasteSpecial Paste:=xlPasteFormats

'clearborders
Sheets("Data").Activate
Range("A1:EX5000").Select
Selection.Borders.LineStyle = xlNone
Range("A1").Select

'reformula below

'date
Worksheets("Reformula").Range("L27").Copy
Worksheets("Insurance Tower Template").Range("L27").PasteSpecial Paste:=xlPasteFormulas

'policy number
Worksheets("Reformula").Range("L5").Copy
Worksheets("Insurance Tower Template").Range("L5").PasteSpecial Paste:=xlPasteFormulas

'status
Worksheets("Reformula").Range("L6").Copy
Worksheets("Insurance Tower Template").Range("L6").PasteSpecial Paste:=xlPasteFormulas

'producer
Worksheets("Reformula").Range("L7").Copy
Worksheets("Insurance Tower Template").Range("L7").PasteSpecial Paste:=xlPasteFormulas

'primary
Worksheets("Reformula").Range("D10:L10").Copy
Worksheets("Insurance Tower Template").Range("D10").PasteSpecial Paste:=xlPasteFormulas

'1XS
Worksheets("Reformula").Range("D11:L11").Copy
Worksheets("Insurance Tower Template").Range("D11").PasteSpecial Paste:=xlPasteFormulas

'2XS
Worksheets("Reformula").Range("D12:L12").Copy
Worksheets("Insurance Tower Template").Range("D12").PasteSpecial Paste:=xlPasteFormulas

'3XS
Worksheets("Reformula").Range("D13:L13").Copy
Worksheets("Insurance Tower Template").Range("D13").PasteSpecial Paste:=xlPasteFormulas

'4XS
Worksheets("Reformula").Range("D14:L14").Copy
Worksheets("Insurance Tower Template").Range("D14").PasteSpecial Paste:=xlPasteFormulas

'5XS
Worksheets("Reformula").Range("D15:L15").Copy
Worksheets("Insurance Tower Template").Range("D15").PasteSpecial Paste:=xlPasteFormulas

'6XS
Worksheets("Reformula").Range("D16:L16").Copy
Worksheets("Insurance Tower Template").Range("D16").PasteSpecial Paste:=xlPasteFormulas

'7XS
Worksheets("Reformula").Range("D17:L17").Copy
Worksheets("Insurance Tower Template").Range("D17").PasteSpecial Paste:=xlPasteFormulas

'8XS
Worksheets("Reformula").Range("D18:L18").Copy
Worksheets("Insurance Tower Template").Range("D18").PasteSpecial Paste:=xlPasteFormulas

'9XS
Worksheets("Reformula").Range("D19:L19").Copy
Worksheets("Insurance Tower Template").Range("D19").PasteSpecial Paste:=xlPasteFormulas

'10XS
Worksheets("Reformula").Range("D20:L20").Copy
Worksheets("Insurance Tower Template").Range("D20").PasteSpecial Paste:=xlPasteFormulas

'11XS
Worksheets("Reformula").Range("D21:L21").Copy
Worksheets("Insurance Tower Template").Range("D21").PasteSpecial Paste:=xlPasteFormulas

'12XS
Worksheets("Reformula").Range("D22:L22").Copy
Worksheets("Insurance Tower Template").Range("D22").PasteSpecial Paste:=xlPasteFormulas

'13XS
Worksheets("Reformula").Range("D23:L23").Copy
Worksheets("Insurance Tower Template").Range("D23").PasteSpecial Paste:=xlPasteFormulas

'14XS
Worksheets("Reformula").Range("D24:L24").Copy
Worksheets("Insurance Tower Template").Range("D24").PasteSpecial Paste:=xlPasteFormulas

'15XS
Worksheets("Reformula").Range("D25:L25").Copy
Worksheets("Insurance Tower Template").Range("D25").PasteSpecial 
Paste:=xlPasteFormulas

Application.CutCopyMode = False

End Sub

Этот код работал некоторое время, но я добавил столбец «Статус», и тогда все, казалось, развалилось. Макрос зависает, а затем выдает ошибку. При отладке желтая подсветка всегда находится в строке «Paste: = xlPasteFormats».

Буду признателен за понимание этого. Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Переместить Paste:=xlPasteFormats в строку Worksheets("Insurance Tower Template").Range("D25").PasteSpecial, чтобы она читалась как

Worksheets("Insurance Tower Template").Range("D25").PasteSpecial Paste:=xlPasteFormulas 

При этом вы также можете заменить все эти операции копирования и вставки и просто сделать

Worksheets("Data").Range("H" & x) = Worksheets("Insurance Tower Template").Range("L5")

И повторите для каждого копируемого диапазона.

А для формул

Worksheets("Insurance Tower Template").Range("L27") = Worksheets("Reformula").Range("L27").Formula

И повторите для каждой формулы, которую вы копируете, только для того, чтобы немного очистить код и снизить производительность Copy-Paste операций.

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