Используя TFS 18 месяцев назад, я нашел это багги, медленные, раздражающие, очень ограниченные критерии поиска и это имели чувство продукта, выбежавшего командой незаинтересованных, под заплаченным, по обработанному techs, вынуждаемому использовать Sharepoint и другие технологии MS, потому что это - то, что хотел маркетинг. Серьезно это была собака, я буду скорее использовать SourceSafe!
SVN, с другой стороны, является разрядным техником, интеграция IDE является болью, и это может иногда запутываться, но база пользователей значительна, и большая часть вопроса может быть решена с быстрым ТАК quesition.
Вы рассмотрели Хранилище ? Работы хорошо, и не слишком дороги.
Если это не особо изменяемая рабочая книга (т.е. рабочие листы не добавляются и не удаляются все время), вы можете сохранить имена рабочих листов в диапазоне на скрытом листе и выполнить цикл их по имени.
Однако похоже, что они хранятся в книге последовательно, поэтому, основываясь на решении Матиаса, вы можете использовать функцию для возврата индексов начального и конечного рабочих листов, а затем выполнить цикл:
Public Function GetStartIndex() As Integer
On Error Resume Next
GetStartIndex = ThisWorkbook.Worksheets("MyStartingWorksheet").Index + 1
End Function
Public Function GetEndIndex() As Integer
On Error Resume Next
GetEndIndex = ThisWorkbook.Worksheets("MyEndingWorksheet").Index - 1
End Function
Sub LoopThrough()
Dim wks As Worksheet
Dim i As Integer
Dim iStart As Integer
Dim iEnd As Integer
iStart = GetStartIndex()
iEnd = GetEndIndex()
If iStart > 0 And iEnd > 0 And iEnd > iStart Then
For i = iStart To iEnd
Set wks = ThisWorkbook.Worksheets(i)
MsgBox wks.Name
Next i
End If
End Sub
I believe that if you use "foreach" you won't have any control over the starting sheet. For that matter, I am not even sure you are guaranteed the order in which the iteration will take place.
I think what you should do is first, get the index of the sheet you are interested in (get the sheet by name, and get its index), and then iterate using a for loop, over the indexes of the sheets starting at the flag sheet index.
[Edit: I hacked through a quick example]
Sub Iterate()
Dim book As Workbook
Dim flagIndex As Integer
Dim flagSheet As Worksheet
Set book = ActiveWorkbook
Set flagSheet = book.Worksheets("Sheet3")
flagIndex = flagSheet.Index
Dim sheetIndex As Integer
Dim currentSheet As Worksheet
For sheetIndex = flagIndex To book.Worksheets.Count
Set currentSheet = book.Worksheets(sheetIndex)
Next
End Sub
Имеют ли листы, которые вы перебираете, общий формат имени?
Пример)
Sheets(0).name > "Reports"
Sheets(1).name > "Start Here"
Sheets(2).name > "emp.0001"
Sheets(3).name > "emp.0002"
Sheets(4).name > "emp.0003"
Sheets(5).name > "emp.0004"
Sheets(6).name > "End Here"
Если да, то в каждом цикле для каждого просто выполните Left (ThisWorkSheet.name , 4) = "emp"
, чтобы проверить, хотите ли вы ссылаться на лист.
How about?
For Each ThisWorkSheet In Worksheets
If ThisWorkSheet.Name = "FlagStart" Then output = true
If ThisWorkSheet.Name = "FlagEnd" Then Exit For
If output = true Then MsgBox "This worksheet name is: " & ThisWorkSheet.Name
Next
This code might not be quite right. I'm writing it in the SO editor not VBA, but you get the idea.