2016-02-28 112 views
-1

我尝试将我的访问表中的数据填入词表中。使用MS Access表中的数据填充MS Word表格

一开始我在单词模板中有一行和两列的空表,当它运行代码时,我终于有了一个有8行和2列的表,这很好。还有一则我的数据集的访问表,但确定...

但表中的所有字段都为空,为什么不带馅的细胞:

.Tables(2).Cell(row, col).Range.Text = rs!short  

这里是循环:

Set rs = DB.OpenRecordset("tbl_abbreviations", dbOpenDynaset, dbSeeChanges) 
    rs.MoveFirst 
    col = 1 
    row = 1 
    Do While Not rs.EOF 
    .Tables(2).Cell(row, col).Range.Text = rs!short 
    col = col + 1 
    .Tables(2).Cell(row, col).Range.Text = rs!Description 
    .Tables(2).Rows.Add 
    col = 1 
    row = row + 1 

    rs.MoveNext 
    Loop 

甚至有点奇特的是,这将工作:

.Shading.BackgroundPatternColorIndex = wdBlue 

但这不起作用:

.Shading.BackgroundPatternColorIndex = RGB(104, 212, 248) 

我忘了激活什么吗?

+0

狂放猜测的排序,但'Short'是一个保留字,所以试试'rs![short]'。除此之外,如果您确定'.Tables(2)'是正确的,那么您的代码应该可以工作。 – Andre

+0

是的,我相信桌子。我可以改变背景颜色,行数。它只是不显示文本,即使我试图写一个简单的字符串,如“你好”。我尝试过,即使选择,但没有奏效。我的想法是,我忘记导入一个图书馆。但字16.0库是活动的 –

回答

1

在我看来,你的方法并不是最优的。写入Word表格,逐个单元格效率不高。

更好的办法是将数据写入分隔字符串格式,将该字符串分配给Word文档中的“目标”范围位置(通常为书签),然后将范围转换为表格,然后可以格式化。在分隔字符串格式

样本数据内容:

Short;Description 
s1;the first record 
s2;the second record 
s3;and so on... 

的代码段用于写入书签并转换为表:

Dim sData As String 
Dim rng As word.Range 
Dim tbl As word.Table 

sData = "Short;Description" & vbCr & "s1;the first record" & vbCr _ 
     & "s2;the second record" & vbCr & "s3;and so on..." 
Set rng = ActiveDocument.Bookmarks("test").Range 
rng.Text = sData 
Set tbl = rng.ConvertToTable(";") 

替换你的代码读取Access表,写它到sData。您可以使用任何您想要的字段分隔符,它不必是分号。但记录分隔符必须是vbCr(ANSI 13)。请务必指定您在ConvertToTable函数中使用的字段分隔符。

一旦你有tbl对象,你可以用它来应用格式。这比使用Tables(index)收集方法重复使用表更加可靠和高效。