Формат ячейки данных листа Excel не отображается должным образом - проблема преобразования значений диапазона - PullRequest
0 голосов
/ 28 июня 2018

У меня есть рабочая тетрадь с листом для отображения группы данных. Первая строка - это строка заголовка, и каждый столбец связан с определенным форматом. Этот лист обновляется автоматически (с помощью кода макроса VBA) из внешнего источника данных (импорт файла).

После обновления значения данных формат также обновляется (и применяется так, что он применяется к новым строкам). В следующем фрагменте кода rColumn - диапазон столбца данных под заголовком. rColumn начинаться со строки 2, а заголовок - со строки 1. sType - это тип, связанный с заголовком:

        On Error GoTo ErrorHandler
        With rColumn
            .Validation.Delete
            Select Case sType
                Case "text"
                    .Value = CStr(.Value)
                    .NumberFormat = "@"
                Case "integer"
                    .Value = CLng(.Value)
                    .NumberFormat = "0"
                Case "float"
                    .Value = CDbl(.Value)
                    .NumberFormat = "0.0"
                Case "percentage"
                    For Each c In rColumn
                    .Value = CDbl(.Value)
                    Next c
                    .NumberFormat = "0.00%"
                Case "Image"
                    .NumberFormat = "@"
                Case "currency euro"
                    .Value = CDbl(.Value)
                    .NumberFormat = "#,##0.00 $"
                Case "currency USD"
                    .Value = CDbl(.Value)
                    .NumberFormat = "#,##0.00 [$USD]"
            End Select
        End With 'rColumn

когда я проверяю формат ячейки, все в порядке, и я вижу, что был установлен формат столбца.

enter image description here

Что странно, так это то, что клетки отображаются не так, как ожидалось. В приведенном ниже примере столбец 03ATT долл. США ожидается в качестве валюты для доллара США, а 04ATT кур в качестве валюты для евро ...

enter image description here

Если я выберу ячейку, скажем одну со значением 3 в 03ATT cur USD столбец

enter image description here

и подтвердите его (нажав клавишу ввода - обратите внимание, я не изменяю значение в ячейке), тогда применяется ожидаемый формат.

enter image description here

Я должен отметить, что перед обновлением данных графический интерфейс и обновление вычислений отключены (для ускорения процесса) с помощью следующего кода:

Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual

но после обновления данных и форматирования они сбрасываются, так что графический интерфейс обновляется:

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True

здесь возникает вопрос, почему я не получаю правильный формат при применении формата, как показано в коде блока (верхняя часть этого поста). Я использую Excel 2016 на Win 10.

С учетом комментария к этому сообщению кажется, что проблема заключается в преобразовании значения ячейки данных (фактически значения диапазона ячеек) из одного цифрового представления в другое. Целевое представление должно быть совместимо с исходным значением. Применение преобразования, такого как CStr (), CLgn () и т. Д., Вызывает ошибку 13 «несоответствие типов» в той же строке, где происходит преобразование. Описание, которое говорит само за себя, но я не могу понять, в чем проблема. Например, значение 9535 (которое в did является целым числом - на самом деле Long в VBA лучше), преобразованное с помощью CLng (), с треском проваливается. Какого черта ? Мне интересно, может ли преобразование быть применено к значению диапазона?

1 Ответ

0 голосов
/ 04 июля 2018

закрытие вопроса после поиска, чтобы найти решение, кажется, вопрос должен быть переформулирован, что я сделаю.

Кстати Я пытался скопировать значение 1 из некоторой ячейки, а затем PasteSpecial с различными параметрами. Я могу получить ожидаемый формат рендеринга, но у этого есть недостаток, чтобы установить 0 (ноль) в ячейках, которые не имели содержимого (ноль или пусто). Нулевое значение ячейки или пустая ячейка имеют другое значение в содержимом моего приложения. Также это решение не работает для отображения дат.

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