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

Моя проблема не в производительности, я просто хочу отобразить message box если пользователь пытается вставить более 2000 строк. Я искал это в Google, но не смог найти информацию об этом.

2 ответа2

1

Извините, это не код для ответа, но это подход.

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

Чтобы получить данные буфера обмена, см. Следующую статью MSDN.

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

Может быть проще иметь кнопку «Проверить буфер обмена», которую пользователи нажимают перед вставкой?

-1
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim sLastOp As String
 Dim cell As Range
 Dim a As Integer
 Dim Row As Range
  a = 0
 For Each Row In Range(Target.Cells.Address)
    If InStr(Row.Address, "A") Then
        a = a + 1
    End If
Next
 '--get the last operation from the undo stack
 sLastOp = Application.CommandBars("Standard").FindControl(ID:=128).List(1)
 Select Case sLastOp
   '--if last operation was Paste or PasteSpecial, display message
   Case "Paste", "Paste Special"
   If a > 200 Then MsgBox "Please wait till pasting finishes." & a, vbOKOnly
   Case Else 'do nothing
 End Select
End Sub

Возьмите этот код и поместите его на новый лист, он будет работать на 100% при вставке, и вы можете изменить сообщение по своему усмотрению.
Но если честно, если вы пытаетесь удалить более 2000 строк, появится ошибка.
Еще одна проблема, я не мог поместить этот код в свой лист кода, я не знаю, в чем проблема, она не работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .