Результаты функции vba не обновлены - PullRequest
0 голосов
/ 05 ноября 2019

Я создаю электронную таблицу для клиента, чтобы управлять его ALM. Я разработал его под Excel и VBA, запрос моего клиента. Один лист «Данные» рассчитывает все функции VBA. Если я вычисляю вручную, каждая ячейка все работает нормально, но если я запускаю макрос, это не так. У тебя есть решение? Я могу опубликовать весь файл, если необходимо, для лучшего исследования.

В начале все вычисления были в ячейке Excel, но я создал отдельную функцию для каждой таблицы, потому что файл был слишком большим при сохранении.

Public Sub Main()

    Dim i, nb_tableaux                  As Integer
    Dim j, lignemax, BarWidth           As Long
    Dim ProgressPercentage              As Double
    Dim echeancier, nomtableau          As String
    Dim ws_data                         As Worksheet
    Dim c As Range

    Me.ProgressLabel.Caption = "Initialisation terminée. "
    Set ws_data = Sheets("Data")
    lignemax = ws_data.Range("DATA").Rows.Count

    Application.ScreenUpdating = True
    Application.EnableEvents = True

    nb_tableaux = 17

    For i = 1 To nb_tableaux
        echeancier = tab_Tableaux(i, 0)
        nomtableau = tab_Tableaux(i, 1)
        Me.ProgressLabel.Caption = "En cours : " & echeancier
        ws_data.Range(nomtableau).Calculate
        'With Worksheets("Data")
            For j = 1 To lignemax
                For Each c In ws_data.Range(nomtableau).Rows(j)
                    formulaToCopy = c.Formula
                    c.ClearContents
                    c.Value = formulaToCopy
                    DoEvents
                Next
                Me.ProgressLabel.Caption = "En cours : " & echeancier & ", " & Format(j / lignemax, "0.0%") & " completed"
                Me.Repaint
            Next j
        'End With
        Me.Bar.Width = i * 200 / nb_tableaux
        Me.Bar.Caption = Format(i / nb_tableaux, "0%") & " completed"
    Next i

    Application.ScreenUpdating = False
    Application.EnableEvents = False

End Sub

1 Ответ

0 голосов
/ 05 ноября 2019

после учета рекомендаций, которые вы дали мне для моих предыдущих ответов, код работает лучше, но все же не для некоторых диапазонов. Моя проблема возникла из-за неправильного расчета аргумента в функции. Фактически, я использую ligne = activecell.row - 8, чтобы получить ligne диапазона для вычисления. Но это работает, если я делаю это вручную, так как активируется фактическая ячейка, но не когда я вызываю функцию много раз, поскольку я не могу активировать каждую ячейку, это будет слишком долго для электронной таблицы.

Какмогу ли я вычислить ligne с правильным адресом ячейки, в которой написана функция?

Надеюсь, я достаточно ясен. Извините за мой английский.

Открытая функция Taux_Mois (ByVal mMois As Range, ByVal sScenario As Range)

Dim ligne                           As Long

ligne = ActiveCell.row - 8

Select Case (Range("DATA[Flag]").Cells(ligne).Value = 0) Or (Range("DATA[frequence fixing]").Cells(ligne).Value = 0)
Case True
    Taux_Mois = 0
    Exit Function
Case False
    Dim index_taux  As Integer
    Dim ajust       As Long
    index_taux = CInt(Range("DATA[Indexation ID]").Cells(ligne).Value)

    If index_taux = 1 Then
        ajust = 0
    Else
        Dim ajust1, dernierfixingt0, freqfixing As Integer
        dernierfixingt0 = Range("DATA[Dernier fixing t0]").Cells(ligne).Value
        freqfixing = Range("DATA[frequence fixing]").Cells(ligne).Value
        ajust1 = (Int((mMois.Value - dernierfixingt0) / freqfixing) * freqfixing)
        ajust = Worksheets("Market Data").Range("Taux_" & sScenario.Value).Offset(12 + dernierfixingt0 + ajust1, 1 + index_taux).Value
    End If
    Taux_Mois = Range("DATA[facteur taux (TVA, base)]").Cells(ligne).Value * (ajust + Range("DATA[Spread / Taux]").Cells(ligne).Value / 10000)
    Exit Function
End Select

End Function

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