
ich benutzeExcel 2013um eine Arbeitsmappe zu erstellen, die von einem Endbenutzer ausgefüllt wird, habe ich ehrlich gesagt viele Validierungen, sodass es zu lange dauert, wenn der Benutzer versucht, mehr als 2000 Zeilen einzufügen.
Mein Problem ist nicht die Leistung, ich möchte nur anzeigen, message box
ob der Benutzer versucht, mehr als2000 Zeilen. Ich habe bei Google danach gesucht, konnte aber keine Informationen dazu finden.
Antwort1
Entschuldigung, dies ist nicht der Code für die Antwort, aber es ist ein Ansatz.
Im Grunde wird das schwierig, da Sie nicht einfach erkennen können, wann der Benutzer Daten einfügen möchte. Die Daten aus der Zwischenablage abzurufen ist nicht so schwierig, das Einfügen jedoch abzufangen.
Informationen zum Abrufen der Zwischenablagedaten finden Sie im folgenden MSDNArtikel.
Um das Einfügen abzufangen, wäre eine Idee, sich mit verzögertem Rendering zu befassen, wie inDasStackOverflow-Antwort.
Wäre es vielleicht einfacher, eine Schaltfläche „Zwischenablage überprüfen“ zu haben, die Ihre Benutzer vor dem Einfügen drücken?
Antwort2
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
Nehmen Sie diesen Code und fügen Sie ihn in ein neues Blatt ein. Er funktioniert beim Einfügen zu 100 % und Sie können die Nachricht nach Belieben ändern.
Aber ehrlich gesagt wird ein Fehler angezeigt, wenn Sie versuchen, mehr als 2000 Zeilen zu löschen.
Ein weiteres Problem ist, dass ich diesen Code nicht in meinen Blattcode einfügen konnte. Ich weiß nicht, was das Problem ist, er funktioniert nicht.