Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn ich dasselbe Skript mehrmals ausführe?Hallo,
Ich habe ein Add-In, das ein Diagramm mit mehreren im Hintergrund versteckten Tabellen ausgibt.
Beim Schließen des Fensters verwende ich die Funktion „Beim Schließen“, um zugehörige Datentabellen zu schließen, etwa so:
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
Das Problem besteht darin, dass, wenn ich das Skript zweimal ausführe, TabelleA des ersten Durchlaufs bei der zweiten Skriptausführung überschrieben wird.
Ich habe versucht, das Problem zu umgehen, indem ich eine eindeutige ID verwendet habe, die bei jedem Skriptstart erstellt wurde, etwa so:
NewWindow() << On Close(
For(i = NItems(GetWindowList() << Get Window Title()), i > 0, i--,
win = GetWindow((GetWindowList() << Get Window Title())[i]);
If(Contains(win << get window title, Eval(uniqueID)) != 0,
win << closewindow()
);
)
)
Leider bleibt das gleiche Problem bestehen, UniqueID wird überschrieben.
Gibt es eine Möglichkeit, die Tabellen korrekt zu referenzieren, sodass beim Schließen des Fensters die richtigen Tabellen geschlossen werden?
Vielen Dank im Voraus für Ihre Hilfe!
Automatisierung und SkripterstellungBetreff: Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn ich dasselbe Skript mehrmals ausführe?Bewerten Sie die Tabellen zu Ihrem On Close
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
Betreff: Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn ich dasselbe Skript mehrmals ausführe?So funktioniert es: In Ihrem ursprünglichen Beispiel
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
TableA und TableB sind Variablen, die Zeiger auf die Tabellen enthalten. Bei mehreren Instanzen verweisen die Variablen auf die zuletzt zugewiesene Instanz.
Im @jthi- Beispiel:
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
Ihr Skript wird vom Code Eval(EvalExpr( ... Expr(...) ) ) vorverarbeitet, um die Variable durch ihren Wert zu ersetzen. Dadurch ist das Skript nicht mehr von der aktuellen Variable der Variablen abhängig, da der Aufruf von close() jetzt einen konstanten Wert verwendet (der viel früher von der Variablen erhalten wurde).
So lesen Sie es: EvalExpr(...) durchsucht sein Argument nach Expr(...) und wertet sie aus, wobei das ausgewertete Ergebnis anstelle von Expr() verbleibt. Wenn EvalExpr fertig ist, gibt es einen Ausdruck zurück, der noch ausgewertet werden muss, damit die OnClose(...)-Methode ausgeführt wird.
Es ist wichtig, die Expr(...)-Marker an der richtigen Stelle zu positionieren; Der Teil, der in Stein gemeißelt werden muss, ist lediglich der Wert der Variablen. Wenn Sie beispielsweise Expr(close(tableA,nosave)) verwenden, würde die Funktion close() zu früh ausgeführt.
Betreff: Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn ich dasselbe Skript mehrmals ausführe?Erstaunlich, vielen Dank!
Betreff: Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn ich dasselbe Skript mehrmals ausführe?Vielen Dank, Craige, für die Erklärungen, sehr hilfreich! Ich habe das verallgemeinert und freue mich, dass beim Schließen des Fensters die richtigen Tabellen geschlossen werden.
Ich habe immer noch ein Problem, das wahrscheinlich irgendwie damit zusammenhängt: In diesen Fenstern habe ich Menüskripte eingerichtet, um einen Drilldown zu ermöglichen. Jetzt rufen sie dank Eval(EvalExpr(...Expr(...))) die richtigen Argumente auf. Code. Dennoch definiere ich in diesen Skripten Variablen zur Datenmanipulation und weiß nicht, wie ich verhindern kann, dass sie überschrieben werden: Gibt es eine Möglichkeit, diese Variablen als lokal für dieses Skript zu deklarieren?
Beispiel:
Eval(
EvalExpr(
NewWindow("Example", Outline = OutlineBox("Add-ins", Tabs = TabBox())) <<
On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
)
);
Outline << Set Menu Script(
{"Script1", Eval(EvalExpr(Add_in_table = Expr(TableA) << Subset(Selected Rows))) ;
// some code
TableD = Add_in_table << Summary(...) ;
Eval(
EvalExpr(
NewWindow(Graph builder()) << OnClose(
Try(Close(Expr(Add_in_table), nosave));
Try(Close(Expr(TableD), nosave));
)
)
)}
);Danke
Betreff: Wie schließe ich die richtigen Tabellen mit „Beim Schließen“, wenn das gleiche Skript mehrmals ausgeführt wird?Namen werden standardmäßig hier verwendet(1); am Anfang des Skripts oder möglicherweise im Fensterbereich (oder in einer Box). Der Scripting Guide enthält einige Informationen zu Namespaces und Bereichen
Sie können über das Menü auf der linken Seite zu verschiedenen Seiten wechseln.

oder Pfeile oben rechts
