✓ Accepted answer
Not sure why do you need to set a value in workspace to a text from a player's gui. Generally you shouldn't do that, but since you didn't provide any more details, do the following:
Connect to the Q1:GetPropertyChangedSignal("Text") event of the Q1. Inside the event handler fire a remote which will set the value of the "thing" to the text.
Example:
Client
local plr = game:GetService("Players").LocalPlayer
local remote = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
local Q1 = plr.PlayerGui.Answer.Frame.Q1
Q1:GetPropertyChangedSignal("Text"):Connect(function()
remote:FireServer(Q1.Text)
end)
Server
local remote = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")
remote.OnServerEvent:Connect(function(plr, text)
workspace.thing.Value = text
end)
2 comments
try using a GetPropertyChanged signal function and a Remote Event instead of an infinite loop
game,Players?