2015-09-14 3 views
0

Как создать индекс для всех листов автоматически, у меня много клиентов, с листом для каждого клиента.Список всех листов со ссылкой

Я также хочу показать некоторые данные в индексе всех листов.

см изображение image

images

ответ

2

Loop через листы, создающие соединения для каждого из них. Это перечислит их, начиная с активной ячейки.

Sub CreateLinksToAllSheets() 
Dim sh As Worksheet 
Dim cell As Range 
Dim strLink As String 

For Each sh In ActiveWorkbook.Worksheets 

    If ActiveSheet.name <> sh.name Then 

     strLink = sh2.name 
     If InStr(strLink, "'") Then 
      strLink = Replace(strLink, "'", "''") 
     End If 

     ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & strLink & "'" & "!A1", TextToDisplay:=sh.name 

     ' Here you can get the amount and mobile and write them to the adjacent columns. 
     ActiveCell.Offset(0, 1).Value = Excel.worksheetFunction.Sum(sh.Range("A:A")) 
     ActiveCell.Offset(0, 2).Value = sh.Range("G1").Value 

     ActiveCell.Offset(1, 0).Select 

    End If 

Next sh 

End Sub 

Если вы хотите жестко определить, куда идут ссылки, вы можете сделать это вот так.

Sub CreateLinksToAllSheets() 
Dim sh As Worksheet 
Dim sh2 As Worksheet 
Dim cell As Range 
Dim lRow As Long 

    Set sh = ActiveWorkbook.Sheets("Sheet1") 
    lRow = 1 

    For Each sh2 In ActiveWorkbook.Worksheets 

     If ActiveSheet.name <> sh2.name AND sh2.name <> "new customer" AND sh2.name <> "old archive" Then 

      strLink = sh2.name 
      If InStr(strLink, "'") Then 
       strLink = Replace(strLink, "'", "''") 
      End If 

      sh.Hyperlinks.Add Anchor:=sh.Range("A" & lrow), Address:="", SubAddress:="'" & strLink & "'" & "!A1", TextToDisplay:=sh2.name 
      sh.Range("B" & lRow).Value = Excel.worksheetFunction.Sum(sh2.Range("A:A")) 
      sh.Range("C" & lRow).Value = sh2.Range("G1").Value 

      lRow = lRow + 1 

     End If 

    Next sh2 

End Sub 

РЕДАКТИРОВАТЬ: ОП спрашивает
Как можно сделать значение в столбце В и С Значение быть возобновлена ​​внутри листов? Пример: Столбец B: = SUMMA (Customer1! A: A) Столбец C: = Customer1! G1

Свойство формулы можно использовать. Вставьте имя листа из текущего листа sh2, используя sh2.Name.

sh.Range("B" & lRow).Formula = "=SUM(" & sh2.Name & "!A:A)" 
sh.Range("C" & lRow).Formula = "=" & sh2.Name & "!G1" 

EDIT: OP обнаружил, что создание гиперссылки на листе, который имеет апостроф в имени не создает ссылку функционирования.

Чтобы исправить это, мы можем добавить проверку на наличие апострофа в имени листа. Если мы найдем один, мы заменим его двумя апострофами.

strLink = sh2.name 
If InStr(strLink, "'") Then 
    strLink = Replace(strLink, "'", "''") 
End If 

И изменить hyperlinks.add создать Subaddress: = " '& strLink & "'"

sh.Hyperlinks.Add Anchor:=sh.Range("A" & lrow), Address:="", SubAddress:="'" & strLink & "'" & "!A1", TextToDisplay:=sh2.name 
+0

Совершенная, Как я могу сделать значение в столбце B и C Значение возобновляться из в пределах листов. Пример: Столбец B: '= SUMMA (Customer1! A: A)' Столбец C: '= Customer1! G1' Также существует исключение из одной страницы? пример: имя листа: индекс, индекс AND2 и индекс3. – Horby

+0

@Horby. См. Редактирование моего ответа для первого вопроса. – MatthewD

+0

Я не следую вашему второму вопросу. Также может быть исключение из одной страницы? Можете ли вы объяснить, что вы ищете, более подробно? – MatthewD

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