У меня довольно простой макрос, который сбрасывает текущий лист в предопределенное начальное состояние. Это достигается тем, что определенные значения ячеек сначала сохраняются в локальных переменных:
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