【问题标题】:VBA ADO Excel 2010VBA ADO Excel 2010
【发布时间】:2019-01-10 21:11:03
【问题描述】:

您好,我正在处理一个包含 46 个数据透视表的 excel 文件。下面的代码将每个数据透视表的连接更改为新的现有连接。

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

我希望我的数据透视表的所有内容都保持不变,但我希望在我连接的文件上设置一个密码。由于 excel 无法做到这一点,我使用 ADO 来访问受密码保护的 excel 文件。

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

上面的代码将访问外部存储的受密码保护的工作簿内的表。然后使用记录集打印出调试所有项目。

我想基本上在代码的第二个 sn-p 中使用我的解决方法,这样我就可以替换我的所有数据透视表连接,这样我的数据源就可以有密码了。我所有的数据透视表都指向同一个连接,因此使用同一个连接不会导致问题。

提前致谢,如果我需要澄清任何事情,请发表评论。

【问题讨论】:

  • 您能否详细说明您正在尝试执行的操作,例如您没有密码的数据类型,以及应该如何绕过密码?另请参阅“How to Ask”以及如何创建minimal reproducible example。更多提示请访问help center
  • @ashleedawg 好的,请稍后更新我的问题。

标签: vba excel-2010 ado


【解决方案1】:

IIR 没有可以做到这一点的数据提供者。即使您尝试将密码存储在连接字符串中,该驱动程序也会给出“无法解密文件”的错误。

第二段代码基本上是为了解决这个问题,它依赖 Excel 来管理来自用户的凭据提示。它确实解决了您无法在连接字符串中提供密码的事实 - 这是一种解决方法。鉴于您无法提供适用于 ADO 的连接字符串,您也无法将其提供给存储的连接字符串。

我建议在后端使用实际数据库而不是 Excel 文件。这将使您在管理用户访问时更加灵活。

【讨论】:

  • 我想要一个,但我的管理层选择只使用 excel 文件。有没有其他方法可以与受密码保护的 Excel 文件建立数据连接?
  • 这就是为什么我想在每次打开工作簿时使用我的工作来更新数据透视表连接。
  • @user 我能想到的(使用 Excel 作为数据源)将使用 xlVeryHidden (see this page for information) 隐藏数据,而不是使用密码保护。
  • excel文件需要集中,因为它会被多个用户连接。这就是我不想打开工作簿的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多