2012-12-18 51 views
0

我有這個工作,我需要在VBA中做,如果我打開IDE並從那裏運行代碼,所有行爲都如預期,將數據從txt文件加載到新的臨時工作簿,複製並粘貼到我的工作表中,關閉臨時工作簿。從文件加載數據到excel

但是,當使用快捷方式(即Ctr + Sft + L)運行時,它將數據加載到臨時工作簿,激活它並在那裏停止執行......不將數據粘貼回工作表。我怎樣才能解決這個問題?

下面的代碼:

Sub Load_Text() 
    Dim wsSheet As Worksheet 
    InsertWorkSheet ("Data") 

    Set wsSheet = ThisWorkbook.Sheets("Data") 

    Workbooks.OpenText Filename:="C:\Documents and Settings\w059\Desktop\20121107_Report.txt", _ 
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ 
    ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, _ 
    Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _ 
    Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1)), TrailingMinusNumbers:=True 
    ActiveWorkbook.Worksheets(1).Cells.Copy wsSheet.Range("A1") 
    ActiveWorkbook.Close True 
End Sub 
Public Sub InsertWorkSheet(name As String) 
    Dim wsSheet As Worksheet 
    On Error Resume Next 
    Set wsSheet = ThisWorkbook.Sheets(name) 

    If wsSheet Is Nothing Then 
     ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count) 
     ThisWorkbook.Sheets(Sheets.Count).name = name 
    End If 
End Sub 
+1

我錯過了點?我在宏中看不到任何粘貼命令 - 只是一個副本。順便說一句,當您在工作簿中插入工作表時,它會自動成爲當前的工作表,因此您可以使用ThisWorkbook.Sheets.Add,然後再使用ActiveSheet.Name = Name。另一方面,我會避免使用NAME等保留字作爲參數和變量的名稱,因爲這會導致奇怪的錯誤發生(這將是我在此宏中更改的第一件事)。 –

+0

+1 @AndyBrown歡迎來到StackOverFlow :)很高興在這裏見到你。 [Wise Owl博客如何發展?](http://www.wiseowl.co.uk/blog/author/AndyBrown.htm)? – bonCodigo

+0

@AndyBrown在ActiveWorkbook.Worksheets(1).Cells.Copy中有一個隱含的Destination:= wsSheet.Range(「A1」)wsSheet.Range(「A1」) – kooshka

回答

0

我得到一個錯誤的參考ActiveWorkbook。該修正它:

替換

ActiveWorkbook.Worksheets(1).Cells.Copy wsSheet.Range("A1") 
ActiveWorkbook.Close True 

隨着

Dim wb As Workbook 
Set wb = ActiveWorkbook 
wb.Worksheets(1).Cells.Copy wsSheet.Range("A1") 
wb.Close True