编译错误:找不到方法或数据成员,VBA

问题描述 投票:0回答:1

我正在Microsoft Word中使用ActiveX命令按钮执行以下任务:

  1. 将ActiveX标签添加到一系列表中
  2. 重命名插入的ActiveX标签
  3. 用来自Excel工作簿的数据填充ActiveX标签的标题

我将ActiveX标签重命名为"FY" & seq,其中seq是数字序列。例如,重命名的标签可以是“ FY1”。在第3步中,我的代码使用“ FY1”(ThisDocument.FY1.Caption = rw.Cells(1).Value),但是代码无法运行,并且我收到了Compile Error: Method or data member not found消息。

我必须调用一个新的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

我的错误发生在ThisDocument.FY1.Caption = rw.Cells(1).Value。无法识别“ FY1”。

excel vba excel-vba ms-word activex
1个回答
0
投票

这是如何更改代码的简化示例:

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
© www.soinside.com 2019 - 2024. All rights reserved.