Форматирование Excel VBA и вывод переменных не всегда работают - PullRequest
0 голосов
/ 07 ноября 2018

Если определенное значение будет введено в строку «A», указанная цена должна быть вставлена ​​в строку «D», и после этого введенная цена должна отобразиться в окне сообщения.

Первая часть была простой в настройке, но с msgbox у меня возникли некоторые проблемы. Может быть из-за процедуры кода ?! Цена находится в данный момент внутри ячейки, и мой код уже пытается получить это в момент пустой ячейки ?! - не уверен.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler

Dim price As String

If Target.Column = 1 And Target.Value = "XY01" Then
    Application.EnableEvents = False
    Target.Offset(0, 3) = Format(0.7, "currency")
    Application.EnableEvents = True
    price = ActiveCell.Offset(0, 3).Value
    MsgBox "The price is now " & price
End If
Handler:
End Sub

Действительно странная вещь заключается в том, что внутри первого ряда он будет отображаться как исключение: enter image description here

Просто в каждом другом ряду это будет отображаться так (просто пусто): enter image description here

Мой второй вопрос заключается в том, что я отформатировал значение как «валюта», но я все равно получаю это сообщение об ошибке (на английском языке, например, ячейка форматируется как текст). Также при форматировании ячейки с помощью инструментов Excel сообщение об ошибке не исчезнет.

Есть идеи, чтобы это исправить?

Спасибо, ребята. enter image description here

==============

EDIT

Я обновил свой код до следующего, поэтому мне удалось решить 2-й вопрос относительно примечания о том, что мое значение - просто текст.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler

Dim price As String

If Target.Column = 1 And Target.Value = "XY01" Then
    Application.EnableEvents = False
    Target.Offset(0, 3).Value = 0.7
    Target.Offset(0, 3).NumberFormat = "currency"
    Application.EnableEvents = True
    price = Target.Offset(0, 3).Text
    MsgBox "The price is now " & price
End If
Handler:
End Sub

Я не знаю почему, но теперь не будет отображаться любой msgbox ?! Кроме того, цена теперь будет вставлена ​​только один раз, если я снова введу код в другой ячейке (ячейка внизу), код снова не будет запущен?!

Мне нужно открыть Excel, чтобы снова запустить его.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Можете ли вы попробовать изменить эту строку:

Dim price As Double

Удачи

0 голосов
/ 07 ноября 2018

Функция Формат всегда возвращает строку / текст.

Итак, здесь: Target.Offset(0, 3) = Format(0.7, "currency") вы пишете не числовое значение, а текст.

Вместо этого напишите значение и установите числовой формат ячейки:

Target.Offset(0, 3).Value = 0.7
Target.Offset(0, 3).NumberFormat = "#,##0.00 $"

Затем вы можете прочитать ячейку .Text (вместо .Value), чтобы отформатировать ее, как показано в ячейке:

Dim price As Sting
price = Target.Offset(0, 3).Text
MsgBox "The price is now " & price

или прочитайте значение ячейки и отформатируйте его так, как вам нравится:

Dim price As Double
price = Target.Offset(0, 3).Value
MsgBox "The price is now " & Format(price, "#,##0.00 $")
...