ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1236|回复: 4

[求助] WPS与EXCEL VBA代码执行结果不同的原因

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-24 17:24 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
相同的代码,在WPS与EXCEL上执行的结果不同,说明如下:

代码分2个部分,主程序部分

Sub NewCadDoc()
'    Application.ScreenUpdating = False '关闭屏幕自动更新 无论关闭与否,不影响EXCEL的状态栏赋值语句的执行,且第二打开的表格文件都不显示
'无论是否关闭,WPS的状态栏赋值预计都不执行(只有采用Workbooks.Open打开时 显示第一次赋值,后面有不更新了,下面有说明)
             Dim wb As Workbook
             Dim sht As Worksheet
             Dim sheetname As String
             Dim sheetexist As Boolean
'
             Set wb = openWb(stablefilename, path_father)  ’ CreateObject 方式打开第二个表格文件
'          Set wb = openWb(stablefilename, path_father,True) ’Workbooks.Open 方式打开第二个表格文件



   Set cadDoc = open_cad_file(tfilename)
  Application.StatusBar = "正在给" & tfilename & "进行文字替换"
  For k = start_column To end_column
   Dim replace_key As String
   replace_key = Sheet5.Cells(4, k)
   If Left(replace_key, 1) = "$" Then
   Application.StatusBar = tfilename & "正在替换图纸内字符串" & replace_key
   Call replacetext_cad_file(cadDoc, j, k) '普通字符串替换
   End If
   If Left(replace_key, 1) = "<" Then
   Application.StatusBar = tfilename & "正在替换图框内字符串" & replace_key
   Call replacekuaitext_cad_file(cadDoc, kuainame, j, k) '块内字符串替换
   End If
   If Left(replace_key, 1) = "[" And Sheet5.Cells(j, k) <> "" Then
   Application.StatusBar = tfilename & "正在替换表格内容" & replace_key
   Call replacetabletext_cad_file(cadDoc, j, k,wb) '更新图纸的表格
   End If
  Next

Application.StatusBar = ""
'Application.ScreenUpdating = True '屏幕自动更新
MsgBox "已生成全部图纸"
End Sub


'子程序代码是打开第二个xlsx文件
'希望不显示,Workbooks.Open 时WPS会显示,CreateObject时 WPS 不会显示
'Workbooks.Open ,CreateObject 在Excel中均不显示第二个打开的文件


'判断指定为文件是否已经打开
Function isWbOpen(filename As String) As Boolean
    Dim w As Workbook
    For Each w In Application.Workbooks
        If w.Name = filename Then isWbOpen = True: Exit Function
    Next
    isWbOpen = False
End Function

'安全打开excel文件,需要把文件名和目录名分开传递
' Function openWb(filename As String, pth As String, Optional M As Boolean = False) As Workbook

Function openWb(filename As String, pth As String) As Workbook
    If isWbOpen(filename) Then
        Set openWb = Application.Workbooks(filename)
    Else
        On Error Resume Next
'        Set openWb = Workbooks.Open(pth & filename, UpdateLinks:=0, ReadOnly:=M) '使用此方式打开,excel环境下不会显示打开的文件,且
'excel代码运行时,状态栏更新,但是WPS环境下运行,显示打开的文件,状态栏只会显示第一次打开新文件时的Application.StatusBar 赋值的内容,后面不会更新
        Set openWb = CreateObject(pth & filename)'使用此方式打开,excel环境下不会显示打开的文件,且excel代码运行时,状态栏更新,但是
'WPS环境下运行,不会显示打开的文件,状态栏不会更新
        If Err <> 0 Then
            Err.Clear
            Set openWb = Nothing
        End If
    End If
End Function



TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-24 17:46 | 显示全部楼层
经过简单的测试,Application.StatusBar = "测试变化:" & count在WPS就是不能正确执行,只会显示最终的一次,过程中的赋值不显示,或者VBA在执行过程中 状态栏不更新

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub 状态栏测试()

'    Application.ScreenUpdating = False
    Dim count As Integer
    For count = 1 To 10
    Application.StatusBar = "测试变化:" & count
    Sleep (2000)
    Next
    Application.StatusBar = ""
'    Application.ScreenUpdating = True

End Sub

TA的精华主题

TA的得分主题

发表于 2022-11-24 20:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我用的是wps,在WPS可以正常运行但到excel会出错,后来才知道WPS装的vba插件是很早的版本,跟2007以后的excel有的代码会不兼容。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-25 08:26 | 显示全部楼层
我做晚做测试时发现,上面的测试代码,在状态栏会神经式更新,就是无规律更新,例如会更新:测试变化:1、测试变化:4、测试变化:6、测试变化:7、测试变化:9,这些数字不规则出现

TA的精华主题

TA的得分主题

发表于 2022-11-25 12:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 20:31 , Processed in 0.028621 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表