У меня есть этот кодVBA ошибка во время выполнения 13 - при попытке выполнить петлю
Sub fillinvalues()
Dim interest As Double
Dim rate As Double
Dim payment As Double
Dim period As Double
Dim ws As Worksheet
Dim i As Object
Dim begbal As Double
Set ws = Worksheets("Sheet1")
payment = ws.Range("H3").Value
rate = ws.Range("H4").Value
begbal = ws.Range("E3").Value
begbal = 80000
Worksheets("Sheet1").Range("A2").Value = "PaymentNumber"
Worksheets("Sheet1").Range("B2").Value = "Payment/period"
Worksheets("Sheet1").Range("C2").Value = "Principal"
Worksheets("Sheet1").Range("D2").Value = "Interest"
Worksheets("Sheet1").Range("E2").Value = "RemainingBal"
ws.Range("A1:G1").Value = "Monthly Payments at effective monthy interest rate for 25-years"
ws.Range("A3").Value = 0
ws.Range("A3").Select
ws.Range("A3").Activate
period = 0
Do Until period = 301
' period = 0
ActiveCell.Offset(period, 0) = period
ActiveCell.Offset(period, 1) = payment
period = period + 1
Loop
Cells(3, 2).ClearContents
Cells(4, 4).Select
Do Until ws.Columns(1) = Empty
ActiveCell.Value = ActiveCell.Offset(-1, 1).Value * rate
ActiveCell.Offset(0, -1).Value = ActiveCell.Offset(0, -2).Value - ActiveCell.Value
'For Each i In ws.Columns(4)
'i = ActiveCell.Offset(-1, 1).Value * rate
'ActiveCell.Value = i
ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1).Value - ActiveCell.Offset(0, -1).Value
ActiveCell.Offset(1, 0).Activate
'Next i
Loop
End Sub
Но я получаю ошибку несоответствия типов на ячейку D4 (где второй цикл начинается после того, как клетки (4,4) Я не понимаю, почему, поскольку я объявлял ставку как двойную, а значение текущей ячейки - двойное (см. Изображение прилагается).
'ws.Columns (1) = Empty' должен быть' ActiveCell = vbNullString', но вам следует избегать использования activeecell ... Это супер медленно Попробуйте использовать 'ws.Cells (4, i)' with 'For i = 4 до LastRow' и см. Это для последнего: http://stackoverflow.com/documentation/excel-vba/918/methods-for-finding-the-last-used-row-or-column-in-a-workheet/ 24282/find-the-last-non-empty-row-in-workheet # t = 201702091453205437082 – R3uK
Я попытался использовать For..each .. с объявлением объекта, но ему не повезло. Я все еще новичок, когда дело доходит до разработки VB-программ, поэтому я настойчиво держу это просто. Спасибо за помощь. –