Замена периодов запятыми приводит к удалению периодов - PullRequest
2 голосов
/ 06 февраля 2020

Это мой первый месяц работы с VBA, и я преодолел так много препятствий и сократил стены кода с помощью циклов, сделал код в значительной степени неисправимым, даже когда пользователь, использующий макрос, не знает, что он / она делает, но я я застрял с этим:

If i = 1 Or i = 2 Then
  Columns("F:F").Select
  Selection.Replace ".", ","
  Selection.NumberFormat = "dd\/mm\/yyyy hh:mm:ss"
End If

По какой-то причине результатом замены: 438595.73402778 является этот 43859573402778

Я пробовал разные варианты от записи макроса до постепенного упрощения кода и в конечном итоге с над. Всегда один и тот же результат. Что мне здесь не хватает?

Код довольно сложный, потому что мне нужно собрать данные из 6 временных рабочих книг в 4 листа, защитить их в зависимости от имени пользователя и т. Д. c. Это прекрасно работает, но я подумал, давайте сделаем его еще лучше, потому что 3 из этих 6 книг qlikview имеют неправильный формат в 1 из 4 столбцов отслеживания времени.

Как-то грустно, что мне пришлось написать свой первый пост за такую ​​вещь

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Я предполагаю, что ваши текущие данные на самом деле являются строковыми данными, похожими на цифры c. Если столбец F отформатирован в General и появляются эти «строковые» числа, вы можете изменить это, используя Range.TextToColumns. Например:

enter image description here

Sub Test()

Dim lr As Long, rng As Range

With Sheet1

    'Get last used row of column F and set rng
    lr = .Cells(.Rows.Count, 6).End(xlUp).Row
    Set rng = .Range("F2:F" & lr)

    'Replace dot with comma and change to numeric
    rng.TextToColumns Destination:=Range("F2"), DataType:=xlFixedWidth, DecimalSeparator:=".", ThousandsSeparator:=","
    rng.NumberFormat = "dd\/mm\/yyyy hh:mm:ss"

End With

End Sub

enter image description here

0 голосов
/ 06 февраля 2020

Похоже, у вас разные настройки десятичного разделителя в файлах Excel.

Go в Опции-> расширенный-> использовать системный десятичный разделитель.

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

для исправления:

If Application.International(xlDecimalSeparator) = "," Then
    MsgBox "Wrong decimal separator(,)!!"
    Application.UseSystemSeparators = True
End If

Если вы хотите вывести точку, но оставьте запятую, разделитель используйте

With ThisWorkBook.WorkSheet("Sheet1")
   MsgBox Str( .Range("A1"))
End With

См. Использование VBA для определения того, какой десятичный знак использует компьютер

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