我的VB宏有问题。
我的代码可以:
它确实适用于约翰·史密斯(John Smith)这样的标准名称,但是当我有一些特殊名称(例如FrançoisBénét)时,它就没有作用。代替é出现在文档中。我还遇到一个问题,如果检查的名称也包含一些特殊字符,则它在CSV中找不到任何内容...但是为此,我可以找到一种解决方法。
尝试使用其他CSV格式...像UTF8。但是在那种情况下,我会收到错误3265 ...
'Répertoire
directory = "W:\Tous\DigitRHTemp\"
FileName = "BaseSignatureTest.csv"
'Ouverture de la connexion CSV
Set rs = CreateObject("ADODB.Recordset")
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & directory & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited;CharacterSet=850"";"
strSQL = "SELECT * FROM " & FileName
rs.Open strSQL, strcon, 3, 3
rs.MoveFirst
'Passer au travers des colonnes
Do
'Mise en variable des valeurs
col1 = rs("Nom")
col2 = rs("Fonction")
col3 = rs("DPT")
col4 = rs("Titre")
col5 = rs("Signature")
rs.MoveNext
'Si une valeur a été trouvée et qu'elle corresponds, définition des valeurs
If col1 = RHREF Then
'***
'--- Populer les signets Signatures 1
'***
'Test si signet exist dans le document
If ActiveDocument.Bookmarks.Exists("RHRefInt") = True Then
'Si oui - Position sur le signet
Selection.GoTo What:=wdGoToBookmark, Name:="RHRefInt"
'Insére le text
Selection.TypeText Text:=col4
End If
If ActiveDocument.Bookmarks.Exists("RHRefNom") = True Then
Selection.GoTo What:=wdGoToBookmark, Name:="RHRefNom"
Selection.TypeText Text:=col1
End If
End If
Loop Until rs.EOF
是否添加了一些参数以具有正确的法语字符格式(é,à,è,ç等)?
答案 0 :(得分:0)
我已经尽了很大的努力(谢谢Mathieu Guindon)。
因此,用特殊字符显示部门,标题和名称的部分可以正常工作(甚至比我的代码的先前版本还快)。
我按照建议使用ADODB.Stream,并通过在UTF-8中强制打开CSV打开
'Définition de l'objet
Dim objStream, strData
'Création d'un objet ADODB Stream
Set objStream = CreateObject("ADODB.Stream")
'Définition format en Utf-8
objStream.Charset = "utf-8"
'Ouverture de l'objet
objStream.Open
'Load du fichier
objStream.LoadFromFile ("W:\Tous\DigitRHTemp\BaseSignatureTest.csv")
'Définition du ligne par ligne
objStream.LineSeparator = 10
'Ouvrir chaque ligne jusqu'à la dernière ligne du fichier
Do Until objStream.EOS
'Défintion du texte à lire (ligne complète)
strData = objStream.ReadText(-2)
'Définition pour la partie valeur par valeur - sépare la ligne en valeur
Dim LArray() As String
'Sépare la valeur en se basant sur la virgule ","
LArray = Split(strData, ",")
'Si une valeur a été trouvée et qu'elle corresponds, définition des valeurs
If LArray(0) = RHSignature1 Then
'***
'--- Populer les signets Signatures 1
'***
'Test si signet exist dans le document
If ActiveDocument.Bookmarks.Exists("RHSign1Nom") = True Then
'Si oui - Position sur le signet
Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1Nom"
'Insére le text
Selection.TypeText Text:=LArray(0)
End If
If ActiveDocument.Bookmarks.Exists("RHSign1DPT") = True Then
Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1DPT"
Selection.TypeText Text:=LArray(1)
End If
If ActiveDocument.Bookmarks.Exists("RHSign1Fonction") = True Then
Selection.GoTo What:=wdGoToBookmark, Name:="RHSign1Fonction"
Selection.TypeText Text:=LArray(2)
End If
End If
'Fermeture de la boucle
Loop
'fermeture du objstream
objStream.Close