Excel VBA код нескольких переменных для умножения на основе условия дает ошибку - PullRequest
0 голосов
/ 18 октября 2018

Я искал решение по всему этому сайту, но не смог найти решение, которое отвечало бы моим потребностям. Я опытный пользователь Excel, но начал изучать VBA и застрял на этой ошибке уже несколько дней.мне нужно умножить значение на валюту, и, поскольку у меня много валют, я подумал, что это был правильный способ сделать это (см. код ниже), но я получил эту ошибку, которую не могу решить, может ли кто-нибудь помочь мнес этим, пожалуйста?заранее спасибо.

Sub Update_Janeiro()
Dim lngLastRow As Long
Dim Cambio_Jan As Currency

If Cells(i, 251) = EUR Then
        Cambio_Jan = 1
    ElseIf Cells(i, 251) = USD Then
        Cambio_Jan = 0.801228726
    ElseIf Cells(i, 251) = GBP Then
        Cambio_Jan = 1.1414211803
    ElseIf Cells(i, 251) = CNY Then
        Cambio_Jan = 0.1271895307
    ElseIf Cells(i, 251) = NAIRAS Then
        Cambio_Jan = 0.0016670478
    ElseIf Cells(i, 251) = AUD Then
        Cambio_Jan = 0.6431760061
    ElseIf Cells(i, 251) = GHS Then
        Cambio_Jan = 0.1778598686
    ElseIf Cells(i, 251) = CZK Then
        Cambio_Jan = 0.0397256232
    ElseIf Cells(i, 251) = KES Then
        Cambio_Jan = 0.0078621931
    ElseIf Cells(i, 251) = ZAR Then
        Cambio_Jan = 0.0676563785
    ElseIf Cells(i, 251) = ZMK Then
        Cambio_Jan = 0.0000829218
    ElseIf Cells(i, 251) = TZS Then
        Cambio_Jan = 0.0003555818
    ElseIf Cells(i, 251) = SGD Then
        Cambio_Jan = 0.6117066233
    ElseIf Cells(i, 251) = UGX Then
        Cambio_Jan = 0.000221247
    ElseIf Cells(i, 251) = RON Then
        Cambio_Jan = 0.2149924803
    ElseIf Cells(i, 251) = RUB Then
        Cambio_Jan = 0.0141866904
    Else: Cambio_Jan = 0

End If

lngLastRow = Cells(Rows.Count, "IA").End(xlUp).Row
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    For i = 3 To lngLastRow
        Cells(i, 261).Value = Cells(i, 255) + Cells(i, 256)
        Cells(i, 262).Value = Cells(i, 259) * Cambio_Jan
    Next i
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

ОБНОВЛЕННЫЙ КОД

Option Explicit
Sub Update_Janeiro()
Dim lngLastRow As Long
Dim Cambio_Jan As Double
Dim i As Integer
i = i

If Cells(i, 251) = "EUR" Then
        Cambio_Jan = 1
    ElseIf Cells(i, 251) = "USD" Then
        Cambio_Jan = 0.801228726
    ElseIf Cells(i, 251) = "GBP" Then
        Cambio_Jan = 1.1414211803
    ElseIf Cells(i, 251) = "CNY" Then
        Cambio_Jan = 0.1271895307
    ElseIf Cells(i, 251) = "NAIRAS" Then
        Cambio_Jan = 0.0016670478
    ElseIf Cells(i, 251) = "AUD" Then
        Cambio_Jan = 0.6431760061
    ElseIf Cells(i, 251) = "GHS" Then
        Cambio_Jan = 0.1778598686
    ElseIf Cells(i, 251) = "CZK" Then
        Cambio_Jan = 0.0397256232
    ElseIf Cells(i, 251) = "KES" Then
        Cambio_Jan = 0.0078621931
    ElseIf Cells(i, 251) = "ZAR" Then
        Cambio_Jan = 0.0676563785
    ElseIf Cells(i, 251) = "ZMK" Then
        Cambio_Jan = 0.0000829218
    ElseIf Cells(i, 251) = "TZS" Then
        Cambio_Jan = 0.0003555818
    ElseIf Cells(i, 251) = "SGD" Then
        Cambio_Jan = 0.6117066233
    ElseIf Cells(i, 251) = "UGX" Then
        Cambio_Jan = 0.000221247
    ElseIf Cells(i, 251) = "RON" Then
        Cambio_Jan = 0.2149924803
    ElseIf Cells(i, 251) = "RUB" Then
        Cambio_Jan = 0.0141866904
    Else: Cambio_Jan = 0

