2016-09-02 1 views
0

Как и в названии, мне нужно написать код VBA, который копирует всю выбранную строку i и вставляет только значения, чтобы впоследствии результаты не могли быть изменены.Как заблокировать активную строку в excel с помощью VBA?

Я уже успел сделать это для ActiveCell в последнем файле, над которым я работал, но мне пришлось изменить только одну ячейку. Это код, который я использовал:

Sub Freeze() 
    ActiveCell.Copy 
    ActiveCell.PasteSpecial Paste:=xlPasteValues 
End Sub 

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

Спасибо.

+2

как '' ActiveCell.EntireRow.Copy' и ActiveCell.EntireRow.PasteSpecial xlPasteValues' ??? Или как 'ActiveCell.EntireRow.Value = ActiveCell.EntireRow.Value'? –

+0

Это именно то, что мне нужно. Ничего себе, это так просто, мне это нигде не удалось найти, большое спасибо: D – Teodoraa

+0

Добро пожаловать;) –

ответ

0

Используйте простой код ниже (старайтесь избегать Выбор ячеек и активных клеток, если это возможно):

Sub Test() 

Call Freeze(3, 7) 
Call Freeze(4, 8) 

End Sub 


Sub Freeze(rowsource As Long, rowdest As Long) 

Rows(rowsource).Copy 
Rows(rowdest).PasteSpecial Paste:=xlPasteValues 

End Sub 
+0

'Строки (3)' также работают. – arcadeprecinct

+0

true, но таким образом он может вычислить логику, если хочет использовать несколько строк, например 'Rows (« 3:10 »). Копировать' –

+0

true, не думал об этом. Просто подумал, что это будет проще реализовать с использованием численного значения. – arcadeprecinct

0

Paste: = xlPasteValues ​​

Вам не нужно копировать значения вставки если вы не пытаетесь также копировать форматы.

Попробуйте это. Замените имена листов соответствующими именами листов. Также замените X, Y соответствующими номерами строк. Если вы используете несколько строк, то изменить Rows(X) к Range("X:X") и аналогично Range("Y:Y")

Thisworkbook.Sheets("Sheet1").Rows(X).Value = _ 
Thisworkbook.Sheets("Sheet2").Rows(Y).Value 
+0

Мне нужно сохранить форматы на самом деле. Кроме того, мне нужно работать с той строкой, которую я выбираю (она меняется ежедневно), поэтому я не могу использовать предварительно заданный номер строки. Ваше решение хорошее, просто не совсем то, что мне нужно :) – Teodoraa

+1

'он меняется ежедневно'Используйте переменную :) –

Смежные вопросы