Question

I am trying to replace the ascii character in a word file to its respected hexadecimal value but the problem is only uppercase characters that exist are replacing with proper values and lowercase characters are getting replaced with the uppercase entities.

I have tried this,

Dim var As String
            Dim char1 As String = "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ " & vbCrLf
            Dim values As Char() = objDoc.Range.Text
            For Each letter As Char In values
                If char1.Contains(letter) Then
                Else
                    var = Convert.ToString(Convert.ToInt32(letter), 16)
                    If var.Length = 1 Then
                        Dim FindObject2 As Word.Find = objDoc.Content.Find
                        With FindObject2
                            .ClearFormatting()
                            .Text = letter
                            .Replacement.ClearFormatting()
                            .Replacement.Text = "&#x000" & StrConv(var, VbStrConv.None) & ";"
                            .Execute(Replace:=Word.WdReplace.wdReplaceAll)
                        End With
                    ElseIf var.Length = 2 Then
                        Dim FindObject2 As Word.Find = objDoc.Content.Find
                        With FindObject2
                            .ClearFormatting()
                            .Text = letter
                            .Replacement.ClearFormatting()
                            .Replacement.Text = "&#x00" & StrConv(var, VbStrConv.None) & ";"
                            .Execute(Replace:=Word.WdReplace.wdReplaceAll)
                        End With
                    ElseIf var.Length = 3 Then
                        Dim FindObject2 As Word.Find = objDoc.Content.Find
                        With FindObject2
                            .ClearFormatting()
                            .Text = letter
                            .Replacement.ClearFormatting()
                            .Replacement.Text = "&#x0" & StrConv(var, VbStrConv.None) & ";"
                            .Execute(Replace:=Word.WdReplace.wdReplaceAll)
                        End With
                    End If
                End If
            Next
            Exit For
        Next
    Catch ex As Exception

    End Try

    objDoc.Save()
    objDoc.Close()
    objapp.Quit()

    MsgBox("Process Completed")

Any help will be really appreciated.

Was it helpful?

Solution

Please, avoid the usage of past decade VB6 methods while you are programming in VB.NET, methods such as HEX and ASC can be replaced with the methods provided by the Convert Class.

var = Convert.ToString(Convert.ToInt32(letter), 16)

And place your code here:

If char1.Contains(letter) Then
   ' Here the instructions to do when a character is found...
Else

An Example:

Dim AscChars As Char() =
    "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ " _
    & Environment.NewLine

Dim HexValue As String = String.Empty

Dim sb As New System.Text.StringBuilder

For Each c As Char In AscChars

    HexValue = Convert.ToString(Convert.ToInt32(c), 16)

    sb.Clear()
    sb.AppendLine(String.Format("ASC: {0}", CStr(c)))
    sb.AppendLine(String.Format("HEX: {0}", HexValue))

    MessageBox.Show(sb.ToString, "Character conversion")

Next c

OTHER TIPS

I guess you never do anything with a found char in charlist because:

If char1.Contains(letter) Then
Else
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top