Скопируйте диапазон и перенесите вставку в строку, содержащую ячейку - PullRequest
0 голосов
/ 11 января 2020

У меня есть набор кодов, который, как мне показалось, работает, но больше не работает после изменения нескольких вещей. Я пытаюсь скопировать значения из диапазона на одном листе («Лист1») и вставить их транспонированными на другой («Лист2»). Суть в том, что я хочу вставить их только в строку, в которой значение в столбце A равно значению в («B2») на том же листе. Кроме того, это значение будет повторяться по всему столбцу A, но мне нужно только вставить его в строку между строками 11 и 29. Вот что у меня есть:

Sub PasteData()

Range("O3:O44").Select
    Selection.copy

Worksheets("Sheet2").Activate

Worksheets("Sheet2").Unprotect ("Password")

Dim nRow As Long
Dim nStart As Long, nEnd As Long

For nRow = 11 To 29
If Range("A" & nRow).Value = Range("b2").Value Then
nStart = nRow
Exit For
End If
Next nRow

For nRow = nStart To 29
If Range("a" & nRow).Value <> Range("b2").Value Then
nEnd = nRow
Exit For
End If
Next nRow
nEnd = nEnd - 1

Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True

Worksheets("Sheet2").Protect Password:="Password", DrawingObjects:=True, Contents:=True, Scenarios:=False
Worksheets("Sheet3").Activate

Range("B13").Select

End Sub

1 Ответ

0 голосов
/ 12 января 2020

Я заметил в вашем коде, что вы не ссылались на лист Range("O3:O44"). Поэтому, когда вы запустите код, он выберет и скопирует Range("O3:O44") активного листа.

Чтобы избежать этой путаницы, избегайте максимально возможного использования .Select и .Activate, особенно при работе с несколькими листы. При ссылках на диапазоны всегда включайте лист, на который вы нацеливаетесь.

Поэтому вместо:

Range("O3:O44").Select
Selection.Copy

Сделайте это так:

Worksheets("Sheet1").Range("O3:O44").Copy 

Теперь, чтобы ответить на ваш проблема, вам нужно указать, из какого листа Range("O3:O44"). Затем переместите этот код в строку непосредственно перед вставкой.

'range to copy with sheet reference
Worksheets("Sheet1").Range("O3:O44").Copy
'range where previous range will be pasted, also with sheet reference
Worksheets("Sheet2").Range("A" & nStart & ":AP" & nEnd).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True

Попробовав свой код, вы решите возникшую ошибку.

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