【问题标题】:Modify existing excel Connection Name in VBA在 VBA 中修改现有的 excel 连接名称
【发布时间】:2013-09-16 21:55:53
【问题描述】:

我需要更新 Excel 工作簿的 sql 连接的连接名称。这是我的尝试。我已经能够通过标准替换来修改连接字符串和命令文本。

Sub ConnectionString_modify()

Dim i As Long
Dim cnt As Long
Dim modtext As String
Dim modrange As String

'Grab nummber of workbook connections
cnt = ActiveWorkbook.Connections.Count

For i = 1 To cnt

    'Changes to Connection string --This works
    modtext = ActiveWorkbook.Connections.Item(i).OLEDBConnection.Connection
    modtext = VBA.Replace(modtext, "_FY2013", "_FY2014")
    ActiveWorkbook.Connections.Item(i).OLEDBConnection.Connection = modtext

    'Changes Connection Name
    modname = ActiveWorkbook.Connections.Item(i).Name
    modname = VBA.Replace(modname, "_FY2013", "_FY2014")
    ActiveWorkbook.Connections.Item(i).Name = modname 
 Next i

End sub

任何帮助都会很棒。谢谢。

【问题讨论】:

  • 到底是什么问题?你有错误吗?如果是,在哪一行以及确切的信息是什么?
  • 此代码将正常运行,但连接字符串的名称不会更改。似乎发生的是第 i 个连接名称更改为集合中的另一个名称。因此,如果我在尝试重命名代码后在connections.items(i) = Connection10 之前检查它的connections.items(i) = Connection7。看来我需要另一种方法来重命名。目前此代码只是重新排序连接名称。
  • 尝试将连接对象放入一个集合中,然后循环访问该集合。有时像您正在做的那样在循环中修改对象可能会导致对象在此过程中重新排序。或者尝试设置对每个连接的引用并使用该引用而不是引用 .Items(i)

标签: excel vba external oledbconnection


【解决方案1】:

试试这个:

Sub ConnectionString_modify()

Dim i As Long
Dim cnt As Long
Dim modtext As String
Dim modrange As String
Dim conn

'Grab nummber of workbook connections
cnt = ActiveWorkbook.Connections.Count

For i = cnt To 1 Step -1

    Set conn = ActiveWorkbook.Connections.Item(i)

    modtext = conn.OLEDBConnection.Connection
    modtext = VBA.Replace(modtext, "_FY2013", "_FY2014")
    conn.OLEDBConnection.Connection = modtext

    conn.Name = VBA.Replace(conn.Name, "_FY2013", "_FY2014")

Next i

End sub

【讨论】:

    【解决方案2】:

    显然,Excel 动态排序 Connection.Item() 数组。所以我的修改是将更新后的名称发送到数组的底部。 之前:FY2013Conn1、FY2013Conn2、FY2013Conn3、FY2013Conn4 之后:FY2014Conn2、FY2014Conn3、FY2014Conn4、FY2014Conn1

    这很难看到,因为我正在处理 50 多个连接。我发现有效的方法不是尝试遍历整个集合,而是只修改数组中的第一项。

    'Connection Count
    cnt = ActiveWorkbook.Connections.Count 
    
    While cnt > 0
       'Always modify the first Item 
       Set conn = ActiveWorkbook.Connections.Item(1)
    
       'Mod code makes changes to Command Text
        modtext = conn.OLEDBConnection.Connection
        modtext = VBA.Replace(modtext, "_FY2013", "_FY2014")
        conn.OLEDBConnection.Connection = modtext
    
        'Changes Connection Name
        conn.Name = VBA.Replace(conn.Name, "_FY2013", "_FY2014")
    
        'Iterate through the cnt
         cnt = cnt - 1
      Wend
    

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2014-05-26
      相关资源
      最近更新 更多