ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[接龙...]部分程序代码注释,目录更新20051222

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2005-8-11 09:17 | 显示全部楼层
龙版主辛苦了,这对新手简直就是圣经啊

TA的精华主题

TA的得分主题

发表于 2005-8-11 11:08 | 显示全部楼层

龙三老师已进入化境!

就是出神入化的境介!

向龙三老师学习!

谢谢!

TA的精华主题

TA的得分主题

发表于 2005-8-11 11:17 | 显示全部楼层
lj1226189你老哥捧人的技术也已经进入化境!

TA的精华主题

TA的得分主题

发表于 2005-8-11 12:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

受益多多!

谢谢谢谢!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-8-11 12:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

14、编程中自定义函数的好处。工作簿是否有密码,工作表是否存在问题,刚好有人问到,两者的思路是一样的,都是错误处理方法,一起放上来吧

Function TestPassword(path) As Boolean '测试函数,测试一个工作簿是否含有密码 Dim wb As Workbook On Error GoTo line1 Set wb = Workbooks.Open(path, Password:="") '也是利用错误处理方法,打开这个工作簿,密码为空 TestPassword = False '如果没有密码是可以打开的,此时就设置为false wb.Close Exit Function line1: TestPassword = True '如果有密码,用空密码打开会产生错误,用on error跳转到true End Function

Sub hjs() Dim path$, i% Dim Files Files = Application.GetOpenFilename("所有文件(*.xls),*.xls", , , , True) '选择一些excel表试验 If Not IsArray(Files) Then Exit Sub '假如没有选择工作簿就退出 For i = 1 To UBound(Files) '对于选择的表,判断是否有密码 MsgBox Files(i) & Chr(13) & Chr(10) & "是否有密码:" & TestPassword(Files(i)) Next End Sub

2、判断一个工作表是否存在在目前的表里

Function Testsht(shtname As String) As Boolean '判断一个工作表是否存在在目前的表里 On Error GoTo line1 Sheets(shtname).Select '选择工作表,如果可以选择的话就是true,然后退出 Testsht = True Exit Function line1: Testsht = False '如果工作表不存在,则会跳转到line1这里,即为false End Function

Sub hjs() '随便找一两个名称试试,就知道了 MsgBox Testsht("Sheet1") MsgBox Testsht("s") End Sub

3、加一个判断单元格是否有批注的例子

Function Hpizhu(rng As Range) As Boolean '自定义函数,判断一个单元格是否含有批注 Dim s$ On Error GoTo line1 '产生错误的时候跳转到line1行 s = rng.Comment.Text '等于批注的内容,如果有就不会出错哦,如果没有就会出错 Hpizhu = True Exit Function '必须要,如果不退出,它会继续执行line1哦 line1: Hpizhu = False End Function

Sub hjs() '随便找两个试试哦 MsgBox Hpizhu(Range("a1")) MsgBox Hpizhu(Range("a2")) End Sub

4、判断一个工作表是否含有密码。

Function Shtp(sht As Worksheet) As Boolean Dim s$ On Error GoTo line1 s = sht.[iv65536].Delete '删除最后一个单元格,如果保护了就不能删除,否则是可以删除的 Shtp = True Exit Function line1: Shtp = False End Function

Sub hjs() MsgBox Shtp(Sheets("sheet1")) MsgBox Shtp(Sheets("sheet2")) End Sub

[此贴子已经被作者于2005-9-14 11:21:48编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-8-11 13:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

15、来个简单的自定义函数,链接文本的处理 tka4UOqr.rar (7.26 KB, 下载次数: 373)

Function MyData(rng As Range, N As Integer) As String '自定义函数 Dim iMax As Integer, s As String

Application.Volatile '如果任意单元格有变动,就会重新计算公式

With rng iMax = .Rows.Count '在这个自定义函数,是2列,求总行数 For i = 1 To iMax '在单元格里循环 If .Cells(i, 2) = N Then '当第二列等于数字N时,则链接第一列字符 s = s & IIf(s = "", "", ",") & .Cells(i, 1) 'IIf(s = "", "", ",")是为了防止第一个字符前面有“,”号 End If Next End With

MyData = s '给自定义函数赋值 End Function

附:在程序中做一个简单的自定义函数,可以提高程序的可读性,也便于修改代码,如楼上的两个例子,一段主代码最好不要太长,最好把部分处理过程用自定义函数或子过程

TA的精华主题

TA的得分主题

发表于 2005-8-11 16:44 | 显示全部楼层

按 字符串反转(颠倒前后顺序)后的字符串 进行排序

进行部分注释

coaTPzJK.rar (8.46 KB, 下载次数: 341)

Option Explicit Sub sortstrrev() Application.ScreenUpdating = False Dim selrng As Range Dim nw() As String, i%, j%, selrow%, tmp$ Set selrng = Application.Selection'取得当前选择区域 selrow = selrng.Rows.Count If selrow < 2 Then Exit Sub'如果选择行数小于2 终止 ReDim nw(1 To selrow) As String'重新定义 字符型数组的大小 With ActiveSheet'活动表中 For i = 1 To selrow'逐行 tmp = selrng(i, 1)'取每行第一列单元格的值 For j = Len(tmp) To 1 Step -1'从后向前 nw(i) = nw(i) + Mid$(tmp, j, 1)'依次取得每个位置上的字符,并合并字符串 Next nw(i) = nw(i) & "|/\|" & tmp'带上原来内容 用特殊字符隔开,便于后面替换 Next With selrng.Resize(selrow, 1) .Value = WorksheetFunction.Transpose(nw)'数组转置 selrng.Sort Key1:=selrng(1, 1), Header:=xlNo'选定的范围 按第一列排序 无标题行 .Replace "*|/\|", "" '替换中间排序用字符 End With End With Application.ScreenUpdating = True End Sub

[此贴子已经被作者于2005-8-11 16:52:12编辑过]

TA的精华主题

TA的得分主题

发表于 2005-8-11 16:53 | 显示全部楼层
龙三兄弟 也是急性子 我不正编辑着吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-8-11 17:07 | 显示全部楼层

asdf1001兄,不好意思了!我觉得你的思路很好,所以……

对于代码我觉得“With ActiveSheet'活动表中“没有什么必要吧,直接把代码放在工作表里就可以了,另外替代的过程如果别人的设置原先是完全匹配的话,代码就替换不了了,加一个设置.Replace "*|/\|", "", lookat:=xlPart,不知asdf1001兄意下如何

TA的精华主题

TA的得分主题

发表于 2005-8-11 17:31 | 显示全部楼层
LONG_III 说得是,要推敲的地方可能还有好多,没有花时间来调试了. 要考虑全了,可能就多了,合并单元格之类的都得考虑进去
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 23:13 , Processed in 0.038138 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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