Я автоматически увеличиваю столбец A в таблице Excel следующим образом:
=IF(B3="","",A2+1)
Я делаю это так, чтобы при добавлении данных в столбец B идентификационный номер в столбце A увеличивался на 1.
В то же время у меня есть документ Word, к которому я добавил командную кнопку.Идея состоит в том, что пользователь нажимает командную кнопку, он заполняет столбцы с B по E данными из Word Doc, что приведет к увеличению значения A, затем я хочу взять значение A и вернуть его в текстовое поле ActiveX обратно.на слово док.У меня все работает, кроме передачи увеличенного ID # в столбце A обратно в документ Word.Вот что у меня так далеко.Первая функция находит последнюю строку для меня, чтобы заполнить данные из слова doc в таблицу 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, когда я их отлаживаю.
Если естьэто другой способ сделать это, о котором я не знаю, я открыт для предложений.В противном случае мне просто нужно выяснить, где моя проблема с существующим кодом, чтобы я мог заставить это работать.