VBA ADO Excel 2010

爷,独闯天下 提交于 2019-12-24 17:15:28

问题


Hi I am working in a excel file with 46 pivot tables. The code below changes the connection of each pivot table to a new existing connection.

Sub changeConnection()
  Dim pTable As Variant
  Dim sheet As Variant
  Dim workBookName As String 

  workBookName = "filename.xlsm"      

  For Each sheet In Workbooks(workBookName).Worksheets
    For Each pTable In sheet.PivotTables
       pTable.changeConnection Workbooks(workBookName ).Connections("connection name")
    Next pTable
  Next sheet

End Sub

I want everything to stay the same for my pivot tables but I want a password on the file that I am connected to. Since excel can not do this I used ADO to access a password protected excel file.

Public Function readFile()
Dim xl As Object
Dim conn As New ADODB.connection
Dim recSet As ADODB.Recordset
Dim conString As String
Dim wkbName As String
Dim SQL As String
Dim DBPath As String

'Path to excel file
DBPath = "path\to\file.xlsm"
Set xl = GetObject(DBPath)

'Name of table
wkbName = "[IS$]"

conString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"

'Query
SQL = "select * from " & wkbName

'Open connection
conn.Open conString

'Itterate over record set
Set recSet = New ADODB.Recordset
recSet.Open SQL, conn

'Print out col1 from table
Do Until recSet.EOF
    'process your data here
    Debug.Print recSet!ISData
    recSet.MoveNext
Loop
End Function

The code above will access a table inside of the password protected workbook stored externally. Then using a record set print out in debug all the items.

I want to essentially use my workaround in the second snippet of code so I can replace all my pivot table connections so my data source can have a password on it. All my pivot tables point to the same connection so using the same connection won't cause issues.

Thank in advance and please comment if I should clarify anything.


回答1:


IIR there isn't a data provider that can do this. That driver will give an error to the effect of “could not decrypt file” even if you attempt to store the password in the connection string.

The second bit of code is basically a hack to get around this and it relies on Excel to manage the credential prompt from the user. It does not solve the fact that you can't supply a password in your connection string - it is a work-around. Given that you can't supply a connection string that works to ADO, you're not going to be able to supply it to the stored connection string either.

I would suggest using an actual database for the back end instead of an Excel file. This will give you much more flexibility in managing user access.



来源:https://stackoverflow.com/questions/51664756/vba-ado-excel-2010

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!