【问题标题】:How can I reference an Excel worksheet without hardcoding its name in VBA?如何在不在 VBA 中硬编码其名称的情况下引用 Excel 工作表?
【发布时间】:2012-05-09 08:52:56
【问题描述】:

我正在为 excel 创建一个宏,用于将一个 excel 工作表复制到另一个 excel 工作表。

这是有效的:

Function CopyFile()

   Dim Wb1 As Workbook
   Dim Wb2 As Workbook
   Dim ws1 As Worksheet
   Dim ws2 As Worksheet

   Set Wb1 = ActiveWorkbook   
   Set ws1 = Wb1.Worksheets("Task")
   Set Wb2 = Workbooks.Open("D:\Outlook\dest.xlsx")

   ws1.Copy Wb2.Worksheets(1)

   Wb2.Save
   Wb2.Close
   Wb1.Activate   

End Function

但我不想使用硬编码字符串来获取工作表名称Set ws1 = Wb1.Worksheets("Task")。而是想使用函数参数。

以下代码不起作用:

Function CopyFile(name As String)

   Dim Wb1 As Workbook
   Dim Wb2 As Workbook
   Dim ws1 As Worksheet
   Dim ws2 As Worksheet

   Set Wb1 = ActiveWorkbook

   Set ws1 = Wb1.Worksheets(name)
   Set Wb2 = Workbooks.Open("D:\Outlook\dest.xlsx")
   ws1.Copy Wb2.Worksheets(1)

   Wb2.Save
   Wb2.Close
   Wb1.Activate

End Function

【问题讨论】:

  • 什么不起作用?你有错误吗?你的代码对我来说看起来不错,当然如果工作表不存在。

标签: excel vba


【解决方案1】:

它对我有用。如果你传递一个不存在的名字,你会得到一个错误。也许

Function CopyFile(sSheetName As String)

    Dim wbSource As Workbook
    Dim wbDest As Workbook
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet

    Set wbSource = ActiveWorkbook

    On Error Resume Next
        Set wsSource = wbSource.Worksheets(sSheetName)
    On Error GoTo 0

    If Not wsSource Is Nothing Then
        Set wbDest = Workbooks.Open("D:\Outlook\dest.xlsx")
        wsSource.Copy wbDest.Worksheets(1)

        wbDest.Save
        wbDest.Close
        wbSource.Activate
    End If

End Function

作品“名称”是 VBA 中的保留字。您仍然可以将其用作变量/参数名称,但您可能不应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2010-09-24
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多