最近在尝试用excel来制作一个英语词库生成工具,具体是在sheet中放入英语单词,中文解释,英标。然后通过VBA将他们解析为格式固定的txt文件,最后导入到背单词的软件中。在这个过程中,遇到了一些问题:当使用VBA提取excel单元格中的英标内容时,经常出现乱码。
  
  如图,在excel单元格中英标是正常显示的:
  
  
  但如下图,通过vba编码提取单元格中的英标时,时常出现乱码,这里显示的是solemn中的英标(excel中的第二行第三列)
    在此请教一下各位,如何正确的提取excel表单中的英标?
 
  附上程序代码,程序十分简单还在完善阶段。
  
   Public Sub 生成QA1()Dim i, n As Integer
Dim temp As String
i = [a65536].End(xlUp).Row '判断行数
'生成文本文件
temp = ThisWorkbook.Path & "\QA词库1.txt"Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(temp, True)
'Call AddFontResource("Ksphonet.ttf")For n = 1 To i
a.writeline ("Q: " & Cells(n, 1) & Cells(n,3))
Dim str As Variant
str = Split(Cells(n, 2), Chr(10)) 'chr(10)回车符
For i = 0 To UBound(str)a.writeline ("A: " & str(i))Next i'a.WriteLine ("A: " & Cells(n, 2))
a.writelineNext
a.CloseMsgBox "词库成功生成!注意生成的文本文件还需转换成中欧ISO的字符集才可以使用!"End Sub  

解决方案 »

  1.   

    file:///C:/Documents%20and%20Settings/Administrator/桌面/excel.jpg//这个是绝对看不到的..................
      

  2.   


    多谢MY兄提醒。抱歉抱歉,第一次发图片贴,还不熟悉。现在补上图片。请大家指教:第一张图如下:
    第二张图如下:
    http://hi.csdn.net/attachment/201012/24/59088_1293166184EGeW.jpg
      

  3.   


      这个我也有研究国,只是刚刚接触VBA,一切都还不熟悉.不知道怎么在VBA下引进字体,也不知道如何将字符串设置成该类字体。所以才上来请教大家,如果能有源代码贴出来就更好了,多谢多谢
      

  4.   


    我感觉并不是EXCEL的问题,因为英标符号在excel中能够正常显示。只是通过VBA读取单元格的内容时才发生乱码,具体参见我的第二张截图。
      

  5.   


    数据本身就是从excel的单元格中提取出來的,应该不需要再写回到excel中看字体吧?!
      

  6.   

    你是取英标啊还是取字体啊?
    既然是取英标,看一眼字体能咋了?
    你显示的时候用跟EXCEL里面一样的字体就能显示出来
      

  7.   

      泰山,实话说,我不是很明白你的意思哈。你是要我看看excel中英标用的是什么字体么?我是用vba读取excel单元格中的英语英标,然后写到txt文件中。excel中英标是正常显示的,字体是宋体(我的excel中也有Kingsoft Phonetic Plain字体)。vba读单元格的时候就不知道用的是什么字符集了。另外一点是,excel能正常显示,但是在vba调试台中打出来的字符是乱码。具体可以看看我发的那两张图哈。
      

  8.   

    看看excel中英标用的是什么字体
    VB的菜单:工具-》选项-》编辑器格式 里面可以设置成相同的字体
    最终保存的时候也必须使用同一种字体
    否则肯定乱码
      

  9.   

    要想在应用程序(如VB程序)中显示其他字体,必须先安装字体文件(.FON,.FNT,.TTF等格式)。直接读取excel文件中的音标是不会显示的。
    具体方法:打开控制面板—字体,点文件—安装新字体,在打开的对话框中选择你解压后的字体所在的位置(先选择驱动器,然后再选择文件夹),在字体列表中选择你要安装的字体(一定要选),确定就行了。这种方法可用程序实现:
    Call AddFontResource("xxx.ttf") 'xxx为字体文件名 
    Call SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)另外,在VB的text中显示其他字体的例子:
    text1.Font=“font.ttf”  '设置字体
    text1.text="xxx"还有一个有用的函数chr,比如Chr(-24082)为五角星,此函数用于得到双字节字符集(DBCS:double-byte character set)代码对应的字符。以上信息希望对你有帮助。引用自:http://zhidao.baidu.com/question/66307630.html
      

  10.   

    经过测试,使用ASCW()函数知悉所有音标都正确传过来了,问题只在于 Unicode 字符的显示问题请参考此贴:http://topic.csdn.net/t/20030404/21/1620911.html
      

  11.   

    音标需要用到ksphonetic.ttf(金山的英文音标显示字体),或IpaPanADD字体,或SILDoulos IPA93字体
      

  12.   


      兄弟一共回了两个贴。我在这里一并回答一下。百度知道上的这个信息我一早就搜索到了,当时也认为自己找到了解决的办法。可惜经过实验,没有解决问题(也许是我应用错误,兄弟可以贴出完整代码,这样更加直观)。此外百度知道上该回答的信息并不完全。AddFontResource还需和其他的函数一块使用,这里只给出了一个函数。
       另一个回帖提到的ASW函数,我之前也有用过。遇到乱码的字符串,立刻报错,原因不明。兄弟既然已经测试通过了,可否将代码贴出来我参考一下。
       yiguangqiang88兄,是第一个认真尝试帮我解决问题的朋友,如此用心,小弟非常感谢!
       
      

  13.   

    http://blog.163.com/e4lich@126/blog/static/84810650200972613829249/
    不知道这个有没有用……
      

  14.   

    VbExcell.Cells(i, j + 3).Font.Size = 9
    VbExcell.Cells(i, j + 3).Font.Name = "Symbol" '或你自带的.ttf字体
    在代码中你必需要激活这个字体Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
    Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long'增加字体:
    Call AddFontResource("c:\myApp\myFont.ttf")'删除字体:
    Call RemoveFontResource("c:\myApp\myFont.ttf")
      

  15.   


     兄弟有心了,多谢,但是与字体无关。经过我的一天的实验,乱码涉及到ANSI与Unicode的映射以及windows的代码页。现在问题已经解决了。
      

  16.   


      这是因为中文的操作系统下VBA代码编辑窗口用的是默认的字符编码GB2312,该套字符编码是ANSI码的汉字扩展版。国际英标字符没有包含在这套字符集中(即GB2312)。文本数据中如果出现编码方案未定义的字符,Windows就会使用缺省字符,通常是?(如果我没说明白的話,兄弟可以自己去查询一下关于windows代码页的资料)
      

  17.   

    很支持
    我在写我的Palm PDA的ZDic的词典时也遇到了显示不正确的问题。但是正如19楼所说,只需要导入即可。只是显示时的字体问题。不用担心
      

  18.   

    我是楼主。很久没上来了,解决办法就是在VBA中用unicode的方式打开文件,再写入到指定的txt文件中。