为一个且仅一个工作簿启用 excel com 插件

为一个且仅一个工作簿启用 excel com 插件

我们正在使用 Excel 插件从第三方应用程序获取报告,但速度非常慢,因此我最好只为这个特定的工作簿启用它。是否可以只为这个工作簿启用插件?

答案1

我按照@PeterH 在您的问题评论中描述的方式做了。实际上还要多做一点,这是我未更改的代码(连接字符串除外):

Sub getGrantInfo()
For Each makeSheet In Worksheets("Data").ListObjects("grantTable").ListRows
    Sheets.Add Before:=Worksheets(1)
    ActiveSheet.Name = makeSheet.Range.Cells(1, 1).Value
    'get data
    With Worksheets(makeSheet.Range.Cells(1, 1).Value).ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=OraOLEDB.Oracle.1;Password="******";Persist Security Info=True;User ID=*****;Data Source=******;Extended Properties=""" _
        , """"), Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = makeSheet.Range.Cells(1, 2).Value
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = makeSheet.Range.Cells(1, 1).Value
        .Refresh BackgroundQuery:=False
    End With
    ActiveWorkbook.Connections.Item(1).Delete
Next makeSheet 
End Sub

至于解释,这个 VBA:

  1. 循环遍历For Each-Next工作表名称和 SQL 的表格(块)以获取该工作表上的数据,请参见屏幕截图示例,我不记得 Excel 可以为该表格处理的工作表数量是否存在实际限制。![在此处输入图片描述
  2. 添加新工作表,并根据表格中工作表列中的名称命名
  3. With-End With块正在与数据库建立连接(请注意,密码、用户 ID 和来源我已更改为星号),您的连接将根据数据库提供商的不同而有所不同。因此,我建议录制一个宏来创建连接。但如果我没记错的话,它会创建整个With-End With块。
  4. 请注意,该Destination:=命令告诉在工作表上开始放置数据的位置。
  5. 请注意,.CommandText该变量是来自表的 SQL。
  6. 请注意,.ListObject.DisplayName这是在新工作表上创建的表的命名。
  7. 删除刚刚使用的连接。如果我没记错的话,如果您不在这里删除,它将继续添加新连接(迭代数字 1),我认为您必须创建一个新循环才能一次删除一个,我认为您不能一次删除所有连接。

总之,我相信您只需要将With-End With块修改为您的连接,ActiveWorkbook.Connections.Item(1).Delete然后修改命令,并进行其他修改以准确执行您要查找的操作(例如,将数据复制并粘贴到非宏文件中)。

我把整个例程放出来是为了给其他人提供可能的想法,以自动从数据源中提取数据,或者可能通过修改从更多数据源中提取数据。

相关内容