Wie kann man sagen, wenn Excel-Anwendung in Betrieb zell bearbeiten ist?
-
03-07-2019 - |
Frage
Ich schreibe eine Excel Addin von .net COM Interop verwenden. Ich habe einen Befehl, der einen Dialog erscheint, und aus dem Dialog ich einige Arbeiten wie Daten aus dem verwendeten Bereich mehrerer Blätter zu sammeln. Das Problem ist, dass, wenn eine Zelle im Bearbeitungsmodus befindet, werden einige der Anrufe, die ich brauche, um Ausnahmen zu werfen. Ich möchte eine Art und Weise zu bestimmen, bevor Hand, die Excel im Bearbeitungsmodus befindet, so dass ich den Benutzer warnt, kann zuerst die Bearbeitung die Zelle zu beenden.
Irgendwelche Ideen?
Lösung
Es gibt eine Application.Ready Eigenschaft, die Sie soll diese Informationen geben, aber in der Praxis funktionieren sie nicht zuverlässig. Siehe hier für eine hackaround.
Sie können auch bei Einstellung Application.Interactive = false aussehen wollen, während .net Code seiner Sachen tut.
Andere Tipps
Versuchen Sie, diese Funktion:
Function IsInEditMode(ByRef exapp As Excel.Application) As Boolean
If exapp.Interactive = False Then
Return False
Else
Try
exapp.Interactive = False
exapp.Interactive = True
Return False
Catch
Return True
End Try
End If
End Function
Sie erwähnen nicht, welche Sprache Sie verwenden. SZL der Funktion ist in VB geschrieben. Da ich C # bin mit hatte ich es zu konvertieren. Hat super funktioniert. Hier ist das Äquivalent C # -Code.
bool IsInEditMode(ref Microsoft.Office.Interop.Excel.Application exapp)
{
if (exapp.Interactive == false)
{
return false;
}
else
{
try
{
exapp.Interactive = false;
exapp.Interactive = true;
return false;
}
catch
{
return true;
}
}
}