回 帖 发 新 帖 刷新版面

主题:请教:VBA中我无法理解的WORD行、列问题

VBA中我无法理解的WORD行、列问题,请教熟悉VBA的狐友

定义表格对象
word_表 = oleApp.ActiveDocument.Tables(1)
定义行对象
word_行 = word_表.rows
word_1行 = word_表.rows(1)
我在应用中发现,行对象《rows》任何状况都存在,但《rows(n)》有的时候不存在。表现为:

1.自己在程序中建立的word表格,行对象都存在
oleApp = CREATEOBJECT('Word.Application')
m_表格行数=20
m_表格列数=12
oleApp.ActiveDocument.Tables.Add(oleApp.Selection.Range,m_表格行数,m_表格列数)
word_表 = oleApp.ActiveDocument.Tables(1)
word_表.Rows.Height=28.3    && 表格所有的行高度=28.3磅
word_表.Rows(1).Height=20   && 表格第一行高度=20磅
word_表.Rows(2).Height=20   && 表格第一行高度=20磅


2.在打开的已经存在的word文档中,rows(n)对象不存在。
word_路径='D:\'
word_文件='我的表格.DOC'  && word文档中有表格
oleApp = CREATEOBJECT('Word.Application')
oleApp.ChangeFileOpenDirectory( word_路径 )   && 改变工作目录
oleApp.Documents.Open(word_文件,.f.,.t.)      && 只读打开文件
oleApp.ActiveWindow.ActivePane.View.Zoom.Percentage = 100
oleApp.ActiveWindow.View.Type = 3 && wdPageView
oleApp.ActiveWindow.windowstate=1
oleApp.Visible=.t. && 显示 word

word_表 = oleApp.ActiveDocument.Tables(1)
? type('word_表.wors')     && 显示 O 对象存在
? type('word_表.wors(1)')  && 显示 U 对象不存在


郁闷,由于在打开的文档中,无法使用《行》函数,在做通用花名册接收程序时,只好使用《列》函数。可是,列函数中又有问题

c_某单元内容=word_表.Cell(行号,列号).Range.text

若列号超过word当前行的列数
? type('word_表.Cell(行号,列号)')   && 显示 U  对象不存在
但若行号超过表格的行数,列号不超过最后一行的列数时,对象缺依然存在
  假设表格有20行,你把行号设为1000,对象依然存在
? type('word_表.Cell(1000,1')   && 显示 O  对象存在
若读单元的内容
c_某单元内容=word_表.Cell(1000,1).Range.text  && 读出的时20行第一列的内容

这个问题困扰了多年,希望诸位指点如何使用《行》对象

回复列表 (共2个回复)

沙发

乌鸦兄好

关于“2.在打开的已经存在的word文档中,rows(n)对象不存在。”
这一定是原始Word文档中存在问题,俺新建word文档保存于D盘,然后启动VFP进行验证,没问题。


关于“若行号超过表格的行数,列号不超过最后一行的列数时,对象缺依然存在”
当行号超过表格的行数,Cell方法应该是自动取最大行号,即
word_表.Cell(1000,1)返回Cell(20, 1)

可以验证
?word_表.Cell(1000,1).RowIndex  &&反查行号为20

可能的疑问:为什么列号超出,不自动取最大列号?
这个俺无法回答,估计设计Cell方法时就这样规定的。

板凳

多谢1楼,那我就可以用  ?word_表.Cell(1000,1).RowIndex  &&反查行号为20
来确定最大行号。既然列超过后对象不存在,而行超过时对象还存在,猜不透他们为何这样做。

关于“2.在打开的已经存在的word文档中,rows(n)对象不存在。”
我用的是word 2000,也许是word 2000的问题。因为我在程序中建的表有该对象,存盘后再打开就没有,打开别人的表格也没有,这些基础测试我是做过的。word 2003我没有试过。

我来回复

您尚未登录,请登录后再回复。点此登录或注册