为何ws_PartLog.Range("A7:DM1007").ClearContents在部分电脑失效?
问题:调用VBA clear()子过程时ws_PartLog未定义错误(仅特定Excel 2016电脑出现)
调用clear()子过程时,ws_PartLog.Range("A7:DM1007").ClearContents行出现未定义错误。该问题仅在某一台Excel 2016电脑上发生,另一台Excel 2016电脑及Excel 365电脑均能正常运行。即使在clear()内重新定义wb_PartLog和ws_PartLog对象,问题仍未解决。
原相关代码
' 本工作簿的公共变量 Public wb_Kepware As Workbook ' 原wbBook1 Public wb_PartLog As Workbook ' 原wbBook2 Public ws_Kepware As Worksheet ' 原wsSheet1 Public ws_PartLog As Worksheet ' 原wsSheet2 Public Sub SvLog() ' 将文件名保存为指定单元格值加当前日期 ws_PartLog.Activate Dim newFile As String, fName As String, folder As String ActiveWorkbook.Save ActiveWorkbook.Saved = True fName = ws_Kepware.Range("D44").Text ' D44存储当前时间格式值,示例:"41923151917" newFile = fName ' 更改目标目录 folder = ws_Kepware.Range("D40").Value ' D40存储日志目录,示例:"C:\DATA_LOGGER\WL75_Logs" 'MsgBox (folder) ChDrive Left(folder, 1) ChDir folder ActiveWorkbook.SaveAs Filename:=newFile Set wb_PartLog = GetWorkbook(wb_Kepware.Worksheets("Kepware").Range("D40").Value + "\\" + fName + ".xlsm") Set ws_PartLog = wb_PartLog.Worksheets("Log") ws_Kepware.Range("J44").Value = fName Call clear ActiveWorkbook.Save ActiveWorkbook.Saved = True ws_Kepware.Activate End Sub Public Sub clear() Application.EnableEvents = False 'MsgBox (ws_PartLog.Name) ws_PartLog.Activate ws_PartLog.Range("A7:DM1007").ClearContents '<< 此处触发ws_PartLog未定义错误 ws_PartLog.Range("A7:DM1007").Interior.ColorIndex = 0 ws_PartLog.Range("A7").Select Application.EnableEvents = True End Sub Public Function GetWorkbook(ByVal sFullName As String) As Workbook Dim sFile As String Dim wbReturn As Workbook sFile = Dir(sFullName) On Error Resume Next Set wbReturn = Workbooks(sFile) If wbReturn Is Nothing Then Set wbReturn = Workbooks.Open(sFullName) End If On Error GoTo 0 Set GetWorkbook = wbReturn End Function
尝试修改后的clear()代码
Public Sub clear() Set wb_PartLog = GetWorkbook(Worksheets("Kepware").Range("D40").Value + "\\" + Worksheets("Kepware").Range("J44").Text + ".xlsm") 'GetWorkbook会在工作簿未打开时自动打开 Set ws_PartLog = wb_PartLog.Worksheets("Log") Application.EnableEvents = False 'MsgBox (ws_PartLog.Name) ws_PartLog.Activate ws_PartLog.Range("A7:DM1007").ClearContents ws_PartLog.Range("A7:DM1007").Interior.ColorIndex = 0 ws_PartLog.Range("A7").Select Application.EnableEvents = True End Sub
内容的提问来源于stack exchange,提问作者ElectricMike
相关产品推荐
相关产品推荐

