Я смотрел и не мог найти ответ на это конкретно. В приведенном ниже коде предлагается пользователю указать, открыт или нет конкретный файл. Если пользователь нажимает «нет», субконцы. Если они нажимают «да», суб-продолжение продолжается. Я тестировал это с открытым файлом, и все отлично работает. Но потом я забыл открыть файл и нажал да в ответ на запрос и получил следующее сообщение об ошибке:Проверка наличия файла для предотвращения ошибки
Ошибка выполнения «9»:
Подстрочный из диапазона
Для этой строки в коде:
с Workbooks («Поворотный - Master - декабрь 2015.xlsm»). Sheets («Поворот»)
Я понимаю, почему я получаю эту ошибку, но как я могу проверить, если «да» ответ от пользователь прав, чтобы предотвратить эту ошибку?
Вот полный код:
Sub Extract_Sort_1512_December()
'
'
Dim ANS As String
ANS = MsgBox("Is the December 2015 Swivel Master File checked out of SharePoint and currently open on this desktop?", vbYesNo + vbQuestion + vbDefaultButton1, "Master File Open")
If ANS = vbNo Then
MsgBox "This procedure will now terminate.", vbOKOnly + vbExclamation, "Terminate Procedure"
Exit Sub
End If
Application.ScreenUpdating = False
' This line renames the worksheet to "Extract"
ActiveSheet.Name = "Extract"
' This line autofits the columns C, D, O, and P
Range("C:C,D:D,O:O,P:P").Columns.AutoFit
' This unhides any hidden rows
Cells.EntireRow.Hidden = False
Dim LR As Long
For LR = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
If Range("B" & LR).Value <> "12" Then
Rows(LR).EntireRow.Delete
End If
Next LR
With ActiveWorkbook.Worksheets("Extract").Sort
With .SortFields
.Clear
.Add Key:=Range("B2:B2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("D2:D2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("O2:O2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("J2:J2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("K2:K2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Add Key:=Range("L2:L2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
.SetRange Range("A2:Z2000")
.Apply
End With
Cells.WrapText = False
Sheets("Extract").Range("A2").Select
Dim LastRow As Integer, i As Integer, erow As Integer
LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
If Cells(i, 2) = "12" Then
' As opposed to selecting the cells, this will copy them directly
Range(Cells(i, 1), Cells(i, 26)).Copy
' As opposed to "Activating" the workbook, and selecting the sheet, this will paste the cells directly
With Workbooks("Swivel - Master - December 2015.xlsm").Sheets("Swivel")
erow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
.Cells(erow, 1).PasteSpecial xlPasteAll
End With
Application.CutCopyMode = False
End If
Next i
Application.ScreenUpdating = True
End Sub
Я работал через много ошибок в этом коде в течение последних двух дней, и я немного жареным, поэтому любая помощь приветствуется.
Вот мой обновленный IF заявление, чтобы проверить состояние рабочей книги, необходимой для продолжения:
Dim ANS As String
ANS = MsgBox("Is the November 2015 Swivel Master File checked out of SharePoint and currently open on this desktop?", vbYesNo + vbQuestion + vbDefaultButton1, "Master File Open")
If ANS = vbNo Then
MsgBox "This procedure will now terminate.", vbOKOnly + vbExclamation, "Terminate Procedure"
Exit Sub
ElseIf IsWBOpen("Swivel - Master - November 2015") Then
End If
Хмм ваш, если выше тест должен работать. Почему оставить его пользователю? Откройте его с помощью кода. – findwindow
Все это работает, если файл открыт. Я получаю ошибку, когда файл не открыт, и пользователь нажимает «Да». Затем, когда макрос продолжается и пытается скопировать данные в файл, то есть когда я получаю ошибку. Я также провел исследование о том, как проверить и открыть файл из SharePoint, но я не могу заставить его работать для меня. Я думаю, что это связано с внутренней безопасностью, но пока не подтверждено. Вот почему я иду по маршруту MsgBox. –
Ah sharepoint. Запустите цикл как 'для каждого bk в application.workbooks | if bk.name = Swivel - Master - December 2015.xlsm then flag = "open" else flag = "not open" ', а затем выполнить тест на' flag' и сделать 'exit sub', если flag = not open. Имеет смысл? Изменить: 'bk.name' может дать весь путь, поэтому проверьте соответствующим образом. – findwindow