You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:25:05