copy, paste...
3 отговора
0 прегледа
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
Благодаря ви !
Може ли някой да ми каже , как сорса да се оптимизира, така че пействането да става по-бързо и да спре примигването на екрана. Ето прилагам сорса:
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 на
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
Успех!
Опит е името, с което хората наричат грешките си. О.Уайлд
селект/копи/пейст, вместо това можеш да направиш
директно присвояване:
If Sheets("инструктаж").Range("M29") = "ОК" Then
For i=1 to 5
Sheets("инструктаж").Cells(32+i,1).Value=Sheets("задачи").Cells(i,1).Value
Next
End If
Успех!
Опит е името, с което хората наричат грешките си. О.Уайлд
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
Опит е името, с което хората наричат грешките си. О.Уайлд
първия ред на цикъла и така до безкрай. Затова трябва да се
направи проверка дали има нужда от присвояването. Или самата
процедура да се стартира по друг начин.
Пробвай това:
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
Опит е името, с което хората наричат грешките си. О.Уайлд