ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] Excel 2003另存为新工作簿时,去除模块里的宏,其实只需这一句。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-23 20:45 | 显示全部楼层
本帖最后由 老谭酸菜 于 2013-11-23 20:47 编辑
shenghua8 发表于 2013-11-23 18:37
谢谢谭Sir !
空值也试过了,没问题。
我还奢求它应用于整列。

难道这个不能应用于整列?
=众值(D1:D65536),这样总可以吧?

不过我的老师群子已经写了更快速的代码,不妨就用她的咯。
{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2013-11-23 21:01 | 显示全部楼层
楼主的意思是要忽略空白单元格。群子的和俺的代码都没考虑这个问题。呵呵。需要加一个判断更合楼主的心意。

TA的精华主题

TA的得分主题

发表于 2013-11-23 21:17 | 显示全部楼层
老谭酸菜 发表于 2013-11-23 21:01
楼主的意思是要忽略空白单元格。群子的和俺的代码都没考虑这个问题。呵呵。需要加一个判断更合楼主的心意。

那就这样:
  1. Function 众值(rng As Range)
  2.     Set d = CreateObject("Scripting.Dictionary") '定义字典
  3.     Set rng = Intersect(rng, ActiveSheet.UsedRange) '确保可以直接引用整列
  4.     For Each c In rng
  5.         t = c.Text '使用变量t写入单元格值,提高效率
  6.         If Len(t) Then '排除空白单元格
  7.             n = d(t) + 1: d(t) = n '不需要d.Exists判断,是多余的。
  8.             If n > m Then m = n: s = t '后面使用变量进行计算,非常地简单、高效
  9.         End If
  10.     Next
  11.     众值 = s
  12. End Function
复制代码
可以直接引用整列如:=众值(A:D)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-23 21:34 | 显示全部楼层
香川群子 发表于 2013-11-23 21:17
那就这样:可以直接引用整列如:=众值(A:D)

{:soso_e113:}{:soso_e179:}
这样就完成楼主的心愿了。
range仅受工作表单元格数量的限制。即使这样“=众值(A:IV)”也没问题。


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-24 13:48 | 显示全部楼层
香川群子 发表于 2013-11-23 21:17
那就这样:可以直接引用整列如:=众值(A:D)

就是这样!
我用50多列不同格式和类型的值测试,都能得出正确结果:
1、有唯一众值的,得到这个众值。
2、有两个及以上众值的,得到首先遇到的众值。
3、没有众值的,得到第一个值,这个还能起到另外的作用,检查是否都是唯一值。
4、整列都是空白的,得到#VALUE!

另外,整行也试了,也没问题。

{:soso_e183:}
漂亮、知性、善良的老师,高端大气上档次,低调奢华有内涵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-24 13:53 | 显示全部楼层
本帖最后由 shenghua8 于 2013-11-24 14:06 编辑
老谭酸菜 发表于 2013-11-23 21:34
这样就完成楼主的心愿了。
range仅受工作表单元格数量的限制。即使这样“= ...


完成了,完成心愿了!{:soso_e179:}

谭Sir,您创造性的用了“众值”这个词,真是准确啊。

TA的精华主题

TA的得分主题

发表于 2023-3-24 23:06 | 显示全部楼层
山菊花 发表于 2013-11-22 20:28
试试:
Sub 另存为XML表格()
    Dim cPath$, cFile$

漂亮!老师,可不可以导出指定的一个工作表???

TA的精华主题

TA的得分主题

发表于 2023-3-26 16:11 | 显示全部楼层
jjmsxr 发表于 2023-3-24 23:06
漂亮!老师,可不可以导出指定的一个工作表???

将指定的工作表复制为新工作簿,再保存为指定格式。

TA的精华主题

TA的得分主题

发表于 2023-3-26 23:12 | 显示全部楼层
山菊花 发表于 2023-3-26 16:11
将指定的工作表复制为新工作簿,再保存为指定格式。

Sub 另存为XML表格()
    Dim cPath$, cFile$
    Application.DisplayAlerts = False
    cPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" '将文件保存到桌面
    cFile = cPath & Format(Now, "yyyymmddhhmmss_") & ThisWorkbook.Name  '文件名(伪装的扩展名)
    ThisWorkbook.SaveAs Filename:=cFile, FileFormat:=xlXMLSpreadsheet '另存为
    ThisWorkbook.Close False '退出
    Application.DisplayAlerts = True
End Sub

老师,怎么修改???

TA的精华主题

TA的得分主题

发表于 2023-3-27 16:29 | 显示全部楼层
Sub 另存为XML表格()
    Dim cPath$, cFile$, cSh$
    Application.DisplayAlerts = False
    cPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" '将文件保存到桌面
    cSh = "Sheet2" '工作表名
    cFile = cPath & Format(Now, "yyyymmddhhmmss_") & cSh  '文件名
    ThisWorkbook.Sheets(cSh).Copy '复制工作表到新工作簿
    With ActiveWorkbook
        .SaveAs Filename:=cFile, FileFormat:=xlXMLSpreadsheet '另存为
        .Close False '退出
    End With
    MsgBox "工作表已另存。"
    Application.DisplayAlerts = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 03:28 , Processed in 0.047068 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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