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