立即注册! 找回密码?

用户名

密  码

您所在的位置: 首页 > 软件论坛 > Office办公应用论坛 > VBA实用代码(欢迎接龙)
版主: 罗刚君 版副: 暂无 嘉宾: 红池雪牛 L~wu ueu
返回列表
浏览:51809 回复:141 VBA实用代码(欢迎接龙) [复制本帖链接]
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
最后由 于 2005-05-30 13:56:40 修改

工作中,我们经常需要实用VBA来完成我们的任务,但有时候我们并不能完全把握VBA的精髓,走了些弯路。比如,我以前判断一个表的最后一行使用的是这个办法:

i=3
do while not(isempty(sheets("工作表名").cells(i,1).value))
  i=i+1
loop

结果行数就是:i-1

后来,才发现居然用一行代码就可以实现:
i = Range("A65536").End(xlUp).Row

于是,为了使我们少走弯路,提高效益,请我们都把在各自具体工作中实现某些功能的代码贡献于此。

不一定非要完整的VBA代码,主要的是为完成某项功能的VBA语句。必要的地方可以增加注释。欢迎跟帖,就像玩接龙游戏一样。众人拾柴火焰高嘛!


本文于2005-05-30 13:56:40.164被liuyuping第2次修改。
分享到: QQ空间 新浪微博 腾讯微博 更多
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
最后由 于 2005-05-30 13:57:10 修改
还是先来一个:

取最后一行行号:i = Range("A65536").End(xlUp).Row 

取最后一列列号:m = Range("dz1").End(xlToLeft).Column
(这是从行号类推出来的,dz列有130列,在日常使用中应该差不多了)


本文于2005-05-30 13:57:10.326被liuyuping第1次修改。
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
最后由 红池雪牛 于 2008-01-17 10:00:14 修改
遍历工作簿中所有表

下面的代码将在当前工作表中显示整个工作簿中所有表的表名和第一个第一个的内容

i=1
For Each m In Sheets             '遍历每个工作表
    cells(i,1)=m.name            '取工作表名
    cells(i,2)=sheets(m.name).cells(1,1)   '取工作表第一个单元格内容
    i=i+1
next
    

  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
求某月天数

Function tianshu(riqi As Date) As Byte 
tianshu = DateSerial(Year(riqi), Month(riqi) + 1, Day(riqi)) - riqi 
End Function 

'求月末日期
Function yuemo(riqi As Date) As Date 
yuemo = DateSerial(Year(riqi), Month(riqi) + 1, 0)  
End Function 
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
获取块内字数

WORD中有“字数统计”的工具,但和WPS比起来,WORD只能对整篇文档的各类字符数进行统计,而没有对已选择的文字块内的字数统计,下面的代码可以完成这一任务:

MsgBox "块内字符:  " + Str(Len(Selection))
  • 用户名:Nibbles
  • 头 衔:太平洋舰队准将
  • 积 分:6052
  • 贡 献:2893
  • 精 华:3
  • 注 册:2004-06-30
利用工作表中的公式帮助简化VBA程序

