【问题标题】:Set Prompted Excel Spreadsheet to new Workbook Object将提示的 Excel 电子表格设置为新的工作簿对象
【发布时间】:2018-03-10 02:19:19
【问题描述】:

我正在尝试分配一个新的 Excel 工作表,该工作表被提示作为新的工作簿对象打开。我正在尝试下面的代码,但它不起作用

Option Explicit

Sub MoveGeneratedReport()

   Dim newWbReport As Workbook
   Dim MonthlyComplianceReport As Workbook

   Set MonthlyComplianceReport = SelectWorkbook

End Sub

Private Function SelectWorkbook() As Workbook

   Dim strFileToOpen As String
   strFileToOpen = Application.GetOpenFilename(Title:="Select Compliancy Report for export", _
                   FileFilter:="Excel Files *.xls* (*.xls*),")

   If strFileToOpen <> False Then  '<---- Error Ocuring here
      Workbooks.Open Filename:=strFileToOpen
   End If

End Function

我收到了

“类型不匹配”

错误,但是如果我只运行函数 SelectWorkbook() 它可以正常工作并打开文档。

我的最终目标是打开文档,然后将其分配给 Workbook 对象。有什么建议可以解决这个错误吗?

编辑:

我也应该在这里澄清我的问题...如何通过提示将这个新打开的 Workbook 分配给 Workbook 对象,以便我的其余代码可以使用它?

编辑 2:

这似乎工作得很好

Option Explicit

Sub MoveGeneratedReport()

   Dim newWbReport As Workbook
   Dim MonthlyComplianceReport As Workbook

   Set MonthlyComplianceReport = SelectWorkbook


   Debug.Print MonthlyComplianceReport.Name

End Sub

Private Function SelectWorkbook() As Workbook

   Dim strFileToOpen As String
   strFileToOpen = Application.GetOpenFilename(Title:="Select Compliancy Report for export", _
                   FileFilter:="Excel Files *.xls* (*.xls*),")

   If strFileToOpen <> "" Then
      On Error GoTo ErrHandle
      Set SelectWorkbook = Workbooks.Open(Filename:=strFileToOpen)
   End If

   Exit Function
ErrHandle:
   If Err.Number <> 1004 Then
      MsgBox "Error " & Str(Err.Number) & Chr(13) & _
             "Error Line: " & Erl & Chr(13) & Chr(13) & _
             Err.Description
   End If

End Function

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    GetOpenFilename 返回一个String,所以它永远不会是真或假。改为测试空字符串:

    If strFileToOpen <> "" Then
    

    编辑:

    要设置工作簿对象,请将其更改为:

    Private Function SelectWorkbook() As Workbook
       Dim strFileToOpen As String
       strFileToOpen = Application.GetOpenFilename(Title:="Select Compliancy Report for export", _
                       FileFilter:="Excel Files *.xls* (*.xls*),")
    
       If strFileToOpen <> "" Then
          Set SelectWorkbook = Workbooks.Open(Filename:=strFileToOpen)
       End If
    
    End Function
    

    【讨论】:

    • 谢谢,这回答了我的一半问题。抱歉,我进行了编辑以进一步澄清我的问题
    • 我刚刚找到了您找到示例的 MSDN 页面,这是错误的,哈哈
    • 我批准了您的编辑,我没有考虑全局。
    • 感谢您的帮助,现在一切正常! :)
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多