sql - 在VBScript中的sql字符串中使用excels命名范围

标签 sql vba excel vbscript adodb

我在这里和谷歌上搜索过,但我仍然无法解决我的问题。我试图在我的 .vbs 中等效地使用 excel 的命名范围。文件。以下在 excel 中的 VBA 中工作,但我无法让它在 *.vbs 中工作文件。

ThisWorkbook.Sheets(1).Range("A1:B" & Range("B" & Rows.Count).End(xlUp).Row).Name = "DATA"
strSql = "SELECT * FROM DATA"

因此,我尝试了引用我的命名范围 DATA 的不同变体。没有运气。
这就是我现在所拥有的:
Set rng = ws.Range("A1:B2")
rng = "DATA"    
strSql = "SELECT * FROM DATA"

涉及一些不同的变体:采用参数 ByVal,使用 rng 代替 DATA(字符串类型),SELECT * FROM " & rng, etc..
运行时的错误消息:

Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation. All rights reserved.

C:\Users\admin\Desktop\UpdateSourceTbl.vbs(119, 5) Microsoft JET Databas e Engine: The Microsoft Jet database engine could not find the object 'DATA'. M ake sure the object exists and that you spell its name and the path name correctly.



非常感谢任何帮助!

临时解决方案:
我使用了 2 个带有行号的参数,可能不是最好的解决方案 - 但它有效!我看不出公平有什么问题
Call createAndInsertRecordSet(wb.FullName, ws.Name, i+1, j-1)
Sub CreateAndInsertRecordSet(ByVal fullname, ByVal wsName, ByVal stRow, byVal enRow )
strSql = "SELECT * FROM [" & wsName & "$B" & stRow & ":AX" & enRow & "]"

最佳答案

编辑:
请换行

ws.Range("B2:AX2") = "MyRange"


activeworkbook.Names.Add Name:="myRange", RefersTo:="B2:AX2"

我认为这将正确创建名称 DATA。

不幸的是,如果没有 ,它仍然可能无法工作。保存工作簿 因为 JET OLE DB Provider/DB Engine 在磁盘上的文件上工作,而不是在内存中

这里我想你可能需要动态创建一个架构.ini 文件来定义你想要的列。

请记住,JET 期望在列中查看数据,因此如果有要跳过的列,那么可能需要在 Schema 文件中定义它们 即使这意味着您必须在运行时动态地编写模式

这里的另一点,可以通过在 MS Excel 中使用 MS Query 运行查询来检查/调试您遇到的错误,以查看 JET DB 引擎是否可以看到 DATA 范围

您需要阅读如何使用 ADO/OLE DB 访问 Excel 数据

首先,要了解如何引用您的 DATA 命名范围,请在 Excel 中打开 MS Query 并查询工作表

看这个网站:Use MS Query to Treat Excel As a Relational Data Source

请参阅以下链接:
  • MSDN KB: How To Use ADO with Excel Data from Visual Basic or VBA
  • Treat Excel As a Relational Data Source Excel 用户 MVP 网站
  • Office Space: Using ADO to Query an Excel Spreadsheet

  • 请记住,在 Excel 的 VB 编辑器中的 Excel VBA 中的工作方式与在 VBScript 中的工作方式不同,因为没有类型声明,也没有 Intellisense。

    关于sql - 在VBScript中的sql字符串中使用excels命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833105/

    相关文章:

    sql - 在 SQL 中计算每个类别产品的数量

    excel - 根据列中的字符串有条件地折叠Excel行?

    excel - 处理字节顺序标记

    sql - 有没有更好的方法来使用 SQL 查找字谜?

    sql - 用于提取逗号分隔值的 Oracle 查询

    excel - 将第一个值存储在序列中,并在条件满足时使用存储的值

    excel - 如何在 range.find 中查找双数据类型

    excel - 如何从 access 数据库创建非常大的 excel 文件?

    vba - Excel 中的行级安全性 - 我应该使用什么方法 :

    c# - SQL 语句的某些部分嵌套太深 c# EF 5