2014-09-16 3 views
0

Я работаю с идентификационными кодами длиной восемь символов (все числовые). Каждые две цифры представляют собой уникальный идентификатор. Например, код 10203040 - Транспортные средства (10), Грузовые автомобили (20), 4x4 (30), Toyota (40). В листе Excel я хочу, чтобы люди могли вводить 8-значный код и отображать дескрипторы уровня 1, 2, 3 и 4, а также полное описание. Как я достигаю этого, это взятие 8-значного кода, преобразование его в текст в столбцы с фиксированной шириной, а затем выполнение VLOOKUP для каждого 2-значного кода. Макрос для этого:Сохранить текст в столбцах как значения

Sub Macro2() 
    Dim UNSPSC As String 
    UNSPSC = Range("A2") 

    Range("B2") = UNSPSC 

    Range("B2").Select 

    Selection.TextToColumns Destination:=Range("B2"), DataType:=xlFixedWidth, _ 
     FieldInfo:=Array(Array(0, 1), Array(2, 1), Array(4, 1), Array(6, 1), Array(8, 1)), _ 
     TrailingMinusNumbers:=True 

End Sub 

Хотя это работает, проблема в том, что любой, кто делает несколько запросов должны нажать раздражающее предупреждение о замене клеток в каждый момент времени (текст на столбцы скрыты). Есть ли способ сохранить текст в столбцах в качестве значения или строки, чтобы это предупреждение не отображалось (т. Е. Нет перезаписи данных в ячейках)? Теоретически я мог бы вывести значения в VLOOKUP внутри кода макроса/VBA.

+2

Рассматривали ли вы просто подавление предупреждающих сообщений? В начале кода вы можете добавить 'Application.DisplayAlerts = False', но не забудьте включить его в конце с помощью' Application.DisplayAlerts = True'. Подробнее о [DisplayAlerts] (http://msdn.microsoft.com/en-us/library/office/ff839782 (v = office.15) .aspx). – Soulfire

+0

^хорошие предложения. Я думал создать новый пустой лист и заполнить его вашими ценностями. Не нужно беспокоиться о перезаписывании. – durbnpoisn

+0

Спасибо, Джош. Я не был знаком с этими командами. Используются те, и это работает как сон. Я подумал, что должно быть какое-то более простое решение. Спасибо! –

ответ

0

OP кажется, возможно, предпочтет выключая оповещение, но ради ответа, добавить:

Range("B2:E2") = "" 

сразу после Dim заявления.

Смежные вопросы