diff --git a/scribus/plugins/scriptplugin/cmdtext.cpp b/scribus/plugins/scriptplugin/cmdtext.cpp
index f09c93848..a2dab83ff 100644
--- a/scribus/plugins/scriptplugin/cmdtext.cpp
+++ b/scribus/plugins/scriptplugin/cmdtext.cpp
@@ -17,7 +17,6 @@ for which a new license (GPL+exception) is in place.
 #include "selection.h"
 #include "util.h"
 
-
 template<typename T>
 class ApplyCharstyleHelper
 {
@@ -1149,18 +1148,58 @@ PyObject *scribus_settextfill(PyObject* /* self */, PyObject* args)
 		return nullptr;
 	if (!checkHaveDocument())
 		return nullptr;
-	PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
+	PageItem *item = GetUniqueItemAsText(QString::fromUtf8(Name));
 	if (item == nullptr)
-		return nullptr;
-	if (!item->isTextFrame() && !item->isPathText())
 	{
-		PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot set text fill on a non-text frame.","python error").toLocal8Bit().constData());
+		PyErr_SetString(WrongFrameTypeError, QObject::tr("Can only set text color on an item that behaves as a text frame.","python error").toLocal8Bit().constData());
 		return nullptr;
 	}
 	ApplyCharstyleHelper<QString>(item, QString::fromUtf8(Color)).apply(&CharStyle::setFillColor, 0, item->itemText.length());
 	Py_RETURN_NONE;
 }
 
 PyObject *scribus_settextstroke(PyObject* /* self */, PyObject* args)
 {
 	char *Name = const_cast<char*>("");
diff --git a/scribus/plugins/scriptplugin/cmdutil.cpp b/scribus/plugins/scriptplugin/cmdutil.cpp
index bbb26392d..6a1ddb643 100644
--- a/scribus/plugins/scriptplugin/cmdutil.cpp
+++ b/scribus/plugins/scriptplugin/cmdutil.cpp
@@ -6,6 +6,7 @@ for which a new license (GPL+exception) is in place.
 */
 
 #include "cmdutil.h"
+#include "pageitem_table.h"
 #include "prefsmanager.h"
 #include "resourcecollection.h"
 #include "scpage.h"
@@ -109,6 +110,26 @@ PageItem* GetUniqueItem(const QString& name)
 	return getPageItemByName(name);
 }
 
+PageItem* GetUniqueItemAsText(const QString& name)
+{
+	PageItem * item = GetUniqueItem(name);
+
+	if (item == nullptr)
+		return nullptr;
+
+	if (!item->isTextFrame() && !item->isPathText() && !item->isTable())
+		return nullptr;
+
+	if (item->isTable())
+	{
+		auto tableItem = item->asTable();
+		const auto& cell = tableItem->activeCell();
+		item = static_cast<PageItem *>(cell.textFrame());
+	}
+
+	return item;
+}
+
 PageItem* getPageItemByName(const QString& name)
 {
 	if (name.length() == 0)
diff --git a/scribus/plugins/scriptplugin/cmdutil.h b/scribus/plugins/scriptplugin/cmdutil.h
index fc2f3f2cd..642fc3699 100644
--- a/scribus/plugins/scriptplugin/cmdutil.h
+++ b/scribus/plugins/scriptplugin/cmdutil.h
@@ -43,6 +43,13 @@ void ReplaceColor(const QString& col, const QString& rep);
  */
 PageItem* GetUniqueItem(const QString& name);
 
+/*!
+ * @brief Returns PageItem if GetUniqueItem returns a PageItem that can be used as a TextFrame.
+ *
+ * @author 2024-02-08 ale rimoldi
+ */
+PageItem* GetUniqueItemAsText(const QString& name);
+
 /*!
  * @brief Returns named PageItem, or exception and NULL if not found.
  *
