2015-08-25 4 views
2

Следующий код редактирует несколько книг excel, но прежде чем редактировать книги, он сначала проверяет, работает ли книга в режиме чтения/записи. Если это не так, это закрывает и открывает книгу до тех пор, пока чтение/запись не будет активным.Доступ/Excel VBA - Пропуск для каждого цикла

Я обеспокоен тем, что этот цикл будет продолжаться вечно, если я не включу какой-либо вариант выхода в следующую книгу.

Есть ли способ реализации простое диалоговое окно с кнопкой «Повторить» и «Пропустить», если цикл достигает определенной попытки число, например 5

Retry - повторить попытку петли

Пропустить - Пропустить следующая книга

For Each i In MyArray 

    xl.Workbooks.Open (i) 
    'If workbook in read only mode , close and open till read/write is active 
    Do Until xl.ActiveWorkbook.ReadOnly = False 
     xl.ActiveWorkbook.Close (False) 
     If GetAttr(i) = vbReadOnly Then _ 
      SetAttr i, vbNormal 
     xl.Workbooks.Open (i) 
    If xl.ActiveWorkbook.ReadOnly = False Then Exit Do 
    Loop 'Loop above till read/write active 

    '''''More code here when workbook read/write mode 
Next 
+0

Петля все книги. Внутри этого цикла зациклируйте все листы в текущей книге. – MatthewD

+0

Вы можете просто увеличивать переменную каждый раз и проверять, достигло ли определенного значения перед циклом. – Kyle

ответ

1

Я хотел бы добавить переменную-счетчик, чтобы отслеживать, сколько раз цикл побежал, а затем имеет вид поп-музыку, как только он пересекает порог.

Я бы реализовать его в код, как показано ниже:

For Each i In MyArray 

xl.Workbooks.Open (i) 

'Set an attempts counter 
attempts = 0 

'If workbook in read only mode , close and open till read/write is active 
Do Until xl.ActiveWorkbook.ReadOnly = False 
xl.ActiveWorkbook.Close (False) 
If GetAttr(i) = vbReadOnly Then _ 
SetAttr i, vbNormal 
xl.Workbooks.Open (i) 
If xl.ActiveWorkbook.ReadOnly = False Then Exit Do 

'Increment the attempts counter on each pass 
attempts = attempts + 1 
if attempts > 4 then 
    'Create your dialogue box, maybe have it set the attempts 
    ' counter back to zero and try the loop five more times 
    ' before hitting this stop again, or have it exit the loop 
    ' if the user chooses to skip 
end if 
Loop 'Loop above till read/write active 


‘’’’’More code here when workbook read/write mode 


Next 
0

В качестве альтернативы, если вы просто ищете MsgBox части, вы можете использовать что-то вроде этого, чтобы спросить пользователя, хотят ли они продолжать и информировать их число попытки:

Sub doloop() 
    Dim i As Integer 
    Dim answer 
    Do 
     i = i + 1 
     answer = MsgBox("Try again?", vbQuestion + vbYesNo, "Attempt " & i & " Failed!") 
     If answer = vbNo Then Exit Sub 
    Loop 
End Sub 

ИЛИ вы можете спросить это до конца своего собственного цикла:

If 'Condition to check that it failed' Then 
     i = i + 1 
     If i > 4 then 
      answer = MsgBox("Try again?", vbQuestion + vbYesNo, "Attempt " & i & " Failed!") 
      If answer = vbNo Then Exit Sub 
     End if 

     'Code to retry' 
End if 

Это ставит msgBox на повторную попытку и выходит раньше, чем повторять попытку, если пользователь нажимает No. (Только после 4 сбоев)

Смежные вопросы