Private Sub Command1_Click()
Dim nameOLD, nameNew As String
File1.Path = Text1.Text
File1.Pattern = "*.bmp"
For i = 0 To File1.ListCount - 1
nameOLD = Left(File1.List(i), InStr(1, File1.List(i), ".bmp") - 1)
nameNew = ""
For ii = 1 To Len(nameOLD) 'перебираем буквы названия
myletter = Mid(nameOLD, ii, 1)
If Asc(myletter) < 222 And Asc(myletter) > 209 Then
myletter = 1
End If
nameNew = nameNew & myletter
Next
MsgBox nameNew
'Name File1.Path & "\" & nameOLD & ".bmp" As File1.Path & "\" & nameNew1 & ".bmp"
Next
End Sub
можно ли код VB перенести в VBA?
Код:
Можно ли его как-то модифицировать, что бы из-под Ворда он бы тоже работал? Сейчас (в Ворде) он останавливается на строке File1.Path = Text1.Text со словами [COLOR="Red"]Object Required [/COLOR](что ессно).
Ну и совсем было бы замечательно не привязывать его к конкретной директории, начинать действовать в текущей.
А выдает File1.Path = Text1.Text = [COLOR=red]Object Required [/COLOR][COLOR=black]изз-за того, что объекта Text1.Text не существует. Создайте форму и работайте на здоровье :)[/COLOR]
Цитата: SkyM@n
А выдает File1.Path = Text1.Text = [COLOR=red]Object Required [/COLOR][COLOR=black]изз-за того, что объекта Text1.Text не существует. Создайте форму и работайте на здоровье :)[/COLOR]
А в ВБА под Вордом вроде нельзя создавать формы? Или надо создать объект File?
Код:
Sub RenameMy()
Dim MyPath As String, nameOLD As Variant
iPath = ActiveDocument.Path
iPath = ActiveDocument.Path & "\"[COLOR="DarkGreen"] 'добавили слешку для корректной работы Dir'a[/COLOR]
iFileName = Dir(iPath & "*.bmp")
Do While iFileName <> ""
nameNew = "" [COLOR="DarkGreen"]'заготовили чистую переменную[/COLOR]
For i = 1 To Len(iFileName) [COLOR="DarkGreen"]'перебираем буковки[/COLOR]
myletter = Mid(iFileName, i, 1) [COLOR="DarkGreen"]'выудили i-ю буковку[/COLOR]
If Asc(myletter) > 209 And Asc(myletter) < 222 Then
myletter = 1 [COLOR="DarkGreen"]'избавляемся от проблемных 209-222 символов[/COLOR]
End If
nameNew = nameNew & myletter [COLOR="DarkGreen"]'не спеша добавляем в пустую переменку по буковке _
одну за другой :) [/COLOR]
Next
MsgBox nameNew [COLOR="DarkGreen"]'до этой строки все прекрасно[/COLOR]
Name File1.Path & "\" & iFileName & ".bmp" As File1.Path & "\" & nameNew & _
".bmp" 'тут остановка, т.к. опять же [COLOR="Red"]Object Required[/COLOR]
iFileName = Dir
Loop
End Sub
Dim MyPath As String, nameOLD As Variant
iPath = ActiveDocument.Path
iPath = ActiveDocument.Path & "\"[COLOR="DarkGreen"] 'добавили слешку для корректной работы Dir'a[/COLOR]
iFileName = Dir(iPath & "*.bmp")
Do While iFileName <> ""
nameNew = "" [COLOR="DarkGreen"]'заготовили чистую переменную[/COLOR]
For i = 1 To Len(iFileName) [COLOR="DarkGreen"]'перебираем буковки[/COLOR]
myletter = Mid(iFileName, i, 1) [COLOR="DarkGreen"]'выудили i-ю буковку[/COLOR]
If Asc(myletter) > 209 And Asc(myletter) < 222 Then
myletter = 1 [COLOR="DarkGreen"]'избавляемся от проблемных 209-222 символов[/COLOR]
End If
nameNew = nameNew & myletter [COLOR="DarkGreen"]'не спеша добавляем в пустую переменку по буковке _
одну за другой :) [/COLOR]
Next
MsgBox nameNew [COLOR="DarkGreen"]'до этой строки все прекрасно[/COLOR]
Name File1.Path & "\" & iFileName & ".bmp" As File1.Path & "\" & nameNew & _
".bmp" 'тут остановка, т.к. опять же [COLOR="Red"]Object Required[/COLOR]
iFileName = Dir
Loop
End Sub
Вот как бы так извернуться, что бы объект все же НЕ создавать (в отпущенное для жизни время не справлюсь) :o
Код:
Private Sub RenameBMPFile()
iPath$ = ActiveDocument.Path & "\"
iFileName$ = Dir(iPath$ & "*.bmp")
Do While iFileName$ <> ""
iTempName$ = iFileName$
For iCount% = 1 To Len(iFileName$) - 4
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$) - 4
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
Цитата: pashulka
Код:
Private 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
pashulka, символ после названия переменной, встретившейся в блоке первый раз - это вроде объявления переменной определенного типа?
Где можно почитать?? Интересная фича!
здесь даже можно увидеть весь список подобных символов, только продолжения ждать, увы, не приходится, ибо Microsoft больше не вводит новых символов.
koltaviy, VB(A) действительно поддерживает символьное описание типа Dim iPath$, iCount% и
Dim FSO as Object
Set FSO = CreateObjects("Scripting.FileSystemObject")
И далее по докам :)
Или вообще на API написать...
Цитата: gruz0
А можно через FSO реализовать :)
Dim FSO as Object
Set FSO = CreateObjects("Scripting.FileSystemObject")
И далее по докам :)
Или вообще на API написать...
Dim FSO as Object
Set FSO = CreateObjects("Scripting.FileSystemObject")
И далее по докам :)
Или вообще на API написать...
Спасибо Пашульке. Хотя для меня это воспринимается как фокус. Вроде примерно тоже, но работает! :)
А на CreateObjects ругается, что функция или объект не определены.
Но и как есть тоже хорошо.
API я и не знаю (мне бы с ВБА разобраться :o ) да и запускать все приходится вроде только из-под Ворда. Тем более, если можно максимум задач реализовывать из-под одного приложения, то и не имеет смысла создавать дополнительные типа "модули". Еще раз большое спасибо.
Так всегда происходит, когда люди используют постороннии об'екты в которых, на самом деле, нет никакой необходимости. Впрочем, если для перебора файлов нельзя использовать функцию VB Dir() или об'ект FileSearch, который можно использовать в т.ч. и в Word97,2000,2002,2003 и очень хочется помучить FSO, то либо CreateObject("Scripting.FileSystemObject"), либо подключить соответствующую библиотеку, т.е. ALT+F11-Tools-References-Microsoft Scripting-Runtime-OK, и Dim FSO As New Scripting.FileSystemObject