尝试用Excel工作表的最后一个单元格值填充Word中的ActiveX文本框

尝试用Excel工作表的最后一个单元格值填充Word中的ActiveX文本框,excel,vba,ms-word,Excel,Vba,Ms Word,我用这个自动递增excel电子表格中的A列 =IF(B3="","",A2+1) 我这样做是为了当数据被添加到B列时,A列中的ID号增加1 同时,我有一个Word文档,我在其中添加了一个命令按钮。这个想法是,用户将按下命令按钮,它将用Word文档中的数据填充B到E列,这将导致A增加,然后我想获取A的值,并将其放回Word文档上的ActiveX文本框中。除了将A列中递增的ID#返回到单词doc之外,我的一切都正常工作。这是我到目前为止所拥有的。第一个函数为我查找最后一行,以便将数据从word文档

我用这个自动递增excel电子表格中的A列

=IF(B3="","",A2+1)
我这样做是为了当数据被添加到B列时,A列中的ID号增加1

同时,我有一个Word文档,我在其中添加了一个命令按钮。这个想法是,用户将按下命令按钮,它将用Word文档中的数据填充B到E列,这将导致A增加,然后我想获取A的值,并将其放回Word文档上的ActiveX文本框中。除了将A列中递增的ID#返回到单词doc之外,我的一切都正常工作。这是我到目前为止所拥有的。第一个函数为我查找最后一行,以便将数据从word文档填充到excel电子表格。它可以很好地实现这一目的,但如果用相反的方式使用它,则不起作用。第二个函数是我用来确保必填字段中有实际数据的,这样我就不会试图将空白字段写入电子表格

Function GetLastRow(ByVal col As String) As Long
   With Worksheets("Sheet1")
      GetLastRow = .Range(col & .Rows.Count).End(xlUp).Row + 1
   End With
End Function

Function RequiredField(strQuestion, strMessage)
    If strQuestion.Text = "" Then
        Do
            sInFld = InputBox(strMessage)
        Loop While sInFld = ""
            strQuestion.Text = sInFld
    End If
    'Required Field Prompt Function w/ input box

End Function

Private Sub RequestClaimNumber_Click()

    Dim wkbk As Workbook
    Dim doc As Object
    Dim app As Object
    Dim sdocname As String
    Dim LastRow As Long

    Set app = GetObject(, "Word.Application")
    sdocname = "J:\Correspondence\CAST Database\Word Docs\General Loss Form.docm"
    Set doc = ThisDocument
    Set wkbk = Workbooks.Open("J:\Accident Reports\98 Claims Register.xlsx")

    With wkbk.Sheets("Sheet1")
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    Debug.Print LastRow

    RequiredField PolicyName, "Please insert a name for the Policy Holder in the 'Policy Holder Name' field."
    RequiredField InsuredName, "Please insert a name for the Contractor in the 'Insured Name' field."
    RequiredField DOL, "Please enter a Date of Loss for this incident."

    With wkbk.Sheets("Sheet1")
        rw = GetLastRow("B")
        .Range("B" & rw) = ThisDocument.ReportDate
        rw = GetLastRow("C")
        .Range("C" & rw) = ThisDocument.DOL
        rw = GetLastRow("D")
        .Range("D" & rw) = ThisDocument.PolicyName
        rw = GetLastRow("E")
        .Range("E" & rw) = ThisDocument.InsuredName
        With doc
            doc.FormFields("ClaimNumber").Result = .Range(LastRow).Value
        End With
    End With
    wkbk.Save
    wkbk.Close
    Set wkbk = Nothing

End Sub
问题似乎在于:

LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
当我调试该行时,它返回的数字为30687。我假设这应该是它在电子表格上返回的单元格。我也得到了一份工作

“下标超出范围”

错误,并突出显示该行

doc.FormFields("ClaimNumber").Result = .Range(LastRow).Value
我的假设是,它没有在A列中找到实际使用的最后一个单元格。它将进入A的最底部,没有找到任何内容。为此,我尝试了几种方法试图找到最后一个单元格,但它们都给我相同的下标超出范围错误,并且在我调试它们时,它们都返回30687的值


如果有一种我不知道的不同的方法,我愿意接受建议。否则,我只需要找出我现有代码的问题所在,这样我就可以工作了。

您没有提供列,只提供行,所以您需要说
.Range(“X”&LastRow).Value
.cells(LastRow,24)
我找到了它。下面是最后一段有效的代码

Private Sub RequestClaimNumber_Click()

    Dim wkbk As Workbook
    Dim lastColumn As Long

    RequiredField PolicyName, "Please insert a name for the Policy Holder in the 'Policy Holder Name' field."
    RequiredField InsuredName, "Please insert a name for the Contractor in the 'Insured Name' field."
    RequiredField DOL, "Please enter a Date of Loss for this incident."

    Set wkbk = Workbooks.Open("J:\Accident Reports\98 Claims Register.xlsx")

    With wkbk.Sheets("Sheet1")
        lastColumn = .Range("B" & .Rows.Count).End(xlUp).Row
    End With

    With wkbk.Sheets("Sheet1")
        rw = GetLastRow("B")
        .Range("B" & rw) = ThisDocument.ReportDate
        rw = GetLastRow("C")
        .Range("C" & rw) = ThisDocument.DOL
        rw = GetLastRow("D")
        .Range("D" & rw) = ThisDocument.PolicyName
        rw = GetLastRow("E")
        .Range("E" & rw) = ThisDocument.InsuredName
        rw = GetLastRow("F")
        .Range("F" & rw) = ThisDocument.UserID
        ClaimNumber.Text = .Range("A" & lastColumn + 1).Text
    End With
    wkbk.Save
    wkbk.Close
    Set wkbk = Nothing

End Sub

您需要说
.Range(“X”&LastRow).Value
.cells(LastRow,24)
您提供的不是列,而是行。我这样尝试过;doc.FormFields(“ClaimNumber”).Text=.Range(“A”&LastRow)。值,它返回的类型不匹配。。。。当我这样尝试的时候;doc.FormFields(“ClaimNumber”).Text=.Cells(LastRow,24)我得到一个错误,该对象不支持此属性或方法。此时的
LastRow
是什么。这是引用的工作表是什么?我在这里定义了LastRow:Set wkbk=Workbooks.Open(“J:\Confect Reports\98 Claims Register.xlsx”)和wkbk.Sheets(“Sheet1”)LastRow=.Range(“A”&.Rows.Count”).End(xlUp)。Row End With和您封闭了
.cells(LastRow,24)
也在with block?我想我可能是误解了。我在这里定义它:(使用wkbk.Sheets(“Sheet1”)LastRow=.Range(“A”&.Rows.Count).End(xlUp).Row End With)然后我在这里调用它:(使用doc.doc.FormFields(“ClaimNumber”).Text=.Cells(LastRow,24)以(结尾)