Excel 错误:命令或操作";“转让文本”;isn';现在没空
我正在使用docmd.transfertext将CSV文件导入access数据库。代码每秒钟都能完美地工作,但是在我第一次运行它之后,第二次transfertext忙时,我必须生成错误,然后再次运行它,这一次它就工作了。可能是什么问题 下面的代码-docmd.transfertext语句位于CSVToAccess过程中。我已经指出了transfertext语句的位置Excel 错误:命令或操作";“转让文本”;isn';现在没空,excel,ms-access,vba,Excel,Ms Access,Vba,我正在使用docmd.transfertext将CSV文件导入access数据库。代码每秒钟都能完美地工作,但是在我第一次运行它之后,第二次transfertext忙时,我必须生成错误,然后再次运行它,这一次它就工作了。可能是什么问题 下面的代码-docmd.transfertext语句位于CSVToAccess过程中。我已经指出了transfertext语句的位置 Public Sub Import(TickerID As String) Call CSVToDesktop(TickerID
Public Sub Import(TickerID As String)
Call CSVToDesktop(TickerID)
Call CSVToAccess(TickerID)
Call FileCleanUp(TickerID)
Call RefreshTable
End Sub
Private Sub CSVToDesktop(TickerID As String)
'---------------------------------------------------------------------------------------'
' Downloads CSV file containing historical prices from Yahoo Finance ( not through YQL )
'---------------------------------------------------------------------------------------'
' General Variables---------'
Dim FixTickerID As String: FixTickerID = Replace(TickerID, "-", ".") ' Replaces - with . in Ticker name
Dim SplitTicker() As String: SplitTicker = Split(FixTickerID, ".") ' Splits the ticker name into only Ticker
Dim xPath As String: xPath = ThisWorkbook.Path & "\" & SplitTicker(0) & Date & ".csv" ' Universal store path
'--------------------------'
'Timeparameter = Download everything there is :D
StartMonth = 1: StartNumberofMonth = 1: StartYear = 1980
EndMonth = Month(Date) + 1: EndNumberOfMonth = Day(Date): EndYear = Year(Date)
' Specific structure of CSV file download
Dim URLString As String
URLString = "http://ichart.finance.yahoo.com/table.csv?s=" & TickerID & "&a=" & StartMonth - 1 & "&b=" & StartNumberofMonth & "&c=" & StartYear & _
"&d=" & EndMonth - 1 & "&e=" & EndNumberOfMonth & "&f=" & EndYear & "&g=d&ignore=.csv"
' HTTP Request: CSV-file url
Dim HTTPReq As XMLHTTP60: Set HTTPReq = New XMLHTTP60
HTTPReq.Open "Get", URLString, False
HTTPReq.send
Do Until HTTPReq.readyState = 4
DoEvents
Loop
' Import directly to Access Database which then delimits and adds primary keys to the data _
' no need to save the File on the computer in this case ( postponed to future versions )
Dim ADOBStream As ADODB.Stream: Set ADOBStream = New ADODB.Stream
With ADOBStream
.Open
.Type = adTypeBinary
.Write HTTPReq.responseBody ' HTTP CSV-file response into ADODBStream
.SaveToFile (xPath)
.Close
End With
' End of procedure: Cleanup
Set HTTPReq = Nothing
Set ADOBStream = Nothing
End Sub
Private Sub CSVToAccess(TickerID As String)
'---------------------------------------------------------------------------------------'
' Import AutoDownloaded CSV file to new table named after ticker name
' Index columns Date and Close
'---------------------------------------------------------------------------------------'
' General variables---------'
Dim FixTickerID As String: FixTickerID = Replace(TickerID, "-", ".") ' Replaces - with . in Ticker name
Dim SplitTicker() As String: SplitTicker = Split(FixTickerID, ".") ' Splits the ticker name into only Ticker
Dim xPath As String: xPath = ThisWorkbook.Path & "\" & SplitTicker(0) & Date & ".csv" '
'---------------------------'
' Import CSV-file in delimited format to relevant Access Database
Dim AccessObj As Access.Application: Set AccessObj = New Access.Application
' AccessObj.UserControl = True ' Hides/Displays the Access window
AccessObj.OpenCurrentDatabase "C:\Users\name\Desktop\Database.accdb" '!Create Procedure to choose database
DoCmd.TransferText acImportDelim, , SplitTicker(0), xPath, True **< --- TRANSFERTEXT STATEMENT**
CurrentDb.Execute "CREATE INDEX idxDateID ON " & SplitTicker(0) _
& "([Date] DESC) WITH PRIMARY;" ' Date = Primary Key, Descending format
' Add TickerID to stock table and check if stock(instrument) table is created
If IsNull(DLookup("Name", "MSysObjects", "Name='Instruments' and type in (1,4,6)")) Then
CurrentDb.Execute "CREATE TABLE Instruments (ID string);"
CurrentDb.Execute "INSERT INTO Instruments VALUES ('" & TickerID & "')"
Else
CurrentDb.Execute "INSERT INTO Instruments VALUES ('" & TickerID & "')"
End If
'Cleanup
DoCmd.Close
AccessObj.CloseCurrentDatabase
Set AccessObj = Nothing
End Sub
Private Sub FileCleanUp(TickerID As String)
'---------------------------------------------------------------------------------------'
' FileSystemObject reference: Microsoft Scripting Runtime
' Finds the saved CSV-file and deletes it
'---------------------------------------------------------------------------------------'
' General variables---------'
Dim SplitTicker() As String: SplitTicker = Split(TickerID, ".")
Dim xPath As String: xPath = ThisWorkbook.Path & "\" & SplitTicker(0) & Date & ".csv"
'---------------------------'
With New FileSystemObject
If .FileExists(xPath) Then
.DeleteFile xPath
End If
End With
End Sub
Private Sub RefreshTable()
' General Variables---------'
Dim CombBox As ComboBox: Set CombBox = Sheets("mainwindow").OLEObjects("combbox_instruments").Object
Dim TxtBox As Object: Set TxtBox = Sheets("mainwindow").OLEObjects("txtbox_import").Object
Dim FixTickerID As String: FixTickerID = Replace(TxtBox.Text, "-", ".") ' Replaces - with . in Ticker name
Dim SplitTicker() As String: SplitTicker = Split(FixTickerID, ".") ' Splits the ticker name into only Ticker
'---------------------------'
For Index = 0 To CombBox.ListCount - 1
If CombBox.List(Index) = SplitTicker(0) Then
Exit Sub
End If
Next Index
CombBox.AddItem SplitTicker(0)
End Sub
公共子导入(TickerID作为字符串)
调用CSVToDesktop(TickerID)
呼叫CSVToAccess(TickerID)
调用文件清理(TickerID)
呼叫刷新表
端接头
私有子CSVToDesktop(TickerID作为字符串)
'---------------------------------------------------------------------------------------'
'从Yahoo Finance(不是通过YQL)下载包含历史价格的CSV文件
'---------------------------------------------------------------------------------------'
“一般变量------”
Dim FixTickerID作为字符串:FixTickerID=Replace(TickerID,“-”,“)”将-Replace替换为。以股票代码的名义
Dim SplitTicker()作为字符串:SplitTicker=Split(FixTickerID,“.”)将股票代码名称拆分为唯一的股票代码
将xPath设置为字符串:xPath=thispoolk.Path&“\”&SplitTicker(0)&Date&“.csv”通用存储路径
'--------------------------'
'Timeparameter=下载所有内容:D
StartMonth=1:StartNumber of Month=1:StartYear=1980
EndMonth=月(日)+1:EndNumberOfMonth=日(日):EndYear=年(日)
'CSV文件下载的特定结构
将URL字符串设置为字符串
URL字符串=”http://ichart.finance.yahoo.com/table.csv?s=&TickerID&&a=“&StartMonth-1&&b=“&startNumber of Month&&c=“&StartYear&_
&d=“&EndMonth-1&&e=“&EndNumberOfMonth&&f=“&EndYear&&g=d&ignore=.csv”
'HTTP请求:CSV文件url
将HTTPReq设置为XMLHTTP60:设置HTTPReq=New XMLHTTP60
HTTPReq.Open“Get”,URLString,False
HTTPReq.send
直到HTTPReq.readyState=4为止
多芬特
环
'直接导入到Access数据库,然后该数据库对数据进行分隔并添加主键_
'在这种情况下,无需将文件保存在计算机上(推迟到将来的版本)
将ADOBStream设置为ADODB.Stream:设置ADOBStream=New ADODB.Stream
带着一股逆流
打开
.Type=adTypeBinary
.将HTTPReq.ResponseBy的HTTP CSV文件响应写入ADODBStream
.SaveToFile(xPath)
关
以
'过程结束:清理
设置HTTPReq=Nothing
设置ADOBStream=Nothing
端接头
私有子CSVToAccess(TickerID作为字符串)
'---------------------------------------------------------------------------------------'
'将自动下载的CSV文件导入以ticker name命名的新表
'索引列日期和关闭日期
'---------------------------------------------------------------------------------------'
“一般变量------”
Dim FixTickerID作为字符串:FixTickerID=Replace(TickerID,“-”,“)”将-Replace替换为。以股票代码的名义
Dim SplitTicker()作为字符串:SplitTicker=Split(FixTickerID,“.”)将股票代码名称拆分为唯一的股票代码
将xPath设置为字符串:xPath=thispoolk.Path&“\”&SplitTicker(0)&Date&“.csv”'
'---------------------------'
'将分隔格式的CSV文件导入相关Access数据库
将AccessObj设置为Access.Application:设置AccessObj=New Access.Application
“AccessObj.UserControl=True”隐藏/显示访问窗口
AccessObj.OpenCurrentDatabase“C:\Users\name\Desktop\Database.accdb”!创建用于选择数据库的过程
DoCmd.TransferText acImportDelim,SplitTicker(0),xPath,True**<---TransferText语句**
CurrentDb.Execute“CREATE INDEX idxDateID ON”&SplitTicker(0)_
&([Date]DESC)带主键;“'日期=主键,降序格式
'将TickerID添加到stock表,并检查是否创建了stock(instrument)表
如果为null(DLookup(“Name”、“MSysObjects”、“Name='Instruments'并键入(1,4,6)”),则
CurrentDb.Execute“创建表仪器(ID字符串);”
CurrentDb.Execute“插入到仪器值(“&TickerID&”)”
其他的
CurrentDb.Execute“插入到仪器值(“&TickerID&”)”
如果结束
"清理",
文件关闭
AccessObj.CloseCurrentDatabase
Set AccessObj=Nothing
端接头
私有子文件清理(TickerID作为字符串)
'---------------------------------------------------------------------------------------'
'FileSystemObject引用:Microsoft脚本运行时
'查找保存的CSV文件并将其删除
'---------------------------------------------------------------------------------------'
“一般变量------”
Dim SplitTicker()作为字符串:SplitTicker=Split(TickerID,“.”)
将xPath设置为字符串:xPath=thispoolk.Path&“\”&SplitTicker(0)&Date&“.csv”
'---------------------------'
使用新的FileSystemObject
如果.FileExists(xPath)存在,则
.DeleteFile xPath
如果结束
以
端接头
私有子刷新表()
“一般变量------”
将组合框设置为组合框:设置组合框=图纸(“主窗口”).OLEObjects(“组合框\仪器”).Object
将TxtBox设置为对象:设置TxtBox=图纸(“主窗口”).OLEObjects(“TxtBox\u导入”).Object
将FixTickerID设置为字符串:FixTickerID=Replace(TxtBox.Text,“-”,“)”将-Replace替换为。以股票代码的名义
Dim SplitTicker()作为字符串:SplitTicker=Split(FixTickerID,“.”)将股票代码名称拆分为唯一的股票代码
'---------------------------'
对于索引=0的CombBox.ListCount-1
如果CombBox.List(Index)=SplitTicker(0),则
出口接头
如果结束
下一个索引
CombBox.AddItem拆分器(0)
端接头
AccessObj.DoCmd.TransferText是解决了您的问题还是揭示了另一个问题