I've always used that method to activate scripts in PlayerGui by making a BoolValue in Workspace or some other directory and have a script like this (This would be the script inside the PlayerGui).
Frame = script.Parent.Frame
Value = workspace.Value
while wait(.5) do
if Value.Value == true then
Frame.Visible = true
end
end
This isn't efficient, I've seen people control all Gui's with one script in Workspace. I could never figure out how they did it without annoying loops and values. I've been scripting with Lua for about a year now and still haven't figured this out.

3 comments
It depends on what you're trying to do.
Trying to activate say a Gui in player Gui's to come up on a screen but control it from a script in Workspace.
What you have is fine, but you should use a Changed event instead of a while loop. You could also just directly set the GUIs Visible property to the value's Value, without the if statements. If you want it to work with FilteringEnabled, then you could use a RemoteEvent.