您好我正在尝试创建一个功能,该功能将存储用户选择的一系列数据以及用户的自定义名称,然后使用ADO将数据存储在新的Excel表格中用户的自定义名称作为工作表名称。到目前为止,我已经获得了ADO连接,并且可以读取和写入.xlsx文件的数据,但是当我尝试通过创建新表创建新工作表时,我得到一个错误,表明我的工作表名称不正确。我使用了test
和testName
,在挖掘之后我感到难过。这是我的一大块代码:
Sub AddSheet()
Dim DataName As String, SRange As Variant, qry As String, SCols As Integer, SRows As Integer
DataName = InputBox("Enter Your Data Name:")
Set SRange = Application.Selection
Set SRange = Application.InputBox("Select your data to be saved:", xTitleId, SRange.Address, Type:=8)
SCols = SRange.Columns.Count 'new
SRows = SRange.Rows.Count 'new
'creates the query to create a new sheet/table for the data
qry = "CREATE TABLE [" & DataName & "$] ("
For i = 1 To SCols
qry = qry & "[Col" & i & "] Float"
If i <> SCols Then
qry = qry & ", "
End If
Next i
qry = qry + ")"
SQLUpdateData qry
End Sub
'function that executes the SQL query
Function SQLUpdateData(qry As String) As Variant
Dim FileName As String, sconnect As String
Dim cnn As New ADODB.Connection
Dim objMyCmd As ADODB.Command
Set cnn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
FileName = "c:\Users\" & Environ("Username") & "\AppData\Roaming\Microsoft\AddIns\DataStorage.xlsx"
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & FileName & ";HDR=Yes';"
cnn.Open sconnect
objMyCmd.CommandType = adCmdText
objMyCmd.CommandText = qry
objMyCmd.ActiveConnection = cnn
MsgBox qry
objMyCmd.Execute
Set objMyCmd = Nothing
Set cnn = Nothing
End Function
到目前为止,我已打印出查询,并且在执行前看起来没问题。例如,如果用户选择名称test
,我将获得以下查询输出:
CREATE TABLE [test $]([Col1] Float,[Col2] Float)
然后运行时错误说明
[Microsoft] [ODBC Excel驱动程序]&#39;测试$&#39;不是有效名称
我也搜索了这个错误,但仍然可以找出为什么这不起作用。任何帮助都非常感谢!
答案 0 :(得分:2)
以下示例显示如何使用ADOX创建工作簿并添加工作表:
Option Explicit
Sub Test()
' Add reference
' Microsoft ADO Ext. 6.0 for DDL and Security
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Dim col As ADOX.Column
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.xlsx;Extended Properties=Excel 12.0 Xml"
Set tbl = New ADOX.Table
tbl.Name = "TestTable"
Set col = New ADOX.Column
With col
.Name = "Col1"
.Type = adVarWChar
End With
tbl.Columns.Append col
cat.Tables.Append tbl
End Sub
一些有用的链接: