在word中随意选中一个表格,运行如下脚本:
Sub test()
Selection.Tables(1).Cell(1, 1) = "test"
End Sub
就是在 (1,1) 单元格中写入文本,为什么会提示属性的使用无效?
换一个写法:
Sub test()
Dim myTable As Object
Set myTable = Selection.Tables(1)
myTable.Cell(1, 1) = "test"
End Sub
就没有任何问题,这两个不是完全等价的吗?
为什么需要初始化呢?Selection.Tables(1)不是 word 中已经存在的对象吗?
追答错
必须显示声明为对象
已通知提问者对您的回答进行评价,请稍等
追问采用楼下提到的 Selection.Tables(1).Cell(1, 1).range = "test" 写法就没问题了,区别在哪儿呢?
Sub test()
Selection.Tables(1).Cell(1, 1).range = "test"
End Sub
就没问题了 ~ 能解释一下是为什么吗?为什么我题目中的第二种写法就不用加 range?
你的第二例子是建立了一个表的新对象,已经明确告诉VBA所指向的对象
====================================
其实你的第二例子也不规范,请测试:在文档中,开头写几行文字,后面接着放表格,表格后面再输入一段文字,代码就出错了,找不到表格了
试了试没问题,注意我的代码是 selection,需要选中表格才生效
追答应该是出错的吧,请你把光标停到最后的文字后面,不要停到表格里,再运行代码
=======================
我认为,用Selection前应当先表格被选中,好像excel一样
先:[a1].select
后:Selection
问题不在这儿,代码中的 range 到底起了什么作用?cell本身不就应该返回 range 对象吗?再加一个 .range 是什么意思?
问题不在这儿,代码中的 range 到底起了什么作用?cell本身不就应该返回 range 对象吗?再加一个 .range 是什么意思?
追答word不同于excel,cell没有value属性,其实完整的写法应该是:cell().range.text=
追问也即是说,第二个例子中系统帮我补足了 .range.text,而第一个例子中系统没补足,又因为 word 中 cell 不能赋值,导致出了问题?
追答Sub test002()
Dim myTable As Object
Set myTable = ActiveDocument.Tables(1)
myTable.Cell(1, 1) = "test"
End Sub
第二例子的Selection改为ActiveDocument,经测试也就没问题