Microsoft KB Archive/817358

= XL2002: The TextVisualLayout Parameter Is Not Available for the OpenText Method in Excel 2002 =

Article ID: 817358

Article Last Modified on 11/23/2006

-

APPLIES TO


 * Microsoft Excel 2002 Standard Edition

-





SYMPTOMS
If you use Microsoft Visual Basic for Applications (VBA) in Microsoft Excel 2000, the OpenText method has a parameter that is named TextVisualLayout. This parameter enables the programmer to specify the text layout for text files (right-to-left or left-to-right). The TextVisualLayout parameter is especially important if the text file that is going to be imported was written in code page 28598 (Hebrew ISO-Visual).

The TextVisualLayout parameter is not available in Excel 2002. As a result, the Hebrew text in text files that were written in code page 28598 (Hebrew ISO-Visual) appears reversed when the files are opened in Excel 2002.



WORKAROUND
Use one of the following methods to work around this problem:  === Workaround 1: Use the Convtext.exe Tool to Convert the Text Files ===

Use the Convtext.exe tool to convert the text files to the Hebrew (Microsoft Windows) text format, and then open the converted files in Excel 2002.

The Convtext.exe tool is included in the Hebrew version of Microsoft Office XP and is located in the following folder:

C:\Program Files\Common Files\Microsoft Shared\Office 10

For additional information about the potential issues that may occur when you use the Convtext.exe tool, click the following article number to view the article in the Microsoft Knowledge Base:

317256 OFFXP: Error Message: &quot;Problem Loading Bidi32.dll&quot; When You Start Convtext.exe in Arabic or Hebrew Version of Office XP

 === Workaround 2: Use a Microsoft Excel Macro to Reverse the Order of the Characters in the Text Files ===

If you have already imported the data to Microsoft Excel, use a macro to reverse the order of characters in right-to-left text. The following VBA sample code iterates through all cells in the used range on the active worksheet and reverses all strings that are made up of right-to-left characters.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, see the following Microsoft Web site:

https://partner.microsoft.com/global/30000104

For additional information about the support options available from Microsoft, visit the following Microsoft Web site:

http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Sub ReverseUsedRange Dim mychar As String Dim mynewstring As String Dim mycurstring As String Dim mycell As Range

For Each mycell In ActiveSheet.UsedRange If Not IsNumeric(mycell.Text) And mycell.Formula = mycell.Text Then mystring = mycell.Text 'start value for RTL state i = 1 textlen = Len(mystring) rtlstate = GetCharDirection(Mid(mystring, i, 1)) 'Loop through all characters in cell While i <= textlen mychar = Mid(mystring, i, 1) x = GetCharDirection(mychar) If x = rtlstate Or x = 0 Then mycurstring = mycurstring & mychar Else 'If RTL state is different then append the characters that were 'collected in mycurstring to mynewstring 'Reverse mycurstring if it contains RTL characters If rtlstate = 1 Or rtlstate = 0 Then mynewstring = mynewstring & mycurstring Else mynewstring = mynewstring & StrReverse(mytext) End If               mycurstring = mychar rtlstate = x           End If            i = i + 1 Wend 'Add the last characters that are still in mycurstring If rtlstate = 1 Or rtlstate = 0 Then mynewstring = mynewstring & mycurstring Else mynewstring = mynewstring & StrReverse(mycurstring) End If       'mycell.Offset(rowoffset:=0, columnoffset:=2).Value = mynewstring mycell.Value = mynewstring mynewstring = &quot;&quot; mycurstring = &quot;&quot; End If Next mycell End Sub Function GetCharDirection(mychar As String) As Integer 'Input value: One-character string 'Output value: 2 for right-to-left, 0 for neutral, 1 for left-to-right character 'Right to Left If AscW(mychar) >= 1424 And AscW(mychar) <= 1791 Then GetCharDirection = 2 'Neutral ElseIf InStr(1, &quot; .,;:-_?!+*)(/\}{][=<>|'&quot; & Chr(34), mychar, vbTextCompare) Then GetCharDirection = 0 Else 'Assume that all other characters will be left-to-right ones GetCharDirection = 1 End If End Function 



MORE INFORMATION
Note This article discusses complex scripts functionality. Complex scripts functionality is available when you use the Office Language Settings tool to enable a language, such as Arabic or Hebrew, that requires this functionality. For more information about multilingual features, click Microsoft  Help on the Help menu, type multilingual features in the Office Assistant or the Answer Wizard, and then click Searchto view the topics that are returned.



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

Keywords: kbpending kbmacroexample kbbug kbbidi KB817358

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.