VBA неправильно присваивает значения ячейкам / диапазонам - PullRequest
0 голосов
/ 03 марта 2020

У меня довольно простой макрос, который сбрасывает текущий лист в предопределенное начальное состояние. Это достигается тем, что определенные значения ячеек сначала сохраняются в локальных переменных:

Dim callingsheet As String
callingsheet = ActiveSheet.Name

Dim millidtemp As String
Dim eqmtidtemp As String

If callingsheet <> LoadMeasurementTemplateSheetName Then

    millidtemp = millidinputrng.Value
    eqmtidtemp = eqmtidinputrng.Value

End If

Здесь millidinputrng и eqmtidinputrng являются переменными диапазона глобальной области видимости , оба относятся только к одной ячейке. После этого лист полностью очищается от любых значений, функций, форматирования и т. Д. c.

Затем глобальные переменные сбрасываются (включая millidinputrng и eqmtidinputrng), а после этого лист повторно инициализируется. на основе предварительно определенного начального состояния этого листа, где millidinputrng и eqmtidinputrng снова назначаются их соответствующие диапазоны.

Наконец, я пытаюсь повторно вставить ранее скопированные временные значения обратно в правильные диапазоны:

If callingsheet <> LoadMeasurementTemplateSheetName Then

    millidinputrng.Value = millidtemp
    eqmtidinputrng.Value = eqmtidtemp

End If

Однако назначение как-то не получается. Локальная переменная eqmtidtemp четко показывает, что в ней хранится значение «753362.001», что является правильным. Но после присвоения этого значения обратно диапазону, скопированное значение в ячейке равно «753362,001», то есть точка меняется на запятую. То же самое произойдет, если я перезапущу макрос: снова значение корректно копируется в локальную переменную, но во время переназначения оно меняется на «753362001», пропуская запятую.

Я что-то упустил из-за присвоения значения от переменных до диапазонов / ячеек здесь? Почему значения в локальных переменных не копируются в диапазоны / ячейки в точности так, как они есть? Я пытался заставить формат ячеек «Общий», но безуспешно.

РЕДАКТИРОВАТЬ -

Как указали FaneDuru и Рон Розенфельд, мое предположение, что числовой формат получающего диапазон будет определяться неявно по типу временных переменных - в данном случае это строка - неверна. Excel интерпретировал эти значения как цифру c и сохранил значения в моем местном формате нумерации c с запятой в качестве десятичного разделителя. Это решило проблему:

If callingsheet <> LoadMeasurementTemplateSheetName Then

    millidinputrng.NumberFormat = "@"
    eqmtidinputrng.NumberFormat = "@"

    millidinputrng.Value = CStr(millidtemp)
    eqmtidinputrng.Value = CStr(eqmtidtemp)

End If

1 Ответ

0 голосов
/ 03 марта 2020

Звучит так, как будто числовой формат ячейки меняется. Я бы сделал debug.print до и после присвоения переменной. Если значение в консоли одинаково до и после, то изменение может быть только визуальным. Попробуйте это:

debug.print(millidtemp)
millidinputrng.Value = millidtemp
debug.print(millidinputrng.Value)

И затем проверьте консоль, чтобы увидеть, являются ли оба значения "753362.001".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...