Excel 错误:命令或操作";“转让文本”;isn';现在没空

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

我正在使用docmd.transfertext将CSV文件导入access数据库。代码每秒钟都能完美地工作,但是在我第一次运行它之后,第二次transfertext忙时,我必须生成错误,然后再次运行它,这一次它就工作了。可能是什么问题

下面的代码-docmd.transfertext语句位于CSVToAccess过程中。我已经指出了transfertext语句的位置

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是解决了您的问题还是揭示了另一个问题