End If

lngLastRow = Cells(Rows.Count, "IA").End(xlUp).Row
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    For i = 3 To lngLastRow
        Cells(i, 261).Value = Cells(i, 255) + Cells(i, 256)
        Cells(i, 262).Value = Cells(i, 259) * Cambio_Jan
    Next i
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

1 Ответ

0 голосов
/ 18 октября 2018
  1. Обратите внимание, что вы можете использовать Select Case
  2. Если вы используете Cells(i, 251) = EUR, EUR - это переменная, а не строка.
    Вам необходимо использовать кавычки Cells(i, 251) = "EUR"

  3. Ваш i не определен и нет строки 0.Определите i или используйте цикл с i.

    i = 1 'you must define i
    
    Select Case Cells(i, 251)
        Case "EUR":    Cambio_Jan = 1
        Case "USD":    Cambio_Jan = 0.801228726
        Case "GBP":    Cambio_Jan = 1.1414211803
        Case "CNY":    Cambio_Jan = 0.1271895307
        Case "NAIRAS": Cambio_Jan = 0.0016670478
        Case "AUD":    Cambio_Jan = 0.6431760061
        Case "GHS":    Cambio_Jan = 0.1778598686
        Case "CZK":    Cambio_Jan = 0.1778598686
        Case "KES":    Cambio_Jan = 0.0078621931
        Case "ZAR":    Cambio_Jan = 0.0676563785
        Case "ZMK":    Cambio_Jan = 0.0000829218
        Case "TZS":    Cambio_Jan = 0.0003555818
        Case "SGD":    Cambio_Jan = 0.6117066233
        Case "UGX":    Cambio_Jan = 0.000221247
        Case "RON":    Cambio_Jan = 0.2149924803
        Case "RUB":    Cambio_Jan = 0.0141866904
        Case Else:     Cambio_Jan = 0
    End Select
    

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

  4. Используйте Option Explicit и объявите все свои переменные правильно.

  5. Вы использовали тип Currency (см. Тип данных валюты )

    Переменные валюты хранятся как 64-битные (8-байтовые) числа в целочисленном формате,масштабируется на 10 000, чтобы получить число с фиксированной точкой с 15 цифрами слева от десятичной точки и 4 цифрами справа.

    Но вы используете более 4 цифр.Переключитесь на тип Double.


Так вы получите что-то вроде:

Option Explicit

Sub Update_Janeiro()
    Dim lngLastRow As Long
    lngLastRow = Cells(Rows.Count, "IA").End(xlUp).Row

    Dim Cambio_Jan As Double

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim i As Long 'must be long!
    For i = 3 To lngLastRow
        Select Case Cells(i, 251)
            Case "EUR":    Cambio_Jan = 1
            Case "USD":    Cambio_Jan = 0.801228726
            Case "GBP":    Cambio_Jan = 1.1414211803
            Case "CNY":    Cambio_Jan = 0.1271895307
            Case "NAIRAS": Cambio_Jan = 0.0016670478
            Case "AUD":    Cambio_Jan = 0.6431760061
            Case "GHS":    Cambio_Jan = 0.1778598686
            Case "CZK":    Cambio_Jan = 0.1778598686
            Case "KES":    Cambio_Jan = 0.0078621931
            Case "ZAR":    Cambio_Jan = 0.0676563785
            Case "ZMK":    Cambio_Jan = 0.0000829218
            Case "TZS":    Cambio_Jan = 0.0003555818
            Case "SGD":    Cambio_Jan = 0.6117066233
            Case "UGX":    Cambio_Jan = 0.000221247
            Case "RON":    Cambio_Jan = 0.2149924803
            Case "RUB":    Cambio_Jan = 0.0141866904
            Case Else:     Cambio_Jan = 0
        End Select

        Cells(i, 261).Value = Cells(i, 255) + Cells(i, 256)
        Cells(i, 262).Value = Cells(i, 259) * Cambio_Jan
    Next i

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...