2015-05-01 3 views
2

Я хочу запрограммировать sub, который проверяет, является ли значение в ячейке форматированным как валюта, а затем проверяет, равна ли эта валюта или что-то еще. На основании результата пользователю должно быть предложено ввести InputBox, чтобы ввести фактический обменный курс между данной валютой и евро. Затем sub делает некоторую математику и выставляет рассчитанное значение €, отформатированное как валюта в € обратно в ячейку.

Просматривая SO, я нашел идею использовать .NumberFormat по значению ячейки, а затем использовать InStr(1, cellValue, "€") = 0, чтобы проверить, является ли она валютой € или нет.

Теперь я использую немецкую версию Excel и короткий тест с Debug.Print Range("A1").NumberFormat дает мне это: #,##0.00 $. Поэтому, даже если мой Excel показывает мне как валюту, вместо этого VBA дает мне $.

Как я могу обойти это? Я полагаю, что #,##0.00 $ является логической базой Excel, в то время как он использует стандартный язык в качестве своей логики интерфейса и отображает валюту на основе выбранного языка?

+0

'If InStr (1, cell.NumberFormatLocal, "€") Тогда DoSomeStuff' , Ключ NumberFormatLocal –

+0

Пробовал. Вывод «.NumberFormatLocal» - «Стандартный». Пробовал это с форматом $ и $. И то же самое. –

+0

О! Как странно. Это дает мне мою местную валюту. Еще одна из этих странных вещей. Ответ Гэри должен всегда работать. –

ответ

2

Вы можете получить символ валюты с помощью .text собственности, а не .Value собственности:

Sub MoneyCheck() 
    Dim st As String 
    st = ActiveCell.Text 
    ch = Left(st, 1) 
    If ch = "$" Then 
     MsgBox "Dollars" 
    ElseIf ch = "€" Then 
     MsgBox "Not Dollars" 
    End If 
End Sub 
+0

Ну, какое простое решение! Спасибо. –

+1

Я бы изменил его, чтобы сделать InStr вместо этого, поскольку вышеизложенное не сработает для негативов в стиле по умолчанию, когда знак минус напротив символа валюты (или для стран, где символ подходит справа и т.д.) –

+1

@Cor_Blimey .. ............. Это БОЛЬШОЕ ПРЕДЛОЖЕНИЕ! –

0

В VBA вы должны увидеть $ *, поскольку это системная валюта по умолчанию и $ €, если это, например, конкретный евро или $ £, если определенно Фунты. Но вы никогда не можете быть уверены, что отображаемая валюта является правильной. Настройки языка/местоположения языка, параметры Excel и язык Excel/VBA имеют влияние.

Лучший способ - ввести валюту в дополнительный столбец, например ввести EUR до (или после) значения. Это самое безопасное решение.

Смежные вопросы