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

Я хочу передать строковую переменную "Sheets(2).Cells(i, 41).Value" в процедуру Sub prcdTariff_calc, которая в цикле присвоит значение этой переменной, чтобы передать его другой функции, Function Tariff_calc. Проблема с Sub prcdSum_year_IR(). Я уже пытался поиграться с типами данных (String / Double) в процедурах, а также CDbl(quality) и т.д ... Есть ли способ передать переменную quality в цикл в Sub prcdTariff_calc? Спасибо за совет.

  Option Explicit
    Dim  price As String
    Dim i As Byte
    Public  sum_tariff As Double
    Dim tariff As Double, period As Double, quality As Double


    Function Tariff_calc(a As Double, Optional b As Double = 1, Optional c As Double = 1) As Double
    Tariff_calc = a * b * c
    Debug.Print b
    End Function

    Function Price_calc(a As Double, Optional b As String = 1, Optional c As Double = 1) As String
    Price_calc = Format(a * b * c, "0.00   €/MWh")
    End Function

    Sub prcdTariff_calc(Optional a As Double = 1, Optional b As Double = 1, Optional c As Double = 1)
    For i = 2 To 43
        If ThisWorkbook.Sheets(2).Cells(i, 1).Value = 1 Then
            a = Sheets(2).Cells(i, 19).Value
            'I also tried b = val(quality) here
'I experimented here by referring to newly created procedure Sub [prcdquality() quality = Sheets(2).Cells(i, 41) End Sub] and back here then b=quality; and it worked         
            sum_tariff = sum_tariff + Tariff_calc(a, Val(b), c) 'I tried val(b), but it still shows 0 in Debug.Print b above.

            price = Price_calc(a, CStr(b), c)
            lblPrice.Caption = lblPrice.Caption & price & vbCrLf
        End If
    Next i
    End Sub

    Sub prcdSum_year_Firm()'works fine
    prcdTariff_calc
    lblUnitCost.Caption = Format(sum_tariff, "0.00    €/MWh")
    End Sub

    Sub prcdSum_year_IR()
    quality = Sheets(2).Cells(i, 41)
    prcdTariff_calc b:=quality
    lblUnitCost.Caption = Format(sum_tariff, "0.00    €/MWh")
    End Sub

1 Ответ

0 голосов
/ 03 января 2019

Я решил свою проблему, изменив код, объявив переменные a, b, c внутри цикла процедуры. Теперь работает нормально.

Function Tariff_calc(a As Double, Optional b As Double = 1, Optional c As Double = 1) As Double
Tariff_calc = a * b * c
End Function

Function Price_calc(a As Double, Optional b As String = 1, Optional c As Double = 1) As String
Price_calc = Format(a * b * c, "0.00   €/MWh")
End Function

Sub prcdTariff_calc(Optional a As Double = 1, Optional b As Double = 1, Optional c As Double = 1)
For i = 2 To 43
    If ThisWorkbook.Sheets(2).Cells(i, 1).Value = 1 Then
        a = Sheets(2).Cells(i, 19).Value 'annual tariff
        If optIR.Value Then
           b = Sheets(2).Cells(i, 41) 'quality factor
        End If
        If optQuarter.Value Then
            c = Sheets(2).Cells(i, 21 + q) 'period factor Quarter
        ElseIf optMonth.Value Then
            c = Sheets(2).Cells(i, 28 + m) 'period factor Month
        ElseIf optDay.Value Then
            c = Sheets(2).Cells(i, 27)
        End If

        sum_tariff = sum_tariff + Tariff_calc(a, b, c)

        price = Price_calc(a, CStr(b), c)
        lblPrice.Caption = lblPrice.Caption & price & vbCrLf
    End If
Next i
lblUnitCost.Caption = Format(sum_tariff, "0.00    €/MWh")
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...