如何通过创建浏览按钮打开和读取* .xls文件

时间:2013-09-20 11:52:48

标签: excel vba button

我现在用Google搜索了近一天,无法找到我想要的东西!

我在Excel工作表上创建了一个按钮。我希望此按钮从浏览器对话框中打开.xls文件。我已经设法找到下面的程序代码,但它在一个新工作簿中打开我的.xls。

我希望.xls文件在与按钮相同的工作表中的特定单元格中打开。例如,我的按钮放在我的sheet1中的单元格B8中。我想在它下面打开.xls文件 - 在同一个sheet1的单元格B9中

还有一件事,当我按下按钮并按“取消”时,我不希望它打印“FALSE”。

以下是我找到的代码:

Sub Knapp1_Klicka()

    objFile = Application.GetOpenFilename(fileFilter:="All Files (* . *) , * . * ")   

    Set curSheet = ActiveSheet
    Set mWorkbook = Workbooks.Open(objFile)
    curSheet.Activate

    Call someFunction(curSheet, mWorkbook)
End Sub

Sub someFunction(targetSheet, srcWorkbook)

    numSheets = srcWorkbook.Sheets.Count
    For i = 1 To numSheets
        targetSheet.Cells(i, 1) = srcWorkbook.Sheets(i).Name
    Next i
End Sub

1 个答案:

答案 0 :(得分:0)

要处理取消事件,您需要检查Application.GetOpenFileName的结果是否是有效文件名。您可以使用Dir函数执行此操作。

总是声明变量也很有帮助。

Sub TryMe()
    Dim objFile as String
    Dim curSheet as Worksheet
    Dim mWorkbook as Workbook
    objFile = Application.GetOpenFilename(fileFilter:="All Files (* . *) , * . * ")   

    If Len(Dir(objFile)) = 0 Then Exit Sub 'handles the "Cancel" event
    Set curSheet = ActiveSheet
    Set mWorkbook = Workbooks.Open(objFile)

    'Copy the values from the activesheet in this workbook:
    ActiveSheet.UsedRange.Copy Destination:=curSheet.Range("B9")
End Sub

请注意,如果您在工作簿中使用非常大的范围,则此方法可能会失败,因为它无法复制整个工作表并粘贴到范围B9,但这种情况发生的可能性似乎很低(基本上如果mWorkbook工作表在所有列和行中完全充满了数据,就会发生这种情况。