Excel vba - формат не копируется в другую ячейку - PullRequest
0 голосов
/ 19 февраля 2020

Я получил файл Excel с автоинкрементом на 1 ячейку, где числовой формат равен «000».

Worksheets("TEST").Range("M17").Value = Worksheets("TEST").Range("M17").Value + 1
Worksheets("TEST").Range("M17").NumberFormat = "000"

Это отлично работает, поэтому мое первое число: 001 вместо 1.

Теперь мне нужно объединить эту ячейку с другой ячейкой M16 (которая отображает входные данные, например: 2020)

=M16&"/"&M17

Но по какой-то причине он теряет свой NumberFormat, а Excel показывает: 2020 / 1 вместо 2020 / 001.

Я пробовал несколько вещей, таких как форматирование моей ячейки M18

Worksheets("TEST").Range("M18").NumberFormat = "0000/000"

Или пытаясь решить эту проблему непосредственно в vba

Worksheets("TEST").Range("M18").Value = Worksheets("FACTUUR").Range("M16").Value & Worksheets("TEST").Range("M17").Value
Worksheets("TEST").Range("M18").NumberFormat = "0000/000"

Или даже путем изменения формата из самого Excel, но затем я получаю сообщение об ошибке напрямую (не знаю почему ...)

enter image description here

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вы находитесь в приложении Excel, настроенном для работы с десятичной запятой вместо десятичной точки.

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

=M16&"/"&TEXT(M17;"000")

Обратите внимание, что эта же формула может быть назначена ячейке в VBA с запятой:

Range("M18").Formula="=M16&""/""&TEXT(M17,""000"")"

(

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

Первая часть вашего кода изменяет только способ отображения номера для пользователя. Если вы щелкнете по ячейке M17 после запуска вашего кода, вы увидите, что фактическое значение просто 1, а не 001. Вам необходимо использовать формат $, как было предложено ранее BigBen, а затем объединить в соответствии с кодом ниже:

    Worksheets("test").range("M17").value = Worksheets("test").range("M17").value + 1
    Worksheets("test").range("M17").NumberFormat = "000"

    Dim firstValue As String: firstValue = Worksheets("test").range("M16").value
    Dim secondValue As String: secondValue = 
    Format$(Worksheets("test").range("M17").value, "000")
    Worksheets("test").range("M18").value = firstValue & "/" & secondValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...