2017-01-27 4 views
0

Я столкнулся с проблемой, при которой специальные значения Excel VBA вставляют специальные значения, изменяя тип данных на текст, когда он выполняет операцию значений пасты, которая затем ломает нижестоящие формулы, которые ожидают увидеть число/дату вместо текста.Как предотвратить Excel VBA вставить специальные значения от изменения типа данных с номера/даты на текст

На высоком уровне процесса у меня есть следующий:

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

  2. выполняет операции над вновь созданным листом, включая копирование, вставка специальных значений;

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

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

Workbooks("myFile.xlsm").Sheets(pageFocus).Range(refreshCopyRange).Copy 

Workbooks("myFile.xlsm").Sheets(pageFocus).Range(pasteRange).PasteSpecial (xlPasteValues) 

Есть ли какое-то модификатор или переопределить для PasteSpecial (xlPasteValues), который остановит Excel VBA от изменения данных тип?

Большое спасибо за любую помощь!

+0

Я не могу воспроизвести вашу проблему с предоставленную вами информацию. Различные типы числовых данных остаются числовыми, когда я делаю код специальных значений для копирования/вставки. Пожалуйста, предоставьте достаточную информацию, чтобы воспроизвести вашу проблему. Я предлагаю вам прочитать [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Форматирование некоторых элементов может измениться, но они остаются числовыми, а не TExt –

+0

Спасибо Рон. Оказывается, часть моей проблемы - исходная база данных (через API) несовместима с типами данных, возвращаемыми для «дат». Иногда API-вызов в базу данных возвращает номер/дату, а для других полей он возвращает текст. Я нашел другую дискуссию на форуме, которая заставила меня поверить, что виноваты такие специальные значения, как здесь: http://stackoverflow.com/questions/28000600/excel-paste-special-using-values-only-also-copies -the-data-type-of-the-value-al ... однако это проблема с базой данных в основном в моем случае. Поэтому я сделал формулы перевода после API, которые всегда делают число/дату. – RMF

+0

Я бы подумал, что ссылка на НЕ будет надежным источником. Обратите внимание, что он имеет два downvotes, и в потоке нет заметного ответа. Что касается различных форматов, исходящих из вашего вызова API, частая причина этого заключается в том, что даты API действительны, но не в формате, который соответствует вашей региональной настройке Windows (например, mdy vs dmy). Когда это происходит, вы получаете сочетание текста, который выглядит как даты и реальные даты; фактические даты будут в основном ** неправильными **. например: «6/2/2017» из БД может быть «2 июня 2017 года», когда это должно быть «6 февраля 2017 года». Будьте осторожны, как вы переводите. –

ответ

1

Вы можете использовать этот

.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
      xlNone, SkipBlanks:=False, Transpose:=False 
+0

Я все еще тестирую, но я считаю, что это работает - большое спасибо datatoo! – RMF

1

Вам нужно сделать вторую команду вставки для форматирования:

Workbooks("myFile.xlsm").Sheets(pageFocus).Range(pasteRange).PasteSpecial xlPasteValues 
Workbooks("myFile.xlsm").Sheets(pageFocus).Range(pasteRange).PasteSpecial xlPasteFormats 

Вот пример:
https://social.msdn.microsoft.com/Forums/office/en-US/b593e52c-910c-4d24-b738-65878fe8a50d/how-to-copypaste-range-values-and-formats?forum=exceldev

+0

Возможно, нужно вставить форматы перед значениями –

+0

Спасибо Bookeater и Тим Уильямс. Я считаю, что ваши решения также могут работать в том же направлении, что и предложение Datatoo – RMF