2013-07-17 137 views
3

我创建了Excel的加载项,它确定了ActiveSheetActiveWorkbook的名称。我使用的代码如下。当我运行加载项时,它在消息框“变量集”之后显示上述错误。但是当我在宏中运行它时,它工作正常。我不明白加载项发生了什么。任何人都可以帮助我吗?获取错误“对象变量或未设置块变量”

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 
+0

您是否正在打开工作簿上的加载项运行? – Ripster

+7

如果您的加载项是加载的唯一工作簿,则可能没有ActiveWorkbook ... –

回答

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 
3

导致此问题的常见问题是忘记使用'Set'将值赋予变量。

-1

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

相关问题