2017-02-08 6 views
2

У меня есть плот Excel 2013 книг, которые я должен уточняю, каждый с несколькими листами и несколькими подключениями данных, и я ищу быстрый способ перечислить:Найти места, где соединения используются Excel VBA

  • имя соединения
  • строка соединения
  • место (а), где используются соединения (название листа или диапазон было бы полезно)

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

Dim conn As WorkbookConnection 
For Each conn In ActiveWorkbook.Connections 
Debug.Print conn.Name 
Next conn 

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

Приветствия

Kyle

ответ

2

Ожидаемый результат:

(Connection's Name): Sheet'sName|1st Cell of Range 
Connection's ODBC Command Text 
(Connection's Name): Sheet'sName|1st Cell of 1st Range // Sheet'sName|1st Cell of 2nd Range 

Здесь вы идете:

Private Sub List_Connections_Ranges() 

Dim wC As WorkbookConnection 
Dim rG As Range 
Dim TpStr As String 

For Each wC In ActiveWorkbook.Connections 
    TpStr = "(" & wC.Name & ") found on : " 
    For Each rG In wC.Ranges 
     TpStr = TpStr & rG.Parent.Name & "|" & rG.Cells(1, 1).Address(0, 0) & " // " 
    Next rG 
    Debug.Print Left(TpStr, Len(TpStr) - 4) 
    Debug.Print wC.ODBCConnection.CommandText 
Next wC 

End Sub 
+0

Спасибо R3uK, это именно то, что мне нужно. Я не мог понять, как использовать объект диапазона. –

+0

@KyleGorf: добро пожаловать! Чтобы увидеть, как это работает, поместите точку останова в цикле и щелкните правой кнопкой мыши на 'wC' и ** добавьте шпион **! Теперь вы можете просмотреть его, чтобы посмотреть, как структурированы данные внутри! ;) – R3uK

1

Код выглядит хорошо для меня. Вы можете попробовать это так, чтобы видеть, есть ли у вас связь на всех:

Public Sub TestMePlease() 

    Dim conn As WorkbookConnection 

    If ActiveWorkbook.Connections.Count > 0 Then 
     For Each conn In ActiveWorkbook.Connections 
      Debug.Print conn.Name 
     Next conn 
    Else 
     Debug.Print "No connection found" 
    End If 

End Sub 

Edit: Более подробную информацию о подключении в библиотеке. Чтобы увидеть ее, нажмите Ctrl + пробел, как это:

enter image description here

Относительно имени листа, то здесь:

Debug.Print conn.Ranges.Item(1).Parent.Name 

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

+1

Я думаю, что вы пропустили пункт здесь: * место (s), где соединения используются (название листа или диапазон был бы полезен) * Идея состоит в том, чтобы перечислить места в книге, в которой используются соединения. – R3uK

+0

Yup, я пропустил это. Я сделал редактирование, спасибо @ R3uK – Vityata