Excel 编译错误:未找到方法或数据成员,VBA
我正在使用Microsoft Word中的ActiveX命令按钮执行以下任务:Excel 编译错误:未找到方法或数据成员,VBA,excel,vba,ms-word,activex,Excel,Vba,Ms Word,Activex,我正在使用Microsoft Word中的ActiveX命令按钮执行以下任务: 将ActiveX标签添加到一系列表中 重命名插入的ActiveX标签 使用Excel工作簿中的数据填充ActiveX标签的标题 我正在将ActiveX标签重命名为“FY”&seq,其中seq是一个数字序列。例如,重命名的标签可以是“FY1”。在步骤3中,我的代码使用了“FY1”(ThisDocument.FY1.Caption=rw.Cells(1.Value)),但代码不会运行,我收到一条编译错误:找不到方法或数据
我正在将ActiveX标签重命名为
“FY”&seq
,其中seq
是一个数字序列。例如,重命名的标签可以是“FY1”。在步骤3中,我的代码使用了“FY1”(ThisDocument.FY1.Caption=rw.Cells(1.Value)
),但代码不会运行,我收到一条编译错误:找不到方法或数据成员
消息
我是否必须呼叫新的Sub才能识别我的标签?是否有一种方法可以通过单击ActiveX按钮来运行整个代码
Private Sub CommandButton1_Click()
Dim objExcel As Excel.Application
Dim exWb As Excel.Workbook
Dim rng As Excel.Range, m, rw As Excel.Range
Dim num As Integer
Dim TableNo As Integer
Dim seq As Integer
Dim ctl As MSForms.Label
Dim ils As Word.InlineShape
Set objExcel = New Excel.Application
Set exWb = objExcel.Workbooks.Open("O:\Documents\Database.csv")
Set rng = exWb.Sheets("FY1819_DatabaseExtracted").Cells
TableNo = ActiveDocument.Tables.Count
num = 3
seq = 1
'' Now, create all FY labels
Do
Set ils = ActiveDocument.Tables(num).cell(6, 2).Range.InlineShapes.AddOLEControl(ClassType:="Forms.Label.1")
Set ctl = ils.OLEFormat.Object
ctl.Name = "FY" & seq
seq = seq + 1
num = num + 1
Loop Until num = TableNo + 1
'''' Match to Excel Database
m = objExcel.Match(ThisDocument.Code1.Caption, rng.Columns(3), 0)
If Not IsError(m) Then
Set rw = rng.Rows(m) '<< get the matching row as a Range
ThisDocument.FY1.Caption = rw.Cells(1).Value 'value from colA
End If
Set exWb = Nothing
End Sub
Private子命令按钮1\u单击()
Dim objExcel作为Excel.Application
将exWb设置为Excel.工作簿
尺寸rng为Excel.Range,m、rw为Excel.Range
Dim num作为整数
Dim TableNo作为整数
作为整数的Dim seq
作为MSForms.Label的Dim ctl
将ils设置为Word.InlineShape
Set objExcel=New Excel.Application
设置exWb=objExcel.Workbooks.Open(“O:\Documents\Database.csv”)
设置rng=exWb.Sheets(“FY1819_数据库提取”).单元格
TableNo=ActiveDocument.Tables.Count
num=3
序号=1
“”现在,创建所有FY标签
做
设置ils=ActiveDocument.Tables(num).cell(6,2).Range.InlineShapes.AddolControl(类类型:=“Forms.Label.1”)
设置ctl=ils.OLEFormat.Object
ctl.Name=“FY”和seq
序号=序号+1
num=num+1
循环直到num=TableNo+1
''与Excel数据库匹配
m=objExcel.Match(ThisDocument.Code1.Caption,rng.Columns(3),0)
如果不是IsError(m),则
设置rw=rng.Rows(m)’下面是一个如何更改代码的简化示例:
Private Sub CommandButton1_Click()
Dim obj, ctl, ils As Word.InlineShape
'add a control and set its name
Set ils = ActiveDocument.Tables(1).Cell(1, 1).Range. _
InlineShapes.AddOLEControl(ClassType:="Forms.Label.1")
Set ctl = ils.OLEFormat.Object
ctl.Name = "FY1"
'consider setting the caption here?
'ThisDocument.FY1.Caption = "Hello" '<< will not compile
'alternate approach
Set obj = GetControl(ActiveDocument, "FY1")
If Not obj Is Nothing Then
obj.Caption = "Hello"
End If
End Sub
'get a control by name
Function GetControl(doc As Document, conName As String) As Object
Dim rv As Object, obj
For Each obj In doc.InlineShapes
If obj.OLEFormat.Object.Name = conName Then
Set rv = obj.OLEFormat.Object
Exit For
End If
Next obj
Set GetControl = rv
End Function
Private子命令按钮1\u单击()
Dim obj、ctl、ils作为Word.InlineShape
'添加控件并设置其名称
设置ils=ActiveDocument.Tables(1).Cell(1,1).Range_
InlineShapes.AddolControl(类类型:=“Forms.Label.1”)
设置ctl=ils.OLEFormat.Object
ctl.Name=“FY1”
'考虑在此处设置标题?
“ThisDocument.FY1.Caption=“Hello””打开文档后,它看起来像seq=2
,然后seq
在它下面的循环中递增。文档中是否确实有一个FY1
,或者应该以FY2
开头?刚刚编辑了seq
,因此它=1。错误消息仍然出现。ThisDocument.FY1.Caption
需要能够编译,然后代码才能运行以添加控件-这是一个问题。也许可以看看这里如何避免硬编码的名称-完美!我使用了第一个选项,将标题命名为ctl.caption=rw.Cells(7).Value
。是的,这肯定是最简单的方法。