В это время я создал UserForm, чтобы изменить буквы на мой текст, используя три варианта:
- верхнийРЕГИСТР
- Строчные
- Правильная функция
Мой первый код используется Если -Тена структура, и все было нормально. Я поставил его ниже:
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
вы думаете, где 'OptionSelect' получит назначен' OptionUpper', 'OptionLower' или' OptionProper'? Считаете ли вы, что значение просто волшебным образом появляется, потому что вы добавили строку «Dim OptionSelect As Variant»? –
Как будто это была глупая ошибка. Я новичок в VBA, но я по-прежнему ценю ваш коммит. Спасибо – netuno26