Saya memiliki masalah terkait pekerjaan dan, dengan demikian, saya tidak dapat melampirkan file contoh.
Saya menggunakan bentuk dinamis sebagai bagian dari diagram, di mana pengguna dapat mengubah data bentuk (yaitu mengubah kategori) dan bentuknya akan berubah warna. Mekanik untuk ini ada di ShapeSheet.
Sepotong kunci data (Prop.Category) adalah indeks dari daftar opsi yang tetap. Bidang Pengguna (User.ForeColour) menggunakan data Prop.Category untuk menentukan nilai warna RGB dari daftar tetap lainnya (rumus indeks / pencarian lainnya). Saya telah mengatur FillForegnd untuk mengakses User.ForeColour secara langsung.
Dalam contoh saya di sini, pengguna memilih Prop.Category # 3, yang secara tidak langsung menetapkan User.ForeColour ke RGB (128,0.128). Namun, dalam pengaturan file saya saat ini, FillForegnd kemudian diatur ke RGB (64,86.150). Ketika saya memilih kategori lain, nilai FillForegnd juga berubah dari nilai yang diharapkan.
Saya telah memeriksa ShapeSheet menggunakan rumus dan nilai tampilan. Semuanya benar (kecuali untuk nilai akhir di FillForegnd). Pengecekan ganda User.ForeColour menunjukkan bahwa ia memegang nilai RGB (128.0.128) seperti yang diharapkan.
Menariknya, jika saya menimpa rumus di User.ForeColour dengan nilai statis RGB (128,0.128), FillForegnd diisi dengan benar dan bentuknya menunjukkan warna yang benar. Kembali ke rumus (yang masih berakhir pada nilai yang tepat) dan FillForegnd sekali lagi diisi dengan nilai RGB yang salah.
Saya telah memeriksa dan menghapus tema, ini tidak berpengaruh.
Visio 2010, Lingkungan jaringan Windows 7.
Saya telah mencoba menduplikasi masalah dalam file baru pada sistem yang berbeda (sehingga saya bisa mendapatkan contoh yang dapat diunggah), tetapi tidak berhasil. File dengan bentuk master asli masih berfungsi seperti yang diharapkan. File baru dengan bentuk yang disalin (dan secara default, master yang disalin) adalah yang bermasalah. Saya telah memeriksa ganda ShapeSheet dan pengaturan default / master seperti yang diharapkan (teks hitam) dan pilihan yang disesuaikan (teks biru) seperti yang diharapkan.
Jawaban:
Orang baik di forum visguy memberikan wawasan yang cukup untuk menyelesaikan pertanyaan yang saya ajukan di sini.
The
User.Forecolour
properti digunakan rumus (INDEX(...)
) untuk menentukan nilai warna yang diinginkan. Penggunaan formula ini tidak sesuai denganFillForegnd
sel.Ada tiga solusi sederhana. Kedua solusi menggunakan
SETF(...)
alih-alih memiliki FillForegnd arahkan ke formula.User.Forecolour
properti dapat menggunakanSETF(GetRef(FillForegnd),INDEX(...))
. Ini akan memaksa nilai masukFillForegnd
dan merupakan modifikasi termudah untuk kode asli. Kelemahannya adalah setiap modifikasi pengguna pada bentuk itu sendiri akan menimpaFillForegnd
sel yang tidak akan diperbaiki sampai pengguna memilih data bentuk yang tepat lagi.User.X
Sel tambahan dapat dibuat. TheSETF
jawaban 1 akanGetRef(User.X)
gantinya.FillForegnd
akan mengandungGuard(User.X)
. Ini akan menghentikan pengguna mengubah warna secara acak.User.ForeColour
:=SETF(GetRef(FillForegnd),"GUARD(INDEX(...))")
. Ini akan mengatur yangGUARD
diperlukan di area warna foreground.Semua solusi ini memanfaatkan karakteristik yang
SETF
dapat menimpa sel yang memilikiGUARD
, tetapi intervensi pengguna normal dalam GUI (bentuk area halaman) tidak bisa.sumber