我在这里和谷歌上搜索过,但我仍然无法解决我的问题。我试图在我的 .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
请参阅以下链接:
请记住,在 Excel 的 VB 编辑器中的 Excel VBA 中的工作方式与在 VBScript 中的工作方式不同,因为没有类型声明,也没有 Intellisense。
关于sql - 在VBScript中的sql字符串中使用excels命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833105/