2012-08-15 47 views
1

我正在尝试创建一个子例程,提示用户选择工作簿,然后将选定工作簿的第一张工作表添加为现有(活动)工作簿中的选项卡。然后命名新标签“数据”。下面是我使用至今代码:将工作表从另一工作簿加载到Excel中与VBA

"ws.Add" method or With Block not set.

任何帮助表示赞赏:

Sub getworkbook() 
' Get workbook... 
Dim ws As Worksheet 
Dim filter As String 
Dim targetWorkbook As Workbook 

Set targetWorkbook = Application.ActiveWorkbook 

' get the customer workbook 
filter = "Text files (*.xlsx),*.xlsx" 
caption = "Please Select an input file " 
ws = Application.GetOpenFilename(filter, , caption) 

ws.Add After:=Sheets(Sheets.Count) 

ws.Name = "DATA" 

End Sub 

此代码似乎并不奏效,并返回以下错误。

感谢,

+0

类似的问题:http://stackoverflow.com/questions/3840628/creating-and-naming-worksheet-in-excel-vba – 2012-08-15 23:32:43

回答

4

您已经声明ws作为工作表和GetOpenFilename返回一个文件名。我会建议阅读我的帖子在这link

这是你正在尝试?

注意:我还没有做任何错误处理。我相信你可以照顾到这一点。

Sub getworkbook() 
    ' Get workbook... 
    Dim ws As Worksheet 
    Dim filter As String 
    Dim targetWorkbook As Workbook, wb As Workbook 
    Dim Ret As Variant 

    Set targetWorkbook = Application.ActiveWorkbook 

    ' get the customer workbook 
    filter = "Text files (*.xlsx),*.xlsx" 
    Caption = "Please Select an input file " 
    Ret = Application.GetOpenFilename(filter, , Caption) 

    If Ret = False Then Exit Sub 

    Set wb = Workbooks.Open(Ret) 

    wb.Sheets(1).Move After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count) 

    ActiveSheet.Name = "DATA" 
End Sub 
+0

我怎么能包括旧版本的Excel文件,即.xls的? – AME 2012-09-06 18:54:02

+2

将'filter =“文本文件(* .xlsx),*。xlsx”'改为'filter =“文本文件(* .xls *),*。xls *”' – 2012-09-06 18:56:32

相关问题