Visio List Shape - how to guard PinX and PinY formulas when item added to list?

Started by Visisthebest, November 25, 2022, 11:01:29 AM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Visisthebest

I have become quite fond of the Visio List Shape functionality, as described here:
https://bvisual.net/2022/07/06/a-visio-list-shape-is-also-a-container/

(rarely I use a Container/List combo, mostly just a List)

The problem I encounter is that for a solution I need formulas in the List shape for PinX and PinY. However, when a list item (shape) is added to the List shape, PinX and PinY are overwritten with a value and the formula is lost. GUARD()-ing the PinX and PinY formulas doesn't help, the formulas still get erased.

Is there another way to protect the PinX and PinY formulas from this behavior of the list shape when an item is added? Thank you for sharing your ideas for a solution!
Visio 2021 Professional

Yacine

Yes, the setatref group of functions should help.
Wapperdude has written a nice post about them.
Yacine

Visisthebest

Thank you Yacine checked out the MS info on SETATREF():
https://learn.microsoft.com/en-us/office/client-developer/visio/setatref-function

That should work will read up on it from Wapperdude's article as well thank you!
Visio 2021 Professional

Visisthebest

By the way, is there also a DEPENDSON() that fires when a formula changes (not just the resulting value)? That would be pretty useful in some cases.
Visio 2021 Professional

wapperdude

My guess is maybe.  Dependson()  is based upon a change in the reference cell.  Presumably, that means the cells value.  But what if  setf() or vba places a new formula?  I'm not sure.  Try a simple test case.  Say set a shape"s width to some value only when color changes.  This allows you to enter a color from GUI, or edit shape sheet to use setf() to enter an RGB  value, or use code to place a formula.
Visio 2019 Pro

Visisthebest

Wapperdude thank you again for your comprehensive articles on the SETATREF functions!

It is some SETATREF(SETATREFEVAL(SETREFEXPR())) formula construction magic that completely solved this problem. Superuseful!
Visio 2021 Professional

celoranta

Can anyone share what worked?
My SETATREF() formulas in list fields are being overwritten, and I'm not sure how you guys resolved it...

Visisthebest

celoranta I think this only works for the list container itself (to move the list container with another shape), the list field shapes (the container list members in Visio-speak) probably have built-in behavior that determines their position that may override everything else even SETATREF() formulas.

What are you trying to achieve?
Visio 2021 Professional