copy, paste...

3 отговора 0 прегледа
#1

copy, paste...

Здравейте !
Може ли някой да ми каже , как сорса да се оптимизира, така че пействането да става по-бързо и да спре примигването на екрана. Ето прилагам сорса:
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets("инструктаж").Range("M29") = "ОК" Then
Sheets("задачи").Range("A1:A5").Copy
Sheets("инструктаж").Range("A33").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets("инструктаж").Range("A28").Select

End If
Exit Sub
End Sub
Благодаря ви !

Редактирано от drosg на

Отговор
в отговор на drosg #2

Re: copy, paste...

По-добре е да НЕ използваш опциите на интерфейса
селект/копи/пейст, вместо това можеш да направиш
директно присвояване:

If Sheets("инструктаж").Range("M29") = "ОК" Then
For i=1 to 5
Sheets("инструктаж").Cells(32+i,1).Value=Sheets("задачи").Cells(i,1).Value
Next
End If


Успех!

Опит е името, с което хората наричат грешките си. О.Уайлд
Отговор
в отговор на npubem #3

Re: copy, paste...

Благодаря ти, но когато въведа кода , ексела забива, защо така!

Отговор
в отговор на drosg #4

Re: copy, paste...

Проблемът е, че Worksheet_Change се извиква рекурсивно още от
първия ред на цикъла и така до безкрай. Затова трябва да се
направи проверка дали има нужда от присвояването. Или самата
процедура да се стартира по друг начин.

Пробвай това:

For i=1 to 5
if Sheets("инструктаж").Cells(32+i,1).Value<>Sheets("задачи").Cells(i,1).Value then
Sheets("инструктаж").Cells(32+i,1).Value=Sheets("задачи").Cells(i,1).Value
exit sub
end if
Next


Опит е името, с което хората наричат грешките си. О.Уайлд
Отговор