--- basic.orig/source/sbx/sbxvalue.cxx	2006-10-12 15:34:49.000000000 +0100
+++ basic/source/sbx/sbxvalue.cxx	2006-11-16 12:40:07.000000000 +0000
@@ -64,7 +64,7 @@
 #include "sbx.hxx"
 #include "sbxconv.hxx"
 #include <math.h>
-
+#include "runtime.hxx"
 // AB 29.10.99 Unicode
 #ifndef _USE_NO_NAMESPACE
 using namespace rtl;
@@ -1125,6 +1125,8 @@ BOOL SbxValue::Convert( SbxDataType eTo 
 
 BOOL SbxValue::Compute( SbxOperator eOp, const SbxValue& rOp )
 {
+	bool bVBAInterop =  SbiRuntime::isVBAEnabled(); 
+
 	SbxDataType eThisType = GetType();
 	SbxDataType eOpType = rOp.GetType();
 	SbxError eOld = GetError();
@@ -1138,7 +1140,9 @@ BOOL SbxValue::Compute( SbxOperator eOp,
 	else if( eThisType == SbxNULL || eOpType == SbxNULL )
 		SetType( SbxNULL );
 	// Sonderregel 2: Ist ein Operand Empty, ist das Ergebnis der 2. Operand
-	else if( eThisType == SbxEMPTY )
+	else if( eThisType == SbxEMPTY 
+	&& !bVBAInterop 
+	)
 		*this = rOp;
 	// 13.2.96: Nicht schon vor Get auf SbxEMPTY pruefen
 	else
@@ -1442,6 +1446,8 @@ Lbl_OpIsEmpty:
 
 BOOL SbxValue::Compare( SbxOperator eOp, const SbxValue& rOp ) const
 {
+	bool bVBAInterop =  SbiRuntime::isVBAEnabled(); 
+
 	BOOL bRes = FALSE;
 	SbxError eOld = GetError();
 	if( eOld != SbxERR_OK )
@@ -1458,10 +1464,13 @@ BOOL SbxValue::Compare( SbxOperator eOp,
 	// Sonderregel 2: Wenn beide Variant sind und einer ist numerisch,
 	// und der andere ein String, ist num < str
 	else if( !IsFixed() && !rOp.IsFixed()
-	 && ( rOp.GetType() == SbxSTRING && GetType() != SbxSTRING && IsNumeric() ) )
+	 && ( rOp.GetType() == SbxSTRING && GetType() != SbxSTRING && IsNumeric() ) && !bVBAInterop 
+	)
 		bRes = BOOL( eOp == SbxLT || eOp == SbxLE || eOp == SbxNE );
 	else if( !IsFixed() && !rOp.IsFixed()
-	 && ( GetType() == SbxSTRING && rOp.GetType() != SbxSTRING && rOp.IsNumeric() ) )
+	 && ( GetType() == SbxSTRING && rOp.GetType() != SbxSTRING && rOp.IsNumeric() ) 
+&& !bVBAInterop 
+	)
 		bRes = BOOL( eOp == SbxGT || eOp == SbxGE || eOp == SbxNE );
 	else
 	{
--- /data4/sles/ooo-build-NEWEST-Latest/ooo-build/build/ooe680-m2/basic/source/sbx/sbxvalue.cxx	2006-11-16 18:11:59.000000000 +0000
+++ basic/source/sbx/sbxvalue.cxx	2006-11-21 14:35:55.000000000 +0000
@@ -1149,7 +1149,7 @@ BOOL SbxValue::Compute( SbxOperator eOp,
 	{
 		SbxValues aL, aR;
 		bool bDecimal = false;
-		if( eThisType == SbxSTRING || eOp == SbxCAT )
+		if( eThisType == SbxSTRING || eOp == SbxCAT || ( bVBAInterop && ( eOpType == SbxSTRING ) && (  eOp == SbxPLUS ) ) )
 		{
 			if( eOp == SbxCAT || eOp == SbxPLUS )
 			{
@@ -1207,7 +1207,10 @@ BOOL SbxValue::Compute( SbxOperator eOp,
 			if( rOp.Get( aR ) )
 			{
 				if( rOp.GetType() == SbxEMPTY )
-					goto Lbl_OpIsEmpty;
+				{
+					if ( !bVBAInterop || ( bVBAInterop && ( eOp != SbxNOT  ) ) )
+						goto Lbl_OpIsEmpty;
+				}
 				if( Get( aL ) ) switch( eOp )
 				{
 					case SbxIDIV:
@@ -1396,7 +1399,10 @@ BOOL SbxValue::Compute( SbxOperator eOp,
 			if( rOp.Get( aR ) )
 			{
 				if( rOp.GetType() == SbxEMPTY )
-					goto Lbl_OpIsEmpty;
+				{
+					if ( !bVBAInterop || ( bVBAInterop && ( eOp != SbxNEG ) ) )
+						goto Lbl_OpIsEmpty;
+				}
 				if( Get( aL ) )
 				{
 					switch( eOp )
