XL2002: The TextVisualLayout Parameter Is Not Available for the OpenText Method in Excel 2002 (817358)



The information in this article applies to:

  • Microsoft Excel 2002

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: "Problem Loading Bidi32.dll" 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: For additional information about the support options available from Microsoft, visit the following Microsoft Web site:
    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 = ""
            mycurstring = ""
        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, " .,;:-_?!+*)(/\}{][=<>|'" & 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 your Office product 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.

Modification Type:MinorLast Reviewed:9/27/2006
Keywords:kbpending kbmacroexample kbBug kbBidi KB817358 kbAudDeveloper