上文我们说到如何用Excel来制作SuperMemo的词库,虽然能够解决一些问题,但是,词库格式一复杂的话,还是让人有点望词兴叹。现在,就让舍得来晒一晒上文中所用到的Excel中的宏,顺便一起来研究一下如何在这个宏的基础上增加一些自己的小设计:

首先我们打开上文中的SuperMemo词库转换工具,如果你没有下载的话,可以点击这里下载:BrsBox下载

这回舍得换了台电脑,用的是Excel2003,大家莫见怪啊。点击菜单“工具->宏->宏”,或按快捷键“Alt+F8”,就可以看到原先建好的两个宏:Sheet1.生成QA1,Sheet2.生成QA2。

 

选择“Sheet1.生成QA1”,然后点击右边的“编辑”按钮,我们来看一下这个宏的内容:

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)

For n = 1 To i
a.WriteLine (“Q: ” & Cells(n, 1))
a.WriteLine (“A: ” & Cells(n, 2))
a.WriteLine
Next
a.Close

MsgBox
“词库成功生成!注意生成的文本文件还需转换成中欧ISO的字符集才可以使用!”


End Sub

熟悉编程语言的一看就能明白这个宏编写的思路,i是用来判断总行数的。问题的关键在于a.WriteLine,这是用来给行首加上“Q:”或“A:”的,假如你的词库格式是“英文、中文1、中文2”,象模板1那样排成3列,那你只要在“a.WriteLine
(“A: ” & Cells(n, 2))”下面加一行“a.WriteLine (“A: ”
& Cells(n, 3))”,就可以实现:

 

Q:(英文)

 

A:(中文1)

 

A:(中文2)

这样的效果。这里的“1、2、3”指的是列数。”a.WriteLine (“A: ” &
Cells(n, 2))”中的“Cells(n, 2)”就是第n行第2列的单元格的内容,依此类推。

 

再来看看Sheet2.生成QA2里的内容:

Public Sub
生成QA2()
Dim i, n As Integer
Dim temp As String
i = [a65536].End(xlUp).Row ‘判断行数

‘生成文本文件
temp = ThisWorkbook.Path & “\QA词库2.txt”

Set fs =
CreateObject(“Scripting.FileSystemObject”)
Set a = fs.CreateTextFile(temp, True)

For n = 1 To i
Step 2
a.WriteLine (“Q: ” & Cells(n, 1))
a.WriteLine (“A: ” & Cells(n + 1, 1))
a.WriteLine
Next
a.Close

MsgBox
“词库成功生成!注意生成的文本文件还需转换成中欧ISO的字符集才可以使用!”

End Sub

前面的基本上一样,不同之处在于定义n的时候多了个”step 2″,这里的”step
2″就表示执行完一个循环的指令后向下跳2行再执行下一遍指令。我们仍以上面那种格式的词库为例,不过由3列变成了3行,分别为第一行英文,第二行是中文1,第三行是中文2。首先我们要将“step
2”改为“step 3”,然后在“a.WriteLine (“A: ” & Cells(n + 1,
1))”下加上一句“a.WriteLine (“A: ” & Cells(n + 2,
1))”,生成的结果和上例相同。

了解了其中的原理后,那就可以增加一点点变化了,比如说象这样的词库:

money
n.货币, 钱, 金钱
5mQni
new
adj.新的, 初见的, 更新的
nju:
together
adv.共同, 一起, 合起来, 集拢地
tE5^eTE
work
n.工作, 劳动, 操作, 职业, [物]功, 手工, 作品, 机件
wE:k

我们要把第三行的音标放在第一行后面,并加上音标字体的定义和中括号,那你可以将模板二做这样的修改:

For n = 1 To i
Step 3
a.WriteLine (“Q: ”
& Cells(n, 1)
& ”
[<font face=’Kingsoft Phonetic
Plain’>” & Cells(n + 2, 1)
&
“</FONT>]”)
a.WriteLine
(“A: ” & Cells(n + 1, 1))
a.WriteLine
Next
a.Close

注意本例中用到的是金山的音标字体,若词库用到的别的字体的,应将字体名称进行修改,切勿生搬硬套。

其实细分解一下,在a.WriteLine中,只不过是用“&”来把你要写入的内容拼凑起来而已,究竟怎么玩就看大家的自由发挥了。

至于ThisWorkbook则是用来定义两个宏的按钮的,可以带来一点点方便。如果你定义了其它的宏,倒是可以用来给每个宏增加一个按钮,具体的定义方式只要“依样画葫芦”即可。