Option Compare Text
Sub Example()
If StrComp("ABC", "abc", vbBinaryCompare) = 0 Then
MsgBox "Строки равны."
Else
MsgBox "Строки не равны."
End If
End Sub
Можно ли верменно отключить "Option Compare Text"?
У меня в декларациях заряжено Option Compare Text. А могу ли я в какой-то процедуре временно это отключить (чтобы учитывать регистр букв)?
Цитата: Dmitry2064
У меня в декларациях заряжено Option Compare Text. А могу ли я в какой-то процедуре временно это отключить (чтобы учитывать регистр букв)?
Используйте функцию StrComp() с указанием соответствующего режима сравнения строк.
Код:
Код:
Sub RenameBMPFile()
ipath$ = ActiveDocument.Path & "\"
iFileName$ = Dir(ipath$ & "*.bmp")
Do While iFileName$ <> ""
iTempName$ = iFileName$
For iCount% = 1 To Len(iFileName$)
iSymbol$ = Mid(iFileName$, iCount%, 1)
If iSymbol$ Like "[Т-Э]" Then _
Mid(iTempName$, iCount%, 1) = "1"
Next
If iTempName$ <> iFileName$ Then _
Name ipath$ & iFileName As ipath$ & iTempName$
iFileName = Dir
Loop
End Sub
ipath$ = ActiveDocument.Path & "\"
iFileName$ = Dir(ipath$ & "*.bmp")
Do While iFileName$ <> ""
iTempName$ = iFileName$
For iCount% = 1 To Len(iFileName$)
iSymbol$ = Mid(iFileName$, iCount%, 1)
If iSymbol$ Like "[Т-Э]" Then _
Mid(iTempName$, iCount%, 1) = "1"
Next
If iTempName$ <> iFileName$ Then _
Name ipath$ & iFileName As ipath$ & iTempName$
iFileName = Dir
Loop
End Sub
Т.е. я тут менял (как мне подсказали) проблемные большие буквы просто на единичку (как сначала хотел) (см. выделенное жирным). А можно ли как-то записать, что если символы такие, как в скобках, то делать их маленькими? А пока я сделал в лоб:
Код:
If iSymbol$ Like "Т" Then Mid(iTempName$, iCount%, 1) = "т"
If iSymbol$ Like "У" Then Mid(iTempName$, iCount%, 1) = "у"
...
If iSymbol$ Like "Э" Then Mid(iTempName$, iCount%, 1) = "э"
If iSymbol$ Like "У" Then Mid(iTempName$, iCount%, 1) = "у"
...
If iSymbol$ Like "Э" Then Mid(iTempName$, iCount%, 1) = "э"
Дополнит. мысли:
1. Может быть просто зарядить условие, что все буквы должны быть маленькими? (без всяких там "значений в интервале [Т-Э]").
2. Если сидит OptionCompareText, то условие If iTempName$ <> iFileName$ Then _ всегда оказывается ложным. А при отключении OptionCompareText переименовывается, при включении - нет (что логично).
Я бы вообще убрал эту OptionCompareText, но у меня Instr сидит местах в 30, поэтому замучаюсь все отлавливать и исправлять на StrComp. Или это можно сделать банальной заменой по всему модулю Instr нa StrComp?
Цитата: Dmitry2064
...А можно ли как-то записать, что если символы такие, как в скобках, то делать их маленькими? А пока я сделал в лоб:
Код:
If iSymbol$ Like "Т" Then Mid(iTempName$, iCount%, 1) = "т"
If iSymbol$ Like "У" Then Mid(iTempName$, iCount%, 1) = "у"
...
If iSymbol$ Like "Э" Then Mid(iTempName$, iCount%, 1) = "э"
If iSymbol$ Like "У" Then Mid(iTempName$, iCount%, 1) = "у"
...
If iSymbol$ Like "Э" Then Mid(iTempName$, iCount%, 1) = "э"
1. Выражения вида [color=red]Mid(iTempName$, iCount%, 1) = "э"[/color] являются ошибочными.
2. Думаю, что в подобном случае удобнее поступить так:
Код:
iSymbol$ = Mid(iFileName$, iCount%, 1)
intAsc% = Asc(iSymbol$)
If intAsc% >= 210 And intAsc% <= 221 Then
MsgBox Chr(intAsc% + 32)
End If
intAsc% = Asc(iSymbol$)
If intAsc% >= 210 And intAsc% <= 221 Then
MsgBox Chr(intAsc% + 32)
End If
Цитата: Dmitry2064
...Или это можно сделать банальной заменой по всему модулю Instr нa StrComp?
Нельзя.