Обновление всех соединений OLEDB в Excel 2007 через макрос - PullRequest
0 голосов
/ 20 сентября 2010

Я не признаюсь, что являюсь мастером Excel, поэтому, когда такие вещи появятся, я, как правило, могу написать макрос с максимальными усилиями, чтобы разобраться с любыми массовыми обновлениями, но на этот раз я в тупике.

Когда мы переносим наши отчеты, которые подключаются к источнику OLEDB и кубу, они сталкиваются со следующими двумя настройками соединения:

.RefreshOnFileOpen = True
.RefreshPeriod = 10

Мне нужно обновить все из них в рабочей книге до:

.RefreshOnFileOpen = False
.RefreshPeriod = 0

Запись макроса и изменение одного соединения приводит к следующему VB-скрипту:

Sub ChangeConn()
'
' ChangeConn Macro
'

'
    With ActiveWorkbook.Connections("Connection").OLEDBConnection
        .CommandText = Array("Something")
        .CommandType = xlCmdCube
        .Connection = Array( _
        "OLEDB;Provider=MSOLAP.3;Persist Security Info=True;User ID="""";Initial Catalog=Something;Data Source=Something;Location=Something" _
        , _
        "Something;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error" _
        )
        .RefreshOnFileOpen = False
        .SavePassword = False
        .SourceConnectionFile = ""
        .MaxDrillthroughRecords = 1000
        .ServerCredentialsMethod = xlCredentialsMethodIntegrated
        .AlwaysUseConnectionFile = False
        .RetrieveInOfficeUILang = False
        .ServerFillColor = False
        .ServerFontStyle = False
        .ServerNumberFormat = False
        .ServerTextColor = False
    End With
    With ActiveWorkbook.Connections("Connection")
        .Name = "Connection"
        .Description = ""
    End With
End Sub

Поэтому я подумал, что будет работать следующий макрос:

Sub FixConn()
 For Each OLEDBConnection In ActiveWorkbook.Connections
  .RefreshOnFileOpen = False
        .RefreshPeriod = 0
 Next OLEDBConnection
End Sub

Но нет ... Поэтому я буду продолжать пытаться выяснить это, но если кто-нибудь здесь сможет мне помочь, это было бы здорово.

[РЕДАКТИРОВАТЬ # 1] Благодаря Эндрю я стал на шаг ближе, и я перехожу по этой ссылке здесь. Кажется, я изменял этот объект не в том месте. :) http://msdn.microsoft.com/en-us/library/bb213295(office.12).aspx

[РЕШЕНИЕ]

Sub ReFixConn()
    For Each PivotCache In ActiveWorkbook.PivotCaches
        With PivotCache
            .RefreshOnFileOpen = False
            .RefreshPeriod = 0
        End With
    Next PivotCache
End Sub

Ответы [ 2 ]

0 голосов
/ 17 сентября 2014

Это также должно работать:

Sub FixConn()
 Dim cn as Workbookconnection
 For Each cn In ActiveWorkbook.Connections
  cn.OLEDBConnection.RefreshOnFileOpen = False
  cn.OLEDBConnection.RefreshPeriod = 0
 next
End Sub
0 голосов
/ 20 сентября 2010

Вы забыли блок С:

Sub FixConn()
 For Each OLEDBConnection In ActiveWorkbook.Connections
  With OLEDBConnection
   .RefreshOnFileOpen = False
   .RefreshPeriod = 0
  End With
 Next OLEDBConnection
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...