Создание кода VBA для поиска цели для динамической строки - PullRequest
0 голосов
/ 08 июля 2019

Кнопка макроса находится на другой вкладке в книге Excel.

Я хочу создать составные тарифы для страховых планов.Мне нужно изменить значение в первой строке данных ("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9), чтобы значения на четыре строки ниже ("G" & EElastrow + 13 & ":" & lastcolumnletter & EElastrow + 13) были равны нулю.Эти строки должны быть динамическими, так как они меняются в зависимости от размера клиента.

Когда я запускаю этот макрос, он продолжает говорить «Ошибка метода выбора класса Range».Я предполагаю, что я не могу "выбрать" необходимые столбцы.Как выбрать эти столбцы без использования ActiveSheet?

Этот диапазон отлично работает практически во всех остальных частях моей книги Excel, но только не с этим приложением.

Что я делаю неправильно?

Я изменил на ActiveSheets, но это изменяет вкладку, в которой находится кнопка макроса.Я не могу переместить кнопку макроса на вкладку, которая будет содержать окончательные результаты.

' Perform Goal Seek
Dim i As Integer, numCols As Integer
Dim cCell As String ' Changing range of cells
Dim sCell As String ' Changing range of cells
Dim lastColumnNum As Integer, EElastrow As Integer
Dim lastcolumnletter As String

    EElastrow = 5 + Worksheets("Master census").Range("h5") - 1
    lastColumnNum = Sheets("Carrier rates by EE").Cells(5, Columns.Count).End(xlToLeft).column
    lastcolumnletter = Split(Columns(lastColumnNum).Address(), "$")(2)

' Disable Excel Properties
With Application
    .ScreenUpdating = False ' Prevent screen flickering
    .DisplayAlerts = False ' Turn off Alerts
    .EnableEvents = False ' Prevent all events
End With

' Run the Goal Seek on multiple columns
' Select the range of cells for the Goal Seek to change
Worksheets("Carrier rates by EE").Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9).Select
Worksheets("Carrier rates by EE").Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9).Value = Worksheets("Carrier rates by EE").Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9).Value
numCols = Selection.Columns.Count

' Move across the cells in Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9)
For i = 0 To numCols - 1
    cCell = Worksheets("Carrier rates by EE").Cell.Offset(0, i).Address ' range of cells to change
    sCell = Worksheets("Carrier rates by EE").Cell.Offset(4, i).Address ' 4 rows down from Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9) = Range("G" & EElastrow + 9 & ":" & lastcolumnletter & EElastrow + 9)

    ' Runs the multi column Goal Seek
    Worksheets("Carrier rates by EE").Range(sCell).Goalseek Goal:=0, ChangingCell:=Worksheets("Carrier rates by EE").Range(cCell)
Next i

' Enable Excel Properties
With Application
    .ScreenUpdating = True ' Enable screen flickering
    .DisplayAlerts = True ' Turn on Alerts
    .EnableEvents = True ' Re-enable all events
End With

Я должен видеть, что это приложение применяется только к вкладке "Нормы тарификации по EE".Моя ссылка на этот код взята из следующего видео на YouTube: https://www.youtube.com/watch?v=NsYvERSCAfU

Спасибо всем за помощь в улучшении понимания того, что необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...