利用工作表中的公式来实现复杂的数学计算可以简化程序.
尤其是一些回归方法,用程序实现的时候往往需要几重循环嵌套,要用数组,程序要写得比较复杂的.
我们可以,在工作表中的固定地方作为数据输入区域,用公式实现计算,结果显示在另一个固定区域.
每次计算的时候只要用程序实现把数据复制到输入区域中的对应单元格,然后马上能到结果区域中拿结果了.所有计算的步骤都不用程序实现,用Excel公式帮你搞定了.
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
对头,关于公式的运用可以再开一帖专门讨论,其实哥哥已经弄了一个,可惜没有跟上帖,原来是置顶的,怎么沉了?其实该继续置顶,我设想的常置顶包括这些内容:
1、Word、Excel、Access、PowerPoint等常用Office组件的独门技巧接龙
2、VBA实用代码(不仅仅是Excel,涵盖包括Word、Access等所有的Office组件的VBA应用
3、Excel公式(函数)运用旨要(就是哥哥原来那个函数集合,望继续置顶)

当然,这里还是讨论VBA的,望各位接下去啊
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
GGJJDDMM怎么都不接招啊

只好转一个了:
自动转换15位身份证号码位18位
功能:将15的身份证号升为18位(根据GB 11643-1999) 
参数:原来的号码(15位) 
返回:升位后的18位号码 
用法:=IDCODE(a1)  (假设A1单元格存放的是原15位号码)

Public Function IDCode(sCode15 As String) As String 
  Dim i,num As Integer 
  Dim code As String 
  num = 0 
  IDCode = Left(sCode15, 6) + "19" + Right(sCode15, 9) 
  ' 计算校验位 
  For i = 18 To 2 Step -1 
   num = num + (2 ^ (i - 1) Mod 11) * (Mid(IDCode, 19 - i, 1)) 
  Next i 
  num = num Mod 11 
  Select Case num 
  Case 0 
   code = "1" 
  Case 1 
   code = "0" 
  Case 2 
   code = "X" 
  Case Else 
   code = Trim(Str(12 - num)) 
  End Select 
  IDCode = IDCode + code 
End Function 
  • 用户名:PCclub网友
  • 头 衔:太平洋舰队新兵
  • 积 分:7
  • 贡 献:15
  • 精 华:0
  • 注 册:2004-07-19
加入gg的行列中!这不是我作的,但是在我的工作经常用到。
用excel实现自动批卷,并得出不同题号间的正确数(这部分代码是我自己加的)!和大家分享!
Sub test()

Dim studentno          '学号
 Dim rwIndex As Integer  '行号
 Dim clIndex As Integer  '列号
 Dim tAnswer As String   '标准答案
 Dim sAnswer As String   '学生答案
 Dim trueNumber As Integer  '正确数
 Dim wrongNumber As Integer '错误数
 Dim total1 As Double '客观前10题正确数
 Dim total2 As Double '客观前20题正确数
 Dim total3 As Double '客观前40题正确数
 Dim total4 As Double '客观前70题正确数
 
 rwIndex = 2    '起始行

 studentno = Sheet1.Cells(rwIndex, 3)
 Do While (studentno <> "")
    clIndex = 4    '起始列
    trueNumber = 0
    wrongNumber = 0
     total = 0
    Worksheets("Sheet1").Rows(rwIndex + 1).Insert  '插入一行
    sAnswer = Sheet1.Cells(rwIndex, clIndex)
    tAnswer = Sheet2.Cells(2, clIndex)
    
'判断一个学生的选择题

    Do While (sAnswer <> "") '到底怎样控制结束
     
       If Trim(sAnswer) = Trim(tAnswer) Then      '比对客观的答案
               Sheet1.Cells(rwIndex + 1, clIndex) = "对"
               trueNumber = trueNumber + 1           '正确数加一
                      
            Else
               Sheet1.Cells(rwIndex + 1, clIndex) = "错"
               wrongNumber = wrongNumber + 1
            End If
                  If clIndex = 13 Then total1 = trueNumber
                  If clIndex = 23 Then total2 = trueNumber
                  If clIndex = 43 Then total3 = trueNumber
                  If clIndex = 73 Then total4 = trueNumber
        
       clIndex = clIndex + 1
       tAnswer = Sheet2.Cells(2, clIndex)
       sAnswer = Sheet1.Cells(rwIndex, clIndex)
    Loop
   Sheet1.Cells(rwIndex + 1, clIndex) = trueNumber
   Sheet1.Cells(rwIndex + 1, clIndex + 1) = total1 * 1 + (total2 - total1) * 1 + (total3 - total2) * 2 + (total4 - total3) * 0.5 + (trueNumber - total4) * 0.5
   Sheet1.Cells(rwIndex + 1, clIndex + 2) = total1 '1-10题的正确数
   Sheet1.Cells(rwIndex + 1, clIndex + 3) = total2 - total1 '10-20题的正确数
   Sheet1.Cells(rwIndex + 1, clIndex + 4) = total3 - total2 '20-40题的正确数
   Sheet1.Cells(rwIndex + 1, clIndex + 5) = total4 - total3 '40-70题的正确数
   Sheet1.Cells(rwIndex + 1, clIndex + 6) = trueNumber - total4 '70-90题的正确数
   rwIndex = rwIndex + 2
   studentno = Sheet1.Cells(rwIndex, 3)
 Loop
   Sheet1.Cells(1, clIndex) = "正确数"
   Sheet1.Cells(1, clIndex + 1) = "得分"
   Sheet1.Cells(1, clIndex + 2) = "1-10“对话听力”正确数"
   Sheet1.Cells(1, clIndex + 3) = "10-20“短文听力”正确数"
   Sheet1.Cells(1, clIndex + 4) = "20-40“阅读理解”正确数"
   Sheet1.Cells(1, clIndex + 5) = "40-70“词汇与结构”正确数"
   Sheet1.Cells(1, clIndex + 6) = "70-90“完型填空”正确数"
End Sub
  • 用户名:liuyuping
  • 头 衔:太平洋四星上将
  • 积 分:9661
  • 贡 献:5310
  • 精 华:10
  • 注 册:2005-03-05
特别贡献勋章
不错,就是有些不简洁{29}
返回列表

浏览过的板块

PConline联想家庭云中心 终结者B B520 B320 B325