尝试用Excel工作表的最后一个单元格值填充Word中的ActiveX文本框
我用这个自动递增excel电子表格中的A列尝试用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文档
=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)以(结尾)