2016-05-06 4 views
0

ребята!UserForm для изменения текста в верхнем регистре, в нижнем регистре или с использованием надлежащей функции

В это время я создал UserForm, чтобы изменить буквы на мой текст, используя три варианта:

  1. верхнийРЕГИСТР
  2. Строчные
  3. Правильная функция

Мой первый код используется Если -Тена структура, и все было нормально. Я поставил его ниже:

Private Sub OkButton_Click() 
    Dim WorkRange As Range 
    Dim cell As Range 

'Detects only constant type (text; excludes formulas) 
    On Error Resume Next 
    Set WorkRange = Selection.SpecialCells(xlCellTypeConstants, xlCellTypeConstants) 

'Uppercase 
    If OptionUpper Then 
     For Each cell In WorkRange 
      cell.Value = UCase(cell.Value) 
    Next cell 
    End If 

'Uppercase 
    If OptionLower Then 
     For Each cell In WorkRange 
      cell.Value = LCase(cell.Value) 
     Next cell 
    End If 

'Using Proper Function 
    If OptionProper Then 
     For Each cell In WorkRange 
      cell.Value = Application.WorksheetFunction.Proper(cell.Value) 
     Next cell 
    End If 
    Unload UserForm1 
End Sub 


Private Sub UserForm_Click() 

End Sub 

Я использовал режим для запуска UserForm1:

Sub ChangeCase2() 
    If TypeName(Selection) = "Range" Then 
     UserForm1.Show 
    Else 
     MsgBox "Selection a range.", vbCritical 
    End If 
End Sub 

И все работало нормально. Но потом я подумал: возможно ли использовать структуру Select Case? Поэтому я пробовал и, к сожалению, не бежал. Заглавная опция работает как строчная, а нижняя и верхняя - как верхний. Я просмотрел заголовки, которые я дал кнопкам, и все в порядке. Может, помогите мне, пожалуйста?

Private Sub CancelButton_Click() 
    Unload UserForm2 
End Sub 

Private Sub OkButton_Click() 
    Dim WorkRange As Range 
    Dim cell As Range 
    Dim OptionSelect As Variant 

    On Error Resume Next 
    Set WorkRange = Selection.SpecialCells(xlCellTypeConstants, xlCellTypeConstants) 

    Select Case OptionSelect 
     Case OptionUpper 'Letras Maiúsculas 
      For Each cell In WorkRange 
       cell.Value = UCase(cell.Value) 
      Next cell 
     Case OptionLower 'Letras Minúsculas 
      For Each cell In WorkRange 
       cell.Value = LCase(cell.Value) 
      Next cell 
     Case OptionProper 'Iniciais Maiúsculas 
      For Each cell In WorkRange 
       cell.Value = Application.WorksheetFunction.Proper(cell.Value) 
      Next cell 
    End Select 
    Unload UserForm2 
End Sub 

Я использовал другой режим UserForm2:

Sub ChangeCase3() 
    If TypeName(Selection) = "Range" Then 
     UserForm2.Show 
    Else 
     MsgBox "Selection a range.", vbCritical 
    End If 
End Sub 
+1

вы думаете, где 'OptionSelect' получит назначен' OptionUpper', 'OptionLower' или' OptionProper'? Считаете ли вы, что значение просто волшебным образом появляется, потому что вы добавили строку «Dim OptionSelect As Variant»? –

+0

Как будто это была глупая ошибка. Я новичок в VBA, но я по-прежнему ценю ваш коммит. Спасибо – netuno26

ответ

0

вместо

Select Case OptionSelect 

использования

Select Case True 

это даст вам правильное значение, соответствующее OptionButtons значений против

+0

Спасибо большое! Но по-прежнему возникает вопрос: почему на этом примере Microsoft не использовался Case Select True? Я следую этому примеру и думал, что моя переменная Option Select получит опции Case Select. Я знаю, что я, вероятно, совершаю какую-то ошибку, но я изо всех сил пытаюсь ее идентифицировать. – netuno26

+0

Должен ли я стирать строку Dim OptionSelect As Variant beacuse, это было необязательно? – netuno26

0

Первый код принимает значение для OptionSelect откуда-то.

Если он работал там, то проблема заключается в том, что в вашем втором коде у вас есть эта дополнительная строка:

Dim OptionSelect As Variant 

На этой линии вы делаете это значение пустым, поэтому он будет делать Select Case бесполезным, так как есть неважно.