Как предотвратить VBA для преобразования типа значения при копировании и вставке? - PullRequest
0 голосов
/ 24 мая 2019

Blockquote

привет, я пытаюсь скопировать и вставить значения столбца в формате текста из листа1 в лист 2. Однако тип значения автоматически изменяется на число.

Dim wb As Workbook Dim src As Worksheet Dim TGT As Worksheet Dim lastRow As Variant

Set wb = ThisWorkbook
Set src = wb.Sheets("sheet1")
Set tgt = wb.Sheets("sheet2")

lastRow = src.Range("A" & src.Rows.Count).End(xlDown).Row



tgt.Range("E43:E" & lastRow).Value = src.Range("A5:A" & lastRow).Value

что я получаю с этим кодом

 1
 2
 11
 12

данные отформатированы в листе 1 следующим образом:

 00000001
 00000002
 00000011
 00000012

и я хочу то же самое в листе 2

Ответы [ 3 ]

0 голосов
/ 24 мая 2019

Используйте функцию копирования, и она точно скопирует ячейку / с

src.Range("A5:A" & lastRow).Copy tgt.Range("E43:E" & lastRow)
0 голосов
/ 24 мая 2019

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

Вам также нужно изменить форму цели до того же размера, что и источник. Использование lastRow для обоих работает только тогда, когда они начинаются с одной и той же строки (чего нет в вашем примере).

Set wb = ThisWorkbook
Set src = wb.Sheets("sheet1")
Set tgt = wb.Sheets("sheet2")

with src

  lastRow = .Range("A" & .Rows.Count).End(XLUP).Row  '<~~ xlUp, not xlDown

  with .Range("A5:A" & lastRow)

    tgt.Range("E43").resize(.rows.count, .columns.count) = .Value2
    tgt.Range("E43").resize(.rows.count, .columns.count).numberformat = "00000000"

  end with

end with
0 голосов
/ 24 мая 2019

Удалить .Value и вы получите желаемый результат

Пример:

ThisWorkbook.Sheets("Sheet2").Range("B2") = ThisWorkbook.Sheets("Sheet1").Range("B2")

Редактировать: попробуйте следующую дополнительную строку

ThisWorkbook.Sheets("Sheet2").Range("A1") = ThisWorkbook.Sheets("Sheet1").Range("A1")
ThisWorkbook.Sheets("Sheet2").Range("A1").NumberFormat = ThisWorkbook.Sheets("Sheet1").Range("A1").NumberFormat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...