当前位置: 首页 > 面试题库 >

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

海翼
2023-03-14
问题内容

我已经在这里和Google上进行了搜索,但仍然无法解决我的问题。我正在尝试在.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脚本主机版本5.8版权所有(C)Microsoft Corporation。版权所有。

C:\ Users \ admin \ Desktop \ UpdateSourceTbl.vbs(119,5)Microsoft
JET数据库引擎:Microsoft Jet数据库引擎找不到对象“ DATA”。确保对象存在,并且您正确拼写了它的名称和路径名。

任何帮助,不胜感激!

临时解决方案: 我将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 & "]"

问题答案:

工作可能是不可预测的,有时我们不得不回去修改,修复,重用代码。今天发生了。我回过头来复制了我的代码,并使它在第一次工作。发布此问题时,我一定做错了什么,看着错误的行或程序或奇怪的东西。下面的代码运行完美。
它:
-打开工作簿
-与工作簿建立连接以检索记录集中的数据
-打开与数据库的连接并执行示例插入语句
运行代码后,我检查了临时数据库,已插入值,因此,我可以确认这是我对最初提出的问题的有效解决方案。

Option Explicit

Private Const adUseClient = 3
Dim xl, wb, ws, fPath, rng

fPath = "C:\Users\admin\Desktop\Book1.xlsm"

Call OpenFile()
Call InsertRecordset()
Call CloseFile()

Private Sub OpenFile()
    Set xl = CreateObject("Excel.Application")
    xl.Visible = False
    Set wb = xl.Workbooks.Open(fPath)
    Set ws = wb.Sheets(1)
End Sub

Private Sub CloseFile()
    wb.Saved = True
    wb.Close
    xl.Quit
    Set wb = Nothing
    Set xl = Nothing
End Sub

Private Sub InsertRecordset()

    strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & wb.fullname & ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
    Dim cn, rs, strCon, strSql, cn2

    ws.Range("A1:B2").Name = "DATA"
    strSql = "SELECT * FROM DATA"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open strCon          
    rs.Open strSql, cn

    Set cn2 = CreateObject("ADODB.Connection")
    With cn2
        .CursorLocation = adUseClient
        .Open "Driver={SQL Server};Server=HELIUM\PRI; Database=TEMPORARY; UID=admin; PWD=password"
        .CommandTimeout = 0
        rs.MoveFirst
        Do While Not rs.EOF
            .Execute "INSERT INTO TEMPORARY.dbo.TEMP_TABLE ( [TEMP_COLUMN] ) VALUES ('" & rs.Fields(1) & "')"
            rs.MoveNext
            Loop
    End With

    ' Close connections
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    cn2.Close
    Set cn2 = Nothing
End Sub


 类似资料:
  • 我想创建一个创建ArrayList的方法,并以现有ArrayList中的元素命名每个ArrayList。 就像原来是,我希望该方法创建四个ArrayList,分别命名为abc、def、ghi和jkl。

  • 为什么using指令在包含在匿名命名空间中时表现得好像出现在全局范围?

  • 问题内容: 我想以这种方式注入配置参数: 因此,我尝试通过这种方式实现生产者方法: 我用这种方式定义了其他bean: 但是,在尝试部署它时遇到了这个异常: 任何想法? 谢谢。 问题答案: 它看起来像你需要一个默认的(无参数)构造函数您使它proxyable。我真的不知道为什么它是需要的,因为是一个bean并因此不代理AFAIK; 老实说,我什至不知道为什么可代理bean需要一个默认的构造函数 这似

  • 这可能只是一个简单的错误,我没有看到,但我认为我只是做错了什么。别担心,我没有在我的头函数中使用namespace std或任何似乎是这个人的问题[我读到的问题与我的类似][1][1]:为什么我会得到string不命名类型错误? 我现在有4个错误: C:\documents and settings\me\my documents\c++projects\c++\random句子\nouns.h8

  • 我想在java中以编程方式生成xml字符串,其名称空间是自定义的,如下所示,所有数据必须以xml格式动态出现。我怎样才能达到这样的成就? 我经历过像https://howtodoinjava.com/jaxb/write-object-to-xml/这样的例子,但是当xml生成时,它的起点是 但我想要开始和结束标记

  • 本文向大家介绍SQL中的字符串函数,包括了SQL中的字符串函数的使用技巧和注意事项,需要的朋友参考一下 SQL中的字符串函数都用于操作字符串值。SQL指定了许多字符串函数。其中一些领域如下: ASCII码(str) 此函数返回提供的字符串str中第一个单词的ASCII或数字值。如果为空字符串,则返回0。 例 这将返回S的ASCII值,即83,因为它是字符串中的第一个字符。 BIN(n) 这里n是二