Index: sc/source/core/tool/rangelst.cxx
===================================================================
RCS file: /cvs/sc/sc/source/core/tool/rangelst.cxx,v
retrieving revision 1.10
diff -u -p -r1.10 rangelst.cxx
--- sc/source/core/tool/rangelst.cxx	27 Feb 2007 12:18:02 -0000	1.10
+++ sc/source/core/tool/rangelst.cxx	23 Oct 2007 14:35:47 -0000
@@ -109,15 +109,18 @@ USHORT ScRangeList::Parse( const String&
 		for ( USHORT i=0; i<nTCount; i++ )
 		{
 			aOne = rStr.GetToken( i, cDelimiter );
-			// FIXME : broken for Lotus
-			if ( aOne.Search( ':' ) == STRING_NOTFOUND )
-			{	// Range muss es sein
-				String aStrTmp( aOne );
-				aOne += ':';
-				aOne += aStrTmp;
-			}
 			aRange.aStart.SetTab( nTab );	// Default Tab wenn nicht angegeben
-			USHORT nRes = aRange.Parse( aOne, pDoc, eConv );
+			USHORT nRes = aRange.ParseAny( aOne, pDoc, eConv );
+			USHORT nEndRangeBits = SCA_VALID_COL2 | SCA_VALID_ROW2 | SCA_VALID_TAB2;
+			// nRes & (SCA_VALID_TAB | SCA_VALID_COL | SCA_VALID_ROW | SCA_TAB_3D | SCA_TAB_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_COL_ABSOLUTE);
+			USHORT nTmp1 = ( nRes & 0x070f );
+			USHORT nTmp2 = ( nRes & nEndRangeBits );
+			// If we have a valid single range with
+			// any of the address bits we are interested in
+			// set - set the equiv end range bits
+			if ( (nRes & SCA_VALID ) && nTmp1 && ( nTmp2 != nEndRangeBits ) )
+					nRes |= ( nTmp1 << 4 );
+	
 			if ( (nRes & nMask) == nMask )
 				Append( aRange );
 			nResult &= nRes;		// alle gemeinsamen Bits bleiben erhalten
