Excel VBA运行时错误‘;91’;:对象变量或未设置块变量

Excel VBA运行时错误‘;91’;:对象变量或未设置块变量,excel,vba,Excel,Vba,我在这里是全新的,虽然我对Excel非常熟练,但我对VBA的了解很少。我把一个我们在工作中使用的Excel程序放在我的膝上,因为它开始抛出多个错误,我是这个工作的“最佳”人选:( 我已经搜索了这个最优秀的论坛和其他几个论坛,并且已经能够解决我的大部分问题,但是现在出现了一个新的错误,我不知道为什么 运行时错误“91”: 对象变量或未设置块变量 它会在我启动程序时弹出 调试器中突出显示的区域是: If ActiveWorkbook.Name = wbkTT Then 我正在发布下面的代码部分 非

我在这里是全新的,虽然我对Excel非常熟练,但我对VBA的了解很少。我把一个我们在工作中使用的Excel程序放在我的膝上,因为它开始抛出多个错误,我是这个工作的“最佳”人选:(

我已经搜索了这个最优秀的论坛和其他几个论坛,并且已经能够解决我的大部分问题,但是现在出现了一个新的错误,我不知道为什么

运行时错误“91”: 对象变量或未设置块变量

它会在我启动程序时弹出

调试器中突出显示的区域是:

If ActiveWorkbook.Name = wbkTT Then
我正在发布下面的代码部分

非常感谢您的帮助

' TTV2.xlam version 5/15/12 14:00

Const wbkTT As String = "Time Tracker ver2.xlsm"
Const RibbonxAddin As String = "TTV2.xlam"


Option Explicit
Private Sub Workbook_Open()

Dim strName As String
Dim strPath As String
Dim strNewShow As String
Dim strDate As String
Dim strTime As String
Dim strDepartment As String
Dim strOS As String
Dim strVersion As String
Dim dtFormat As String
Dim myAddIn As AddIn
Dim wbkDateOrder As Integer
Dim timedropdown As Boolean

strVersion = Application.Version
strOS = Application.OperatingSystem
dtFormat = DateFormat
newTTwbk = wbkTT

If strVersion < 14 Then
    MsgBox ("You are running an outdated version of Excel." & Chr(10) & _
        "Time Tracker will only run on MS Excel 2011 for Mac")
    ActiveWorkbook.Close
Exit Sub
Else
    wbkDateOrder = Application.International(xlDateOrder)
    strTime = Format(time, "hhmm")
    strDate = Format(Date, "mmdd")
    If ActiveWorkbook.Name = wbkTT Then
        strName = Replace(Workbooks(wbkTT).Sheets("Show Info").Range("A2").Value, " ", "")
        ActiveWorkbook.Sheets("Preferences").Range("D2:D3").NumberFormat = dtFormat
        ActiveWorkbook.Sheets("Data").Range("B:B").NumberFormat = dtFormat
    End If '
AddMenu
    ActiveWorkbook.Sheets("Preferences").visible = True
    timedropdown = ActiveWorkbook.Sheets("Preferences").Range("E3")
    If timedropdown Then
        ActiveWorkbook.Sheets("Data").Range("G:L").Validation.Delete
        ActiveWorkbook.Sheets("Data").Range("G:L").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Time"
    Else
        ActiveWorkbook.Sheets("Data").Range("G:L").Validation.Delete
    End If
   If ActiveWorkbook.Sheets("Show Info").Range("A2").Value = "TTV2" Then
        If strOS Like "*Win*" Then
            strPath = ThisWorkbook.Path & "\"
        Else
            strPath = ThisWorkbook.Path & ":"
        End If
        strName = InputBox(Prompt:="Show Name please.", Title:="ENTER SHOW NAME", Default:="Show Name Here")
        strDepartment = InputBox(Prompt:="Enter your Department:", Title:="ENTER DEPARTMENT", Default:="Department Here")
        showcrewform
      If strName = "Show Name Here" Or strName = vbNullString Then
            Exit Sub
        Else
            ActiveWorkbook.Sheets("Show Info").Range("A2").Value = strName
            ActiveWorkbook.Sheets("Show Info").Range("B2").Value = strDepartment
            If Not strOS Like "*Mac*" Then
                strNewShow = strPath & strName & "_" & strDate & "_" & strTime & ".xlsm"
            Else
                strNewShow = strPath & strName & "_" & strDate & "_" & strTime & ".xlsm"
            End If
            ActiveWorkbook.SaveAs strNewShow, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            MsgBox ("You are now working on the file: " & strNewShow)
            loadwbkName
            ResetDataSheet
            Exit Sub
        End If
    End If
    If strOS Like "*Mac*" Then
        AddMenu
    End If
    ResetDataSheet
End If
End Sub
TTV2.xlam版本5/15/12 14:00 Const wbkTT As String=“时间跟踪器ver2.xlsm” Const RibbonxAddin As String=“TTV2.xlam” 选项显式 私有子工作簿_Open() 将strName设置为字符串 将strPath设置为字符串 以字符串形式显示的暗淡strNewShow 作为字符串的Dim strDate 作为字符串的Dim strTime 作为字符串的Dim strDepartment 暗频串 作为字符串的Dim strrvision Dim DTA格式为字符串 Dim myAddIn As AddIn Dim wbkDateOrder为整数 Dim Time下拉列表为布尔值 strrvision=Application.Version strOS=应用程序.操作系统 dtFormat=DateFormat newTTwbk=wbkTT 如果阈值小于14,则 MsgBox(“您运行的是过时版本的Excel。”&Chr(10)&_ “时间跟踪器将仅在MS Excel 2011 for Mac上运行”) 活动工作簿。关闭 出口接头 其他的 wbkDateOrder=Application.International(xlDateOrder) strTime=格式(时间,“hhmm”) 标准日期=格式(日期,“mmdd”) 如果ActiveWorkbook.Name=wbkTT,则 strName=Replace(工作簿(wbkTT).工作表(“显示信息”).范围(“A2”).值“,”) ActiveWorkbook.Sheets(“首选项”).Range(“D2:D3”).NumberFormat=dtFormat ActiveWorkbook.Sheets(“数据”).Range(“B:B”).NumberFormat=dtFormat 结束 添加菜单 ActiveWorkbook.Sheets(“首选项”).visible=True timedropdown=ActiveWorkbook.Sheets(“首选项”).Range(“E3”) 如果时间下降,那么 ActiveWorkbook.Sheets(“数据”).Range(“G:L”).Validation.Delete ActiveWorkbook.Sheets(“数据”).Range(“G:L”).Validation.Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:=xlBetween,公式1:=Time 其他的 ActiveWorkbook.Sheets(“数据”).Range(“G:L”).Validation.Delete 如果结束 如果ActiveWorkbook.Sheets(“Show Info”).Range(“A2”).Value=“TTV2”,则 如果strOS喜欢“*Win*”那么 strPath=thispoolk.Path&“\” 其他的 strPath=ThisWorkbook.Path&“:” 如果结束 strName=InputBox(提示:=“请显示名称”,标题:=“输入显示名称”,默认值:=“在此处显示名称”) strDepartment=InputBox(提示:=“输入您的部门:”,标题:=“输入部门”,默认值:=“此处的部门”) showcrewform 如果strName=“在此处显示名称”或strName=vbNullString,则 出口接头 其他的 ActiveWorkbook.Sheets(“显示信息”).Range(“A2”).Value=strName ActiveWorkbook.Sheets(“显示信息”).Range(“B2”).Value=strDepartment 如果不是像“*Mac*”这样的strOS,那么 strNewShow=strPath&strName&“”&strDate&“”&strTime&“.xlsm” 其他的 strNewShow=strPath&strName&“”&strDate&“”&strTime&“.xlsm” 如果结束 ActiveWorkbook.SaveAs strNewShow,文件格式:=xlOpenXMLWorkbookMacroEnabled MsgBox(“您现在正在处理文件:&strNewShow”) 装载机 重置数据表 出口接头 如果结束 如果结束 如果strOS像“*Mac*”那么 添加菜单 如果结束 重置数据表 如果结束 端接头
添加了一些缺少的声明和End If语句……我没有发现下面的任何运行时错误。 (编辑:添加新代码)

TTV2.xlam版本5/15/12 14:00 Const wbkTT As String=“时间跟踪器ver2.xlsm” Const RibbonxAddin As String=“TTV2.xlam” "增加声明, Dim DTA格式为字符串 Dim日期格式 Dim NewtWbk 选项显式 私有子工作簿_Open() 将strName设置为字符串 将strPath设置为字符串 以字符串形式显示的暗淡strNewShow 作为字符串的Dim strDate 作为字符串的Dim strTime 作为字符串的Dim strDepartment 暗频串 作为字符串的Dim strrvision Dim DTA格式为字符串 Dim myAddIn As AddIn Dim wbkDateOrder为整数 Dim Time下拉列表为布尔值 "增加声明, 将WB设置为工作簿 '添加了代码 设置WB=ActiveWorkbook strrvision=Application.Version strOS=应用程序.操作系统 dtFormat=DateFormat newTTwbk=wbkTT 如果阈值小于14,则 MsgBox(“您运行的是过时版本的Excel。”&Chr(10)&_ “时间跟踪器将仅在MS Excel 2011 for Mac上运行”) WB.关闭“保存”(真/假) 出口接头 其他的 wbkDateOrder=Application.International(xlDateOrder) strTime=格式(时间,“hhmm”) 标准日期=格式(日期,“mmdd”) 如果WB.Name=wbkTT,则 strName=Replace(工作簿(wbkTT).工作表(“显示信息”).范围(“A2”).值“,”) WB.Sheets(“首选项”).Range(“D2:D3”).NumberFormat=dtFormat WB.Sheets(“数据”).Range(“B:B”).NumberFormat=dtFormat 如果结束 “添加菜单 WB.Sheets(“首选项”).Visible=True timedropdown=WB.Sheets(“首选项”).Range(“E3”) 如果时间下降,那么 WB.表格(“数据”).范围(“G:L”).验证.删除 WB.Sheets(“数据”).Range(“G:L”).Validation.Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:=xlBetween,公式1:=“=Time” 其他的 WB.表格(“数据”).范围(“G:L”).验证.删除 如果结束 如果WB.Sheets(“显示信息”)范围(“A2”).Value=“TTV2”,则 如果strOS喜欢“*Win*”那么 strPath=thispoolk.Path&“\” 其他的 strPath=ThisWorkbook.Path&“:” 如果结束 strName=InputBox(提示:=“请显示名称”,标题:=“输入显示名称”,默认值:=“显示名称”
' TTV2.xlam version 5/15/12 14:00

Const wbkTT As String = "Time Tracker ver2.xlsm"
Const RibbonxAddin As String = "TTV2.xlam"

'ADDED DECLARATIONS
Dim dtFormat As String
Dim DateFormat
Dim newTTwbk

Option Explicit

Private Sub Workbook_Open()
Dim strName As String
Dim strPath As String
Dim strNewShow As String
Dim strDate As String
Dim strTime As String
Dim strDepartment As String
Dim strOS As String
Dim strVersion As String
Dim dtFormat As String
Dim myAddIn As AddIn
Dim wbkDateOrder As Integer
Dim timedropdown As Boolean

' ADDED DECLARATIONS
Dim WB As Workbook

'ADDED CODE
Set WB = ActiveWorkbook

strVersion = Application.Version
strOS = Application.OperatingSystem
dtFormat = DateFormat
newTTwbk = wbkTT

If strVersion < 14 Then
    MsgBox ("You are running an outdated version of Excel." & Chr(10) & _
        "Time Tracker will only run on MS Excel 2011 for Mac")
    WB.Close 'SAVE? (TRUE/FALSE)
    Exit Sub
Else
    wbkDateOrder = Application.International(xlDateOrder)
    strTime = Format(Time, "hhmm")
    strDate = Format(Date, "mmdd")
    If WB.Name = wbkTT Then
        strName = Replace(Workbooks(wbkTT).Sheets("Show Info").Range("A2").Value, " ", "")
        WB.Sheets("Preferences").Range("D2:D3").NumberFormat = dtFormat
        WB.Sheets("Data").Range("B:B").NumberFormat = dtFormat
    End If
    'AddMenu
    WB.Sheets("Preferences").Visible = True
    timedropdown = WB.Sheets("Preferences").Range("E3")
    If timedropdown Then
        WB.Sheets("Data").Range("G:L").Validation.Delete
        WB.Sheets("Data").Range("G:L").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Time"
    Else
        WB.Sheets("Data").Range("G:L").Validation.Delete
    End If
    If WB.Sheets("Show Info").Range("A2").Value = "TTV2" Then
        If strOS Like "*Win*" Then
            strPath = ThisWorkbook.Path & "\"
        Else
            strPath = ThisWorkbook.Path & ":"
        End If
        strName = InputBox(Prompt:="Show Name please.", Title:="ENTER SHOW NAME", Default:="Show Name Here")
        strDepartment = InputBox(Prompt:="Enter your Department:", Title:="ENTER DEPARTMENT", Default:="Department Here")
        'showcrewform
        If strName = "Show Name Here" Or strName = vbNullString Then
            Exit Sub
        Else
            WB.Sheets("Show Info").Range("A2").Value = strName
            WB.Sheets("Show Info").Range("B2").Value = strDepartment
            If Not strOS Like "*Mac*" Then
                strNewShow = strPath & strName & "_" & strDate & "_" & strTime & ".xlsm"
            Else
                strNewShow = strPath & strName & "_" & strDate & "_" & strTime & ".xlsm"
            End If
            WB.SaveAs strNewShow, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            MsgBox ("You are now working on the file: " & strNewShow)
            'loadwbkName
            'ResetDataSheet
            Exit Sub
        End If
    End If
    If strOS Like "*Mac*" Then
        'AddMenu
    End If
    'ResetDataSheet
End If
End Sub