立即注册! 找回密码?

用户名

密  码

您所在的位置: 首页 > 软件论坛 > Office办公应用论坛 > VBA实用代码(欢迎接龙)
版主: 罗刚君 版副: 暂无 嘉宾: 雷锋——间歇性活跃 红池雪牛 L~wu ueu
返回列表
浏览:51253 回复:141 VBA实用代码(欢迎接龙) [复制本帖链接]
  • 用户名:PCclub网友
  • 头 衔:太平洋舰队新兵
  • 积 分:4
  • 贡 献:3
  • 精 华:0
  • 注 册:2005-10-10
呵呵,看完各位的帖子,只觉得大家的水平都挺高的!!
不过我的OFFICE实在水平太菜,大家有什么好的建议吗,包括可以看一些什么书或者什么网站有这些内容,希望各位不吝赐教!!
我的MSN是经常开着的, lukunlin@hotmail.com,朋友们可以加一下~~
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
最后由 红池雪牛 于 2005-10-14 09:16:01 修改

一个可以让Excel、Access等程序播放声音文件的函数(只能放WAV文件)
会让你的系统或者表格别具一格哦 :)

使用方法:=PlaySound("声音文件名.WAV")  (声音文件必须含路径和扩展名)
          =PlaySound(A1)   (A1单元格中存放声音文件名)

Declare Function apisndPlaySound Lib "winmm" Alias "sndPlaySoundA" _
(ByVal filename As String, ByVal snd_async As Long) As Long
Function PlaySound(sWavFile As String)
If apisndPlaySound(sWavFile, 1) = 0 Then
MsgBox "The Sound Did Not Play!"
End If
End Function

 
本文于2005-10-14 09:16:01.139被 红池雪牛 修改过。这是本帖的第1次修改。
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
使用Sheel()函数在Excel中调用Word并打开一个DOC文档
这可是我们经常要用到的哦

Sub OpenDOC()
Dim RetVal
Dim filen As String
filen = InputBox("请输入文件名(含路径和扩展名)")
RetVal = Shell("D:\Programs\Microsoft Office\OFFICE11\WINWORD.EXE " + filen, vbNormalFocus)
Cells(1, 1) = RetVal
End Sub
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
使用Replace()函数统计一个字符串在另一个字符串中出现的次数自定义函数:

Public Function strCount(strA As String, strB As String) As Long
    Dim lngA As Long
    Dim lngB As Long
    Dim lngC As Long
    lngA = Len(strA)
    lngB = Len(strB)
    lngC = Len(Replace(strA, strB, ""))
    strCount = (lngA - lngC) / lngB
End Function
  • 用户名:Lwu
  • 头 衔:太平洋舰队少将
  • 积 分:7113
  • 贡 献:3558
  • 精 华:6
  • 注 册:2005-09-26
在 Excel 表中检查重复字段值的方法
    在大的数据文件入库前,往往要对数据文件做一些预处理工作,如人员信息在数据采集阶段可按部门统计到EXCEL表中,最后集中导入大型数据库(如ORACLE等),在这个过程中,因数据的唯一性问题导致的错误往往使你累得头昏脑涨:如人员信息中,稍不注意就会将身份证号重复输入,因为在此表中身份证号一般用作主键,有重复数据就不能入库,这种错误相当隐蔽,不容易检查。为此笔者编制了一段程序,可以自动检测包含相同字段值的记录,即用Excel的宏调用实现此功能,具体方法如下:
    打开Excel文件,选择“工具”,宏,录制新宏,确定;然后点击宏,出现宏名为“宏1”,点击编辑,将VB SCRIPT 输入: 

Sub 宏1() 
' 定义两个变量 
Dim a, b 
'EXCEL文件名字为:renyuanxx.xls 
Sheets("renyuanxx").Select 
'假设记录数为10000 
For i = 1 To 10000 
' 假设要检查的列为第8列 
a = Cells(i + 1, 8) 
For j = i + 1 To 10000 
b = Cells(j + 1, 8) 
If b = a Then 
'如果有相同的值就打印输出 
MsgBox b 
End If 
Next j 
Next i 

End Sub 

然后按状态栏里的执行键,就开始检查了,相同的字段名会提示在屏幕上。
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
呵呵,楼上的思路可以完成任务,但有一些问题。

1、你最后说的“相同的字段名会提示在屏幕上”,怎么会是“字段”相同呢,应该是“记录”吧,因为“字段”是列,“记录”是行

2、对于查找重复记录的方法很多,比如通过“高级筛选”、比如使用Countif()函数等等都可以的,相比较而言用VBA反倒没有效率了(就好像用飞机打蚊子一样)。

3、当然,最好的办法是在输入数据前设置好“数据有效性”,拒绝重复数据输入。
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
一个通用的“查找某列数据中某重复数据对应的其他列的值”的自定义函数

Public Function getnames(fenshu As Range, k As Range, s As Integer)
Dim i As Integer
Dim ii As Range
Dim Smax As String
Smax = ""
  j = k.Column
  For Each ii In k.Cells
  i = ii.Row
  If Cells(i, j).Value = fenshu Then
   If Smax = "" Then
   Smax = Cells(i, s).Value
   Else
   Smax = Smax + "、" + Cells(i, s).Value
   End If
  End If
 Next
getnames = Smax
End Function

使用方法:
=getnames(D56,D3:D54,3)共三个参数:
   D56是需要查找的分数所在单元格(这里是语文最高分)
   D3:D54是被查找的数据区域(这里是语文分数列)
   3 是需要返回数据所在的列,这里的3列表示返回“姓名”
如果给定的数据区域中(D3:D54)中含有多个被查找的数(D56),需要在相应列中(3)返回多个数值,那么这些数值将用“、”分隔
  • 用户名:PCclub网友
  • 头 衔:太平洋舰队新兵
  • 积 分:8
  • 贡 献:12
  • 精 华:0
  • 注 册:2005-10-22
谢谢了
我以前还真的不知道的
  • 用户名:dengyf
  • 头 衔:太平洋舰队秘书长
  • 积 分:30824
  • 贡 献:7012
  • 精 华:26
  • 注 册:2005-07-05
特别贡献勋章
本来想回提问贴的想想没用就发这儿吧
Sub 列空值取消()
 Dim m As Integer
  Sheet1.Columns(2).Value = Sheet1.Columns(1).Value
  For m = 1 To [b65536].End(xlUp).Row
  
   If Sheet1.Range("b" & m) = "" Then
     Sheet1.Range("b" & m).Delete SHIFT:=xlUp
           
   End If
  Next
  For m = 1 To [b65536].End(xlUp).Row
  
   If Sheet1.Range("b" & m) = "" Then
     Sheet1.Range("b" & m).Delete SHIFT:=xlUp
           
   End If
  Next
End Sub
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9566
  • 贡 献:5274
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
在VBA中使用Excel函数

通常的,一些Excel函数很高效的,但是不少函数却不是VBA函数,无法直接在VBA中使用,比如Sum()、Rank()等等,在VBA中直接使用都会出错的。比如:s=Sum(rang("A1:A10"))

但我们可以在VBA中通过Application.worksheetFunction对象来引用excel函数,而且其运行效率要比使用其他方式快捷得多:

如求工资和的例子:
通常的代码是:
For Each c In Range(″A1:A1000″) 
   Totalvalue = Totalvalue + c.value 
Next 

而下面代码程序比上面例子快得多: 
  Totalvalue=Application.WorksheetFunction.Sum(Range(″A1:A1000″)) 

  其它函数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代码,提高程序的运行速度。 
返回列表
PConline联想家庭云中心 终结者B B520 B320 B325