Умножьте значение VBA InputBox (десятичное) на значение ячейки (десятичное), полученное из веб-запроса URL-адреса Json

(Обновлено) Я новичок в VBA и часами пробовал разные вещи, но я не могу понять, как просто умножить десятичный пользовательский ввод 1,1 на значение ячейки C1 (71388,92). Вот что я пробовал в последний раз:

Private Sub CommandButton1_Click()
Dim myValue As Variant

myValue = InputBox("Prompt", "Title")
Range("C5").Value = myValue * Range("C1")

End Sub

Я получаю ошибку времени выполнения «13» — несоответствие типов, возможно, потому, что значение ячейки C1 получено из веб-запроса json. Я пробовал Variant, Double, Single, Long и Data Types Decimal, Number и Currency.

Ссылка для скачивания: https://www.dropbox.com/sh/tg5f2a71k9jy6xq/AACrhI9_6VG8vJkDr0QVCbSUa?dl=0


person kymadic    schedule 19.11.2018    source источник
comment
Вам следует посмотреть эту серию: Введение в Excel VBA, часть 1. Начало работы в Редактор VB.   -  person TinMan    schedule 20.11.2018
comment
Ваш код действителен. В чем проблема?   -  person TinMan    schedule 20.11.2018
comment
Я думаю, вам нужна проверка на ошибку значения, введенного пользователем. А если буквенно-цифровой? или ничего?   -  person cybernetic.nomad    schedule 20.11.2018
comment
Я получаю ошибку времени выполнения «13». Несоответствие типов, возможно, потому, что значение ячейки C1 получено из веб-запроса Json. Я отредактировал свой вопрос, включив в него код запроса.   -  person kymadic    schedule 20.11.2018
comment
Не должен иметь значения источник, откуда C1 получил свое значение — важно фактическое значение C1. Вот вопрос, на который нам нужно ответить.   -  person K.Dᴀᴠɪs    schedule 20.11.2018
comment
Это действительно не имеет никакого смысла. Этот код должен работать до тех пор, пока Range("C1") и myValue содержат только числа, даже если они хранятся в виде текста. Можете дать ссылку для скачивания?   -  person TinMan    schedule 20.11.2018
comment
Кроме того, зачем вам использовать myValue As Variant, если вы знаете, что значение будет числовым? Возможно, Double был бы лучшим типом данных?   -  person K.Dᴀᴠɪs    schedule 20.11.2018
comment
В редакторе VBA нажмите Ctrl+G, чтобы перейти в окно Immediate, и введите ?TypeName(Range(C1).Value) (без крайних кавычек). Бьюсь об заклад, результатом будет String.   -  person Excelosaurus    schedule 20.11.2018
comment
Теперь, используя другой URL-адрес API, я заставил его работать, но не с десятичными знаками, которые мне нужны. Я обновил ссылку для скачивания. Пробовал Double, Single, Variant и Decimal, Number и Currency, но ни один из них не работает с десятичными знаками. Вход 1.1.   -  person kymadic    schedule 20.11.2018
comment
Я проверил с файлом в основном посте, изменил API на заголовок, и все работало нормально, независимо от того, 10 или 1.1. Можешь еще раз описать свою проблему? Кроме того, поскольку существует несколько ссылок для скачивания одного и того же файла, удалите старые, чтобы осталась только самая новая.   -  person Mr.K    schedule 20.11.2018
comment
Диск Google преобразует .xlsm в .xlsx, поэтому я загрузил в dropbox dropbox.com /sh/tg5f2a71k9jy6xq/AACrhI9_6VG8vJkDr0QVCbSUa?dl=0   -  person kymadic    schedule 20.11.2018
comment
Могу ли я получить несколько голосов за публикацию правильного решения моего собственного вопроса? :)   -  person kymadic    schedule 12.12.2018


Ответы (3)


Я думаю, что это ваше решение:

myValue = InputBox("Prompt", "Title")
Range("C5").Select
ActiveCell.FormulaR1C1 = myValue * Range("C1")
person ali    schedule 20.11.2018
comment
@kymadic - это не работает, это бесполезный ответ! - person SJR; 20.11.2018
comment
но я проверил это в Excel 2016, и это работает. Вы можете объяснить свою проблему? шаг за шагом отлаживайте свой код (F8) и проверяйте содержимое переменных. - person ali; 20.11.2018
comment
Я попробовал ваш код в новой версии API.xlsm, но все равно получаю ту же ошибку времени выполнения «13»: несоответствие типов в строке, содержащей ActiveCell.FormulaR1C1 = myValue * Range(C1). Вход и выход должны содержать десятичное число. Он работает с целыми числами, но не с десятичными дробями, которые требуются до 6 или около того знаков после запятой. Это вообще не работает в предыдущей предпочтительной версии.xlsm. - person kymadic; 20.11.2018

Объявить как double вместо варианта

Dim myValue As Double
myValue = InputBox("Prompt", "Title")
Range("C5").Value = myValue * Range("C1")
person Manoj Babu    schedule 20.11.2018
comment
Я пробовал Double, Single, Long и Variant. Ничего не работает, и мне нужно ввести числа для эффекта 0,0012345. - person kymadic; 20.11.2018

Найдено решение:

Ошибка с InputBox, принимающим десятичную запись, связана с настройками «Разделитель тысяч» и с тем, вводите ли вы запятую или точку в InputBox. В моем «Разделителе тысяч» использовалась точка ., потому что я работаю с экспортом файлов .csv, поэтому это было полезно. Любой из них будет работать, но вам нужно изменить настройки десятичного символа Windows, перейдя по ссылке:

Control Panel > Language > Change date, time, or number formats > Additional Settings > Decimal symbol.

Что касается части умножения: исходный InputBox возвращает строку. Использование Val() преобразует числовую строку в число и является правильным сценарием VBA:

Private Sub CommandButton1_Click()
Dim myValue As Variant

myValue = Val(InputBox("Prompt", "Title"))
Range("C5").Value = myValue * Range("C3")

End Sub
person kymadic    schedule 21.11.2018