Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
не работает Обработка ошибки - с использованием цикла, при использовании цикла, в который встроен обработчик ошибки - процедура работает не так, как задумано :-)
 
Спасибо огромное!
не работает Обработка ошибки - с использованием цикла, при использовании цикла, в который встроен обработчик ошибки - процедура работает не так, как задумано :-)
 
Добрый день!

Помогите, пожалуйста, исправить код.

Цель процедуры: убрать пароль со структуры файла, используя набор уже известных паролей.
т.е. есть 300 файлов с разными паролями, но всего паролей 5-10 и они известны и повторяются.
чтобы не указывать макросу пароль для каждого файла - написана такая процедура:

есть массив из 10 паролей
Код
Dim Password_No(20) As String
процедура перебирает по очереди разные пароли, и в случае ошибки - включается обработчик ошибки:
Код
ActiveWorkbook.Unprotect Password_No(x)
Но при несовпадении пароля - оператор On Error - отправляет нас в область ErrorPas
В этой области к индексу "x" - добавляется "1"  
и процедура возвращается к снятию защиты с книги

Проблема:
обработка ошибки срабатывает как задумано только один раз.
Если натравить этот макрос на файл с запароленной структурой, где пароль "12345" (это третий пароль в нашем массиве), то:

- процедура пробует пароль №1 "1234567" - ошибка
-> область обработки ошибки ErrorPas
-> в этой области к "х" прибавляется 1  
-> х=2
-> процедура возвращается к метке "ResumeUnprotect"
-> процедура пробует пароль №2 "123456" - ошибка
-> вместо перехода к области ErrorPas - выполнение прерывается с ошибкой "не верный пароль"
и до правильного пароля мы не доходим всего одну итерацию.

1. возможно ли в принципе использование обработки ошибки с циклами?
2. если да, то как исправить этот код?


Весь код:
(если не удобно смотреть - могу добавить комментарии
Код
Sub test_1()
    Dim Password_No(20) As String
    Password_No(1) = "1234567"
    Password_No(2) = "123456"
    Password_No(3) = "12345"
    
    x = 1
ResumeUnprotect:
Err.Clear
        On Error GoTo ErrorPas
        MsgBox "x = " & x
        ActiveWorkbook.Unprotect Password_No(x)
        RealPass = Password_No(x)
        MsgBox "Пароль: " & RealPass
    'Next x
    
GoTo Ends
ErrorPas:
    x = x + 1
    If x > 20 Then
        MsgBox "Пароли кончились"
        GoTo Ends
    End If
GoTo ResumeUnprotect
Ends:End Sub

на всякий случай - прилагаю файл с запароленной структурой. пароль "12345"
Преобразование текста в команду VBA
 
Добрый день!

каким образом можно "сцепить" текст комманды и запустить её в VBA?

Например.
Есть простая пользовательская форма с десятью текстовыми полями: Label1, Label2, ... Label10
Есть переменная-массив с десятью текстовыми значениями:
Код
Dim strName(10) as String

Необходимо значения из каждого элемента strName перенести в текстовые поля.
То есть придать значение свойству caption:
Код
UserForm1.Label1.Caption = strName(1)
UserForm1.Label2.Caption = strName(2)
UserForm1.Label3.Caption = strName(3)

Можно ли создать текст комманды:
Код
dim TEXT(10) as String
for n = 1 to 10 
     TEXT(n) = "UserForm1.Label" & n & ".Caption = strName(" & n & ""
Next n
А потом запустить получившуюся команду?
если да, то каким образом?
Изменено: Александр - 03.04.2015 23:00:46
Страницы: 1
Наверх