【问题标题】:Code Read-Only vs Read-Write, not same result代码只读与读写,结果不同
【发布时间】:2015-09-29 12:13:14
【问题描述】:

我遇到了这个非常奇怪的问题。

conn.Execute "INSERT INTO tbl " & _
             "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[temp$]"

当我以读写方式运行此代码时,它可以工作。当我在文件是只读的情况下运行它时,代码崩溃并给我这个错误:“外部表不是预期的格式”。

我的连接字符串是(MS Access DB):

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";Jet OLEDB:Database Password=mypass;Persist Security Info=True"

我不知道还能说什么……这与我遇到的任何事情都不一样。在读写而不是只读的情况下完美运行的东西真是太奇怪了。

感谢您的帮助。

【问题讨论】:

  • 你是说不能以只读方式写入表很奇怪吗?
  • 没有。数据库保留在 RW 中。它是代码来自的 Excel 文件,即 RW 或 RO。但通常 RW 或 RO 中的代码是相同的代码...
  • 嗯嗯...我可能正在做某事。我已经阅读了有关将 [Excel 12.0 Macro;...] 用于 .xlsm 的信息。因此,我尝试将 ThisWorkbook.FullName(它是一个 .xlsm)替换为包含具有相同数据的相同工作表的 .xls 源。有效。它仍然没有解释为什么它在 RW 而不是 RO 中工作。

标签: database excel vba ms-access-2007


【解决方案1】:

我已经想通了。如果工作簿是只读的(这是有道理的),那么这段代码会使用工作簿的原始状态。

conn.Execute "INSERT INTO tbl " & _
         "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[temp$]"

由于我在只读状态下使用工作簿并制作了一个新工作表来放入我的临时数据,因此执行加载的原始状态不包含新工作表,因为它没有保存。

制作一个新的临时工作簿并保存它,引用这个新文件,然后插入并删除它似乎是最好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多