2014-01-15 2 views
0

Я пытаюсь создать макрос, в который пользователь вводит свои инициалы в определенной ячейке, а макрос скопирует инициалы и вставляет их в список на другой вкладке. Мне сложно определить, как преобразовать его в верхний регистр, любая помощь, которую очень ценит ниже, - это мой код. Заранее спасибо!Скопируйте текст и сделайте его в верхнем регистре

'By Initials 
    Worksheets("New PN").Activate 
     Range("B10").Copy 
     Sheets("PN_List").Select 
     Range("F1").End(xlDown).Offset(1, 0).Select 
     Selection.PasteSpecial xlPasteValues 
     Selection.HorizontalAlignment = xlCenter 

     With Selection.Font 
    .Name = "Calibri" 
    .Size = 11 

End With 
+0

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

+0

Согласно http://stackoverflow.com/questions/7982220/differentiate-trim-and-trim-in-vba/7988125#7988125 строковая версия 'UCase $' быстрее, чем версия версии 'UCase' – brettdj

ответ

0

Используйте функцию UCASE. это работает для меня

ActiveCell = UCase(ActiveCell) 
+0

Спасибо, это именно то, что я хотел! Твое лучшее! –

0

Используйте Ucase функцию как это:

Dim initial as String 

initial = Ucase(Range("B10").Value) 
Range("F1").End(xlDown).Offset(1, 0).Value = initial 

Надеется, что это помогает.

+0

Здравствуйте и спасибо за быстрый ответ. Если вы не возражаете, показывая мне всю формулу с добавленной частью, я был бы признателен –

+0

Я думаю, что бреттдж уже покрыл большую часть вас. :) но что вы подразумеваете под «показывая мне всю формулу с добавленной частью»? – L42

1
  • правой кнопкой мыши вкладку листа PN Новый
  • View Code
  • скопируйте и вставьте код ниже

Этот код будет затем автоматически добавьте любое новое значение/с от B10 и B12 (вторая ячейка используется в качестве примера, поэтому c ода может работать в диапазоне, если необходимо) в первую пустую ячейку в столбце F на листе * PN_List *

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rng1 As Range 
Dim rng2 As Range 
Dim rng3 As Range 
Dim lngCnt As Long 

Set rng1 = Intersect(Range("B10,B12"), Target) 
If rng1 Is Nothing Then Exit Sub 
Set rng3 = Sheets("PN_List").Columns("F:F").Find("*", Sheets("PN_List").[f1], xlValues, , xlPrevious, xlByRows) 
If rng3 Is Nothing Then Set rng3 = Sheets("PN_List").[f1] 
For Each rng2 In rng1 
rng3.Offset(lngCnt + 1, 0) = UCase$(rng2) 
lngCnt = lngCnt + 1 
Next rng2 
End Sub 
+1

плюс один, для покрытия всего, что хочет OP. хотя немного продвинутая логика. : D – L42

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