--- sc/source/ui/vba//vbahelper.hxx	
+++ sc/source/ui/vba//vbahelper.hxx
@@ -35,8 +35,12 @@
 #ifndef SC_VBA_HELPER_HXX
 #define SC_VBA_HELPER_HXX
 
+#include <cppuhelper/implbase1.hxx>
 #include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/script/BasicErrorException.hpp>
 #include <docsh.hxx>
+#include <basic/sberrors.hxx>
 
 #define css com::sun::star
 #define oo org::openoffice
@@ -44,6 +48,7 @@ namespace org 
 {
 	namespace openoffice 
 	{
+
 		void dispatchRequests (css::uno::Reference< css::frame::XModel>& xModel,rtl::OUString & aUrl) ;
 		void dispatchRequests (css::uno::Reference< css::frame::XModel>& xModel,rtl::OUString & aUrl, css::uno::Sequence< css::beans::PropertyValue >& sProps ) ;
 		void implnCopy();
@@ -66,8 +71,172 @@ namespace org 
 		// contains an empty object reference
 		const css::uno::Any& aNULL();
 		void PrintOutHelper( const css::uno::Any& From, const css::uno::Any& To, const css::uno::Any& Copies, const css::uno::Any& Preview, const css::uno::Any& ActivePrinter, const css::uno::Any& PrintToFile, const css::uno::Any& Collate, const css::uno::Any& PrToFileName, css::uno::Reference< css::frame::XModel >& xModel, sal_Bool bSelection  );
+
+		rtl::OUString getAnyAsString( const css::uno::Any& pvargItem ) throw ( css::uno::RuntimeException );
+
+class Millimeter
+{
+//Factor to translate between points and hundredths of millimeters:
+private:
+	static const double factor;
+    
+	double m_nMillimeter;
+
+public:
+	Millimeter():m_nMillimeter(0) {}
+    
+	Millimeter(double mm):m_nMillimeter(mm) {}
+    
+	void set(double mm) { m_nMillimeter = mm; }
+	void setInPoints(double points) 
+	{ 
+		m_nMillimeter = points * 0.352777778; 
+		// 25.4mm / 72 
+	}
+      
+	void setInHundredthsOfOneMillimeter(double hmm)
+	{
+		m_nMillimeter = hmm / 100;
+	}
+    
+	double get()
+	{
+		return m_nMillimeter;
+	}
+	double getInHundredthsOfOneMillimeter()
+	{
+		return m_nMillimeter * 100;
+	}
+	double getInPoints()
+	{
+		return m_nMillimeter * 2.834645669; // 72 / 25.4mm
+	}    
+
+	static int getInHundredthsOfOneMillimeter(double points)
+	{
+		int mm = static_cast<int>(double(points * factor));
+		return mm;
+	}
+    
+	static double getInPoints(int _hmm)
+	{
+		float points = static_cast<float>(double(_hmm / factor));
+		return points;
+	}
+};
+class ShapeHelper
+{
+protected:
+	css::uno::Reference< css::drawing::XShape > xShape;
+public:
+	ShapeHelper( const css::uno::Reference< css::drawing::XShape >& _xShape) throw (css::script::BasicErrorException ) : xShape( _xShape )
+	{ 
+		if( !xShape.is() ) 
+			throw css::uno::RuntimeException( rtl::OUString::createFromAscii("No valid shape for helper"), css::uno::Reference< css::uno::XInterface >() );
+	}
+    
+	double getHeight()
+	{
+        	return  Millimeter::getInPoints(xShape->getSize().Height);
+    	}
+
+
+    	void setHeight(double _fheight) throw ( css::script::BasicErrorException )
+	{
+		try
+		{
+			css::awt::Size aSize = xShape->getSize();
+			aSize.Height = Millimeter::getInHundredthsOfOneMillimeter(_fheight);
+			xShape->setSize(aSize);
+		}
+		catch ( css::uno::Exception& /*e*/)
+		{
+			throw css::script::BasicErrorException( rtl::OUString(), css::uno::Reference< css::uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() );
+    		}
+	}
+    
+    
+	double getWidth()
+	{ 
+		return Millimeter::getInPoints(xShape->getSize().Width);
+    	}
+
+	void setWidth(double _fWidth) throw ( css::script::BasicErrorException )
+	{
+		try
+		{
+			css::awt::Size aSize = xShape->getSize();
+			aSize.Width = Millimeter::getInHundredthsOfOneMillimeter(_fWidth);
+			xShape->setSize(aSize);
+		}
+		catch (css::uno::Exception& /*e*/)
+		{
+			throw css::script::BasicErrorException( rtl::OUString(), css::uno::Reference< css::uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() );
+		}
+	}
+    
+    
+	double getLeft()
+	{
+		return Millimeter::getInPoints(xShape->getPosition().X);
+	}
+
+    
+	void setLeft(double _fLeft)
+	{
+		css::awt::Point aPoint = xShape->getPosition();
+		aPoint.X = Millimeter::getInHundredthsOfOneMillimeter(_fLeft);
+		xShape->setPosition(aPoint);
+	}
+    
+
+	double getTop()
+	{
+        	return Millimeter::getInPoints(xShape->getPosition().Y);
+	}
+
+    
+	void setTop(double _fTop)
+	{
+		css::awt::Point aPoint = xShape->getPosition();
+		aPoint.Y = Millimeter::getInHundredthsOfOneMillimeter(_fTop);
+		xShape->setPosition(aPoint);
+	}
+    
+};
+
+class ContainerUtilities
+{
+
+public: 
+	static rtl::OUString getUniqueName( const css::uno::Sequence< ::rtl::OUString >&  _slist, const rtl::OUString& _sElementName, const ::rtl::OUString& _sSuffixSeparator);
+	static rtl::OUString getUniqueName( const css::uno::Sequence< rtl::OUString >& _slist, const rtl::OUString _sElementName, const rtl::OUString& _sSuffixSeparator, sal_Int32 _nStartSuffix );
+
+	static sal_Int32 FieldInList( const css::uno::Sequence< rtl::OUString >& SearchList, const rtl::OUString& SearchString );
+};
+
+// really just a a place holder to ease the porting pain
+class DebugHelper
+{
+public:
+	static void exception( const rtl::OUString&  DetailedMessage, const css::uno::Exception& ex,  int err, const rtl::OUString& /*additionalArgument*/ ) throw( css::script::BasicErrorException )
+	{
+		// #TODO #FIXME ( do we want to support additionalArg here )
+		throw css::script::BasicErrorException( DetailedMessage.concat( rtl::OUString::createFromAscii(" ") ).concat( ex.Message ), css::uno::Reference< css::uno::XInterface >(), err, rtl::OUString() );
+	}
+
+	static void exception( int err,  const rtl::OUString& additionalArgument ) throw( css::script::BasicErrorException )
+	{
+		exception( rtl::OUString(), css::uno::Exception(), err, additionalArgument );
+	}
+
+	static void exception( css::uno::Exception& ex ) throw( css::script::BasicErrorException )
+	{
+		exception( rtl::OUString(), ex, SbERR_INTERNAL_ERROR, rtl::OUString() );
 	}
-}
+};
+	} // openoffice
+} // org
 
 #ifdef DEBUG
 #  define SC_VBA_FIXME(a) OSL_TRACE( a )
