2017-02-13 36 views
-2

У меня есть листы с сокращенными названиями, такие как «LOL» или ROFL»Имени ячейки на основе сокращенного названия листа

мне нужен макрос я должен пройти и впечатать полную фразу в левом заголовке в зависимости на котором указано имя листа.

Я знаю, как это сделать обычно с activesheet.name, но я не знаю, как записать полное имя. Я подозреваю, что это потребует случая и цикла какой-либо.

IE "LOL" -> Название заголовка будет "Laugh out Loud"

«Rofl» -> Название заголовка будет «Rolling on the floor laughing»

Спасибо!

+1

, где у вас есть сокращенное имя, отображаемое на полное имя? Значит, ваши примеры, конечно, не являются * реальным миром *. –

+0

Thats the thing, у меня нет этого. И я не хочу ссылку/лист руководства. Мне нужно, чтобы переназначение происходило за кулисами кода, если это было возможно. Спасибо –

+0

Почему вам не нужен лист карточек. Просто скрытая вкладка с отображением? В противном случае вы можете каждый раз загружать сопоставление в словарь или массив, а затем использовать это. EI другой способ вам придется вводить отображение по крайней мере один раз. –

ответ

2

Вот идея, как можно отобразить имена листов с помощью VBA кода с помощью Case Statments

Sub Example() 
    Dim WS As Worksheet 
    Dim OutputString As String 
    OutputString = "" 

    For Each WS In ThisWorkbook.Worksheets 
     Select Case WS.Name 
      Case "ROFL" 
       OutputString = "Rolling on floor laughing" 
      Case "LOL" 
       OutputString = "Laugh out loud" 
     End Select 

     'Do something 
     If OutputString <> "" Then 
      MsgBox "Output for desired name: " & OutputString 
      OutputString = "" 
     End If    
    Next WS 
End Sub 
+0

Не является ли условие 'If OutputString <>" "Then' назад? Думаю, я переместил бы эту часть в блок «Case Else» ;-) –

+0

@ Mat'sMug Я скорректировал свой ответ. Вы имеете в виду что-то вроде этого? Я очень ценю подсказку, поскольку сам учу каждый день. – Brad

+0

О, извините, я совершенно неправильно понял намерения! Я думал, что условный блок после 'Select Case' предназначен для обработки случая, когда совпадение было * не найдено *! : S –

4

Используйте словарь. На некоторых языках другое имя для него - это Map; это означало для этого.

Ссылка Microsoft Scripting выполнение библиотеки, и сделать функцию, единственной обязанность заключается в том, чтобы иметь дело с этим:

Private Function GetFullName(ByVal shortName As String) As String 
    Static values As Scripting.Dictionary 
    If values Is Nothing Then 
     Set values = New Scripting.Dictionary 
     values.Add "LOL", "Laugh out Loud" 
     values.Add "ROFL", "Rolling on the floor laughing" 
     '... 
    End If 

    If values.Exists(shortName) Then 
     GetFullName = values(shortName) 
    Else 
     'raise an error: 
     'Err.Raise 5, "GetFullName", "Key '" & shortName & "' was not found." 
     '...or otherwise handle the situation for a missing key. 
    End If 
End Function 

Недостатком является то, что, ну, вы смешиваете данные с кодом здесь. Данные отсутствуют принадлежат в коде. У вас может быть (скрытый?) Рабочий лист, чтобы вместо этого удерживать таблицу с данными сопоставления и заполнять словарь из этой таблицы. Таким образом, когда сопоставления должны измениться, ваш код этого не делает.

+0

Привет, благодарю вас за ваш ответ. Я не могу использовать карту/ref sheet, даже скрытую bc, я планирую распространять ее другим в своих личных макросах. таким образом, его можно использовать в любом открытом документе без дополнительной работы (для тех, кто ничего не знает о макросах) я стараюсь максимально упростить их для этих людей. Еще раз спасибо! –

+1

Как вы его распространяете? Как надстройка Excel (.xlam)?Надстройка Excel * - это рабочая книга, и вы можете очень хорошо использовать ее рабочие листы для хранения данных. Извините, я не понимаю, в чем проблема. –

+0

мой план xlsb –