我参考黄海同志做的《发票套打程序.mdb》,把wrod模板上相应位置的字体替换为相应表字段里的数据。
做的一直很顺利,但遇到一个表字段数据比较多(大约有四五百字符,字符小于255个就是正常的)就出现了问题,代码如下,望大大们指点迷津:    sqlStr = "select * from Policy_SP_Clause where [policy_sbj_id]='" & Me.id.Value & "'"
    Set rs = CurrentDb.OpenRecordset(sqlStr)
        For N = 1 To 8    '8条Clause明细记录处理
        policy_sublimits = rs.Fields("policy_sublimits")
        clause_descr_en = rs.Fields("clause_descr_en")
        
            .Text = "[" & "policy_sublimits" & N & "]"
            .Replacement.Text = Nz(IIf(rs.EOF, "", policy_sublimits), "") 
 '          .Replacement.Text = Nz(IIf(rs.EOF, "", rs!policy_sublimits), "") 
            .Execute , , , , , , , , , , 2    '全部查找和替换            .Text = "[" & "clause_descr_en" & N & "]"
            .Replacement.Text = Nz(IIf(rs.EOF, "", clause_descr_en), "")
'           .Replacement.Text = Nz(IIf(rs.EOF, "", rs!clause_descr_en), "") '直接读取仍不行
            .Execute , , , , , , , , , , 2
            If Not rs.EOF Then rs.MoveNext
            Next代码说明:
    当表字段“clause_descr_en”里字符小于255个时,正常把word里“[clause_descr_en]”替换掉;当大于255个字符时,word模板上“[clause_descr_en]”却被表字段“policy_sublimits”内容所替换。
    

解决方案 »

  1.   

    其中表字段“policy_sublimits”字符数不会大于100个!
      

  2.   

    我把该小功能从项目中提出来,方便大大们浏览。下面是下载地址,望大牛有时间帮俺看看。
    源文件下载地址:
      http://access911.net/csdn/FileDescription.asp?mdb=2009-7-19&id=38&mode=3
    最新(上述链接的源文件)代码说明:'[id]=1时,表字段"template_content_en"字符数小于255,一切正常
    '    sqlStr = "Select * from Policy_SP_Clause_Template where [id]=1"''[id]=2时,表字段"template_content_en"字符数大于255,异常(出现上述所描述的现象)
        sqlStr = "Select * from Policy_SP_Clause_Template where [id]=2"
      

  3.   

    255这个数字应该会提示你某些问题,是不是access中的字串变量不能超过255字符呢?
      

  4.   

    没有任何提示的。并且我是把值放入一个String变量中的,String最大值可以是64K(大约六万多字符)
      

  5.   

    你有没有测试一下将变量赋一个超过255字符的定值,例如 : Str=1....xxxxxxxx....255然后单独试试
      

  6.   

    试过的,只要超过255字符替换word模板时都会有上述异常。
    ===================================================================
    但下面这种情况却可以:
    1.从表字段colmn1里取出一个400字符的值赋予一个String变量
    2.然后再用Insert把这个变量的值插入另一表字段colmn2中
    3.查看colmn2里刚插入的信息,刚插入的400字符全部保存进去啦。推测,不应该是String的长度引起的。
    或许我的替换代码不合适替换大数据量。
       .Text = "[" & "clause_descr_en" & N & "]"
                .Replacement.Text = Nz(IIf(rs.EOF, "", clause_descr_en), "")
                .Execute , , , , , , , , , , 2
      

  7.   

    最后的解决方案,是用Word标签(Book)来实现的,具体代码见下:
    doc.Books("clause_descr_en" & N & "").Range.Text = (rs!clause_descr_en)