--- sc/source/ui/vba//vbaworksheets.cxx	
+++ sc/source/ui/vba//vbaworksheets.cxx
@@ -67,22 +67,23 @@ using namespace ::com::sun::star;
 class SheetsEnumeration : public EnumerationHelperImpl
 {
 	uno::Reference< frame::XModel > m_xModel;
+	uno::WeakReference< vba::XHelperInterface > m_xParent;
 public:
-	SheetsEnumeration( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< container::XEnumeration >& xEnumeration,  const uno::Reference< frame::XModel >& xModel  ) throw ( uno::RuntimeException ) : EnumerationHelperImpl( xContext, xEnumeration ), m_xModel( xModel ) {}
+	SheetsEnumeration( const uno::Reference< vba::XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< container::XEnumeration >& xEnumeration,  const uno::Reference< frame::XModel >& xModel  ) throw ( uno::RuntimeException ) : EnumerationHelperImpl( xContext, xEnumeration ), m_xModel( xModel ), m_xParent( xParent ) {}
 
 	virtual uno::Any SAL_CALL nextElement(  ) throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) 
 	{ 
 		uno::Reference< sheet::XSpreadsheet > xSheet( m_xEnumeration->nextElement(), uno::UNO_QUERY_THROW );
-		return uno::makeAny( uno::Reference< excel::XWorksheet > ( new ScVbaWorksheet( m_xContext, xSheet, m_xModel ) ) );
+		return uno::makeAny( uno::Reference< excel::XWorksheet > ( new ScVbaWorksheet( m_xParent, m_xContext, xSheet, m_xModel ) ) );
 	}
 
 };
 
-ScVbaWorksheets::ScVbaWorksheets( const uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext, const uno::Reference< sheet::XSpreadsheets >& xSheets, const uno::Reference< frame::XModel >& xModel ): ScVbaWorksheets_BASE( xContext, uno::Reference< container::XIndexAccess >( xSheets, uno::UNO_QUERY ) ), mxModel( xModel ), m_xSheets( xSheets ) 
+ScVbaWorksheets::ScVbaWorksheets( const uno::Reference< vba::XHelperInterface >& xParent, const uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext, const uno::Reference< sheet::XSpreadsheets >& xSheets, const uno::Reference< frame::XModel >& xModel ): ScVbaWorksheets_BASE( xParent, xContext, uno::Reference< container::XIndexAccess >( xSheets, uno::UNO_QUERY ) ), mxModel( xModel ), m_xSheets( xSheets ) 
 {
 }
 
-ScVbaWorksheets::ScVbaWorksheets( const uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext, const uno::Reference< container::XEnumerationAccess >& xEnumAccess, const uno::Reference< frame::XModel >& xModel  ):  ScVbaWorksheets_BASE( xContext, uno::Reference< container::XIndexAccess >( xEnumAccess, uno::UNO_QUERY ) ), mxModel(xModel) 
+ScVbaWorksheets::ScVbaWorksheets( const uno::Reference< vba::XHelperInterface >& xParent, const uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext, const uno::Reference< container::XEnumerationAccess >& xEnumAccess, const uno::Reference< frame::XModel >& xModel  ):  ScVbaWorksheets_BASE( xParent, xContext, uno::Reference< container::XIndexAccess >( xEnumAccess, uno::UNO_QUERY ) ), mxModel(xModel) 
 {
 }
 
@@ -102,14 +103,14 @@ ScVbaWorksheets::createEnumeration() thr
 		return xAccess->createEnumeration(); 
 	}
 	uno::Reference< container::XEnumerationAccess > xEnumAccess( m_xSheets, uno::UNO_QUERY_THROW );
-	return new SheetsEnumeration( m_xContext, xEnumAccess->createEnumeration(), mxModel );
+	return new SheetsEnumeration( this, mxContext, xEnumAccess->createEnumeration(), mxModel );
 }
 
 uno::Any
 ScVbaWorksheets::createCollectionObject( const uno::Any& aSource )
 {
 	uno::Reference< sheet::XSpreadsheet > xSheet( aSource, uno::UNO_QUERY );
-	return uno::makeAny( uno::Reference< excel::XWorksheet > ( new ScVbaWorksheet( m_xContext, xSheet, mxModel ) ) ); 
+	return uno::makeAny( uno::Reference< excel::XWorksheet > ( new ScVbaWorksheet( getParent(), mxContext, xSheet, mxModel ) ) );
 }
 
 // XWorksheets
@@ -136,7 +137,7 @@ ScVbaWorksheets::Add( const uno::Any& Be
 	if (!aStringSheet.getLength())
 	{
 		aStringSheet = ScVbaGlobals::getGlobalsImpl( 
-			m_xContext )->getApplication()->getActiveWorkbook()->getActiveSheet()->getName();
+			mxContext )->getApplication()->getActiveWorkbook()->getActiveSheet()->getName();
 		bBefore = sal_True;
 	}
 		nCount = static_cast< SCTAB >( m_xIndexAccess->getCount() );
@@ -247,7 +248,24 @@ ScVbaWorksheets::getItemByStringIndex( c
 {
 	String sScIndex = sIndex;
 	ScDocument::ConvertToValidTabName( sScIndex, '_' );
-	return ScVbaCollectionBaseImpl::getItemByStringIndex( sScIndex );
+	return ScVbaWorksheets_BASE::getItemByStringIndex( sScIndex );
 }
 
+rtl::OUString& 
+ScVbaWorksheets::getServiceImplName()
+{
+	static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaWorksheets") );
+	return sImplName;
+}
 
+css::uno::Sequence<rtl::OUString> 
+ScVbaWorksheets::getServiceNames()
+{
+	static uno::Sequence< rtl::OUString > sNames;
+	if ( sNames.getLength() == 0 )
+	{
+		sNames.realloc( 1 );
+		sNames[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("org.openoffice.excel.Worksheets") );
+	}
+	return sNames;
+}
