4

我为 Excel 创建了一个加载项,它确定 和 的ActiveSheet名称 ActiveWorkbook。我使用的代码如下。当我运行加载项时,它在消息框“变量集”之后显示上述错误。但是当我在宏中运行它时它工作正常。我不明白加载项发生了什么。谁能帮我解决这个问题?

Sub sheetvalues()
    Dim bk As Workbook, sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet
    Dim book As String, sht As String, i As Integer, j As Integer
    Dim att(1 To 4) As String, att_col(1 To 4) As Integer

    MsgBox ("variables set")

    book = ActiveWorkbook.Name
    sht = ActiveSheet.Name
    MsgBox ("names set")

    Set bk = Workbooks.Add
    With bk
        .Title = "MissingValues"
        .SaveAs Filename:="MissingValues.xls"
    End With

    Set sht1 = bk.Sheets.Add
    sht1.Name = "EndOne"
    Set sht2 = bk.Sheets.Add
    sht2.Name = "EndTwo"
    Set sht3 = bk.Sheets.Add
    sht3.Name = "EndThree"

    MsgBox (book & "  " & sht)
    MsgBox ("completed")
End Sub
4

3 回答 3

8

导致此问题的一个常见问题是忘记使用“设置”来为变量赋值。

于 2013-12-09T18:31:36.473 回答
0

就像@TimWilliams 所说,如果您的加载项是唯一加载的工作簿,您将收到此错误。在这种情况下,没有活动的工作簿,并且您的代码在线失败

book = ActiveWorkbook.Name

您可以通过添加以下行来检查工作簿是否存在:

Set bk = Application.ActiveWorkbook
If bk Is Nothing Then
    MsgBox ("No workbook open. Creating a new one.")
    Set bk = Workbooks.Add(xlWBATWorksheet)
    Set sht1 = bk.ActiveSheet
End If

所以你最终得到:

Sub sheetvalues()
    Dim bk As Workbook, sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet
    Dim book As String, sht As String, i As Integer, j As Integer
    Dim att(1 To 4) As String, att_col(1 To 4) As Integer

    MsgBox ("variables set")

    Set bk = Application.ActiveWorkbook
    If bk Is Nothing Then
        MsgBox ("No workbook open. Creating a new one.")
        Set bk = Workbooks.Add(xlWBATWorksheet)
        Set sht1 = bk.ActiveSheet
    End If


    book = ActiveWorkbook.Name
    sht = ActiveSheet.Name
    MsgBox ("names set")

    Set bk = Workbooks.Add
    With bk
        .Title = "MissingValues"
        .SaveAs Filename:="MissingValues.xls"
    End With

    Set sht1 = bk.Sheets.Add
    sht1.Name = "EndOne"
    Set sht2 = bk.Sheets.Add
    sht2.Name = "EndTwo"
    Set sht3 = bk.Sheets.Add
    sht3.Name = "EndThree"

    MsgBox (book & "  " & sht)
    MsgBox ("completed")
End Sub
于 2013-07-17T22:02:18.557 回答
0

检查 Excel 中的工作簿是否询问您是否要打开写保护版本。我认为,虽然这个问题存在,但工作簿不被认为是活跃的,也不是任何其他的

于 2016-11-24T12:57:34.547 回答