2013-12-16 2 views
2

Я получаю файлы excel на некоторое время, которые, как правило, страдают от специального символа alt + 0160 после учетных записей. Обычно я просто заменяю его вручную, но в последнее время я стал ленивым и хочу заменить его, используя мой скрипт VBA. Этот скрипт используется для вставки нужных столбцов в нашу базу:Устранение неисправностей Chr (160) с помощью VBA в excel

Sub insert() 

    Dim sSql As String 
    Dim db As New ADODB.Connection 'Go to Tools, References and turn on ActiveX Data Objects 2.8 Library 
    db.Open "DSN=XXXX;uid=XXXX;pwd=XXXX" 'INSERT ORACLE NAME AND PASSWORD 

    For i = 2 To 92 'Change Rows where it starts and ends 

      strAccount = Replace(Trim(Range("a" & i).Text), Chr(160), "") 

      If IsNumeric(strAccount) Then 
        While Len(strAccount) < 8 
          strAccount = "0" & strAccount 
        Wend 
      Else 
        strAccount = UCase(strAccount) 
      End If 

    sSql = "insert into XXXXX (" 
    sSql = sSql & " BATCH_ID" 
    sSql = sSql & " , ACCOUNT " 
    sSql = sSql & " , ATTORNEY_ID" 
    sSql = sSql & " , ORG_ID" 
    sSql = sSql & " , TRANSACTION_DATE" 
    sSql = sSql & " , DATE_INSERTED" 
    sSql = sSql & " , TRANSACTION_CODE" 
    sSql = sSql & " , AMOUNT" 
    sSql = sSql & " , DESCRIPTION" 
    sSql = sSql & " , DEBTOR_SSN" 

    sSql = sSql & ") VALUES (" 
    sSql = sSql & " (SELECT MAX(BATCH_ID) FROM XXXX)" 
    sSql = sSql & " , '" & strAccount & "'" 
    sSql = sSql & " , (SELECT ATTY_ID FROM XXXX WHERE BATCH_ID = (SELECT MAX(BATCH_ID) FROM XXXXX))" 
    sSql = sSql & " , (SELECT ORGANIZATION_ID FROM XXXX WHERE BATCH_ID = (SELECT MAX(BATCH_ID) FROM XXXXX))" 
    sSql = sSql & " , TO_DATE ('" & Trim(Range("B" & i).Text) & "', 'MM/DD/YYYY') " 
    sSql = sSql & " , SYSDATE" 
    sSql = sSql & " , '" & Trim(Range("D" & i).Text) & "'" 'CHANGE TO COLUMN TRANSACTION CODE IS IN 
    sSql = sSql & " , '" & Replace(Replace(Replace(Replace(Trim(Range("C" & i).Text), "$", ""), ",", ""), ")", ""), "(", "") & "'" 
    sSql = sSql & " , '" & Replace(Trim(Range("H" & i).Text), "'", "''") & "'" 
    sSql = sSql & " , '" & Replace(Replace(Trim(Range("F" & i).Text), " ", ""), "-", "") & "'" 

    sSql = sSql & ")" 


    db.Execute sSql 

    DoEvents 
    Debug.Print i 

    Next i 
End Sub 

Теперь я сделал некоторые исследования и выяснил, что заменить эти символы, которые вы используете Chr (160). Я использовал это в своем Replace, но, похоже, это не делает трюк, учетные записи по-прежнему загружаются с этими ужасными специальными символами. Любая помощь будет принята с благодарностью.

ответ

1

Вот что я сделал для его решения. Я создал функцию, которая поможет в ситуации, и теперь она работает.

Function CleanText(strText As String) As String 
    If strText = "" Then 
     CleanText = "" 
    Else 
     strText = Replace(strText, "'", "''") 
     strText = Replace(strText, " ", "") 
     strText = Replace(strText, vbTab, " ") 
     strText = Replace(strText, vbCrLf, " ") 
     strText = Replace(strText, Chr(160), "") 
     CleanText = strText 
    End If 
End Function 
Смежные вопросы