You are right. I don't need to turn on sharing. I posted a prototype macro for simplicity, but it made my intent unclear. The current version first backups a class/job XHB, uses it as a temporary XHB for copying, and finally restores it. I turn on sharing just because I want to avoid unintentional overwriting class/job XHBs. I treat class/job XHB as an original and the shared XHB as a workspace.
/crosshotbar copy culinarian 7 share 8CUL 1-3 ... crafting actions
/macrolock <wait.2>
/crosshotbar copy current 4 share 4
/crosshotbar copy culinarian 1 current 4
/crosshotbar copy current 4 share 1
/crosshotbar share 1 on
/crosshotbar change 1
/crosshotbar copy culinarian 2 current 4
/crosshotbar copy current 4 share 2
/crosshotbar copy culinarian 3 current 4
/crosshotbar copy current 4 share 3
/crosshotbar copy share 4 current 4
/crosshotbar copy culinarian 4 share 4
/crosshotbar copy alchemist 7 share 8
CUL 4 ... crafting macros
CUL 7 ... DoH gearsets
ALC 7 ... miscellaneous macros
share 8 ... XHB for expanded controls with L2+R2
I manually switch gearset while waiting.
I also use dozens of combat macros using "/crosshotbar copy" on a daily basis. There were no issues before or after recent updates.
EDIT: After some trial and error, I found that DoH class XHB can be copied to shared one without touching class/job XHBs, allowing me to skip the backup and restore process. I updated my macros./crosshotbar share 1 on
/crosshotbar remove 1 all
/crosshotbar copy CUL 1 share 1/crosshotbar copy culinarian 7 share 8
/macrolock <wait.2>
/crosshotbar share 1 on
/crosshotbar remove 1 all
/crosshotbar copy share 1 share 2
/crosshotbar copy share 1 share 3
/crosshotbar copy share 1 share 4
/crosshotbar copy culinarian 1 share 1
/crosshotbar change 1
/crosshotbar copy culinarian 2 share 2
/crosshotbar copy culinarian 3 share 3
/crosshotbar copy culinarian 4 share 4
/crosshotbar copy culinarian 5 share 5
/crosshotbar copy culinarian 6 share 6
/crosshotbar copy alchemist 7 share 8
When I want to commit changes in another DoH class, I use the following macro. It has a foolproof function; when your current class/job is not DoH, it waits 1 minute before starting the copy.
/action "Shirk" <me> <wait.60>
/action "Leg Sweep" <me> <wait.60>
/action "Leg Graze" <me> <wait.60>
/action "Addle" <me> <wait.60>
/action "Rescue" <me> <wait.60>
/action "Sneak" <me> <wait.60>
/macrolock
/crosshotbar copy share 1 culinarian 1
/crosshotbar copy share 2 culinarian 2
/crosshotbar copy share 3 culinarian 3
/crosshotbar copy share 4 culinarian 4
/crosshotbar copy share 5 culinarian 5
/crosshotbar copy share 6 culinarian 6