ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

vba代码_淘宝帖

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-22 23:59 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:类和类模块
本帖最后由 win2009 于 2014-4-24 23:10 编辑

不想记单词,其实也记不住,所以在书写代码时采用英文输入法。
现在发一个用类模块做的,拼音提示输入法,
好不好全看新手的需要,高手略过

把附件里的文本添加到“类模块”,按下面方法,即可得到提示
数据可以继续增加............
类的另类应用.rar (18.4 KB, 下载次数: 187)
用法:在模块声明 Public pp As New 拼音输入法 _
然后再代码窗口输入pp.之后,再输入拼音首字母 _
在提示框里选中需要的代码 , 之后删除不要的部分OK
Public hqwb_获取文本_Gettext
Public hddyg_活动单元格_Activecell
Public hdgzb_活动工作表_Activesheet
Public hdck_活动窗口_Activewindow
Public hdgzb_活动工作簿_Activeworkbook
Public tj_添加_Add
Public dz_地址_Address
Public tjtx_添加图形_Addshape
Public hmy_后面于_After
Public jglx_警告类型_Alertstyle
Public bq_并且_And
Public yy_应用_Apply

点评

知识树索引:考虑操作系统语言的问题,不建议使用中文。不过,作为类模块知识的话,还是可以学习的  发表于 2014-4-25 00:39
要学会一门编程语言,没有英语基础是相当困难的。建议尽可能熟悉一点英语。  发表于 2014-4-23 10:49

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-23 00:02 | 显示全部楼层
本帖最后由 win2009 于 2014-4-23 00:04 编辑

组合框右键菜单
尽管复合框已经提供右键菜单,但是他的  Change  事件不太好用
所以改制了这个

Public WithEvents cobox As MSForms.ComboBox
Public WithEvents frm As MSForms.UserForm
Private Sub cobox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then
        On Error Resume Next
        Dim Action As Variant
        With Application.CommandBars("ShortCut")
            .Controls(1).Enabled = cobox.SelLength > 0
            .Controls(2).Enabled = .Controls(1).Enabled
            .Controls(3).Enabled = cobox.CanPaste
            .Controls(4).Enabled = .Controls(1).Enabled
            .Controls(5).Enabled = True
            .ShowPopup
        End With
    End If
End Sub
'模块里的代码
'Public ActiveCT As Object
'Public Sub 生成右键菜单()
'    Dim ShortCutMenu As CommandBar
'    Dim ShortCutMenuItem As CommandBarButton
'    Dim sCaption As Variant
'    Dim iFaceId As Variant
'    Dim sAction As Variant
'    Dim i As Integer
'    sCaption = Array("剪切(&C)", "复制(&T)", "贴粘(&P)", "删除(&D)", "全选(&Q)")
'    iFaceId = Array(21, 19, 22, 1786, 25)
'    sAction = Array("COBOX_Cut", "COBOX_Copy", "COBOX_Paste", "COBOX_Delete", "COBOX_全选")
'    On Error Resume Next
'    Application.CommandBars("ShortCut").Delete
'    Set ShortCutMenu = Application.CommandBars.Add("ShortCut", msoBarPopup)
'    With ShortCutMenu
'        For i = 0 To 4
'            Set ShortCutMenuItem = .Controls.Add(msoControlButton)
'            With ShortCutMenuItem
'                .Caption = sCaption(i)
'                .FaceId = Val(iFaceId(i))
'                .OnAction = sAction(i)
'            End With
'        Next
'    End With
'End Sub
'Public Sub COBOX_Cut()
'    ActiveCT.ActiveControl.Cut
'End Sub
'Public Sub COBOX_Copy()
'    ActiveCT.ActiveControl.Copy
'End Sub
'Public Sub COBOX_Paste()
'    ActiveCT.ActiveControl.Paste
'End Sub
'Public Sub COBOX_Delete()
'    ActiveCT.ActiveControl.SelText = ""
'End Sub
'Sub COBOX_全选()
'    ActiveCT.ActiveControl.SetFocus    ' 文本框获得焦点
'    ActiveCT.ActiveControl.SelStart = 0    ' 从第一个字符之前开始
'    ActiveCT.ActiveControl.SelLength = Len(ActiveCT.ActiveControl.Text)    '突出显示
'End Sub
'Public Sub 删除右键菜单()
'    On Error Resume Next
'    Application.CommandBars("ShortCut").Delete
'End Sub
'''窗体里的代码
''Dim nrr(1 To 8) As 组合框右键
''Private Sub UserForm_Initialize()
''    Set ActiveCT = Me
''    删除右键菜单
''    生成右键菜单
''    For i = 1 To 8
''        Set nrr(i) = New 组合框右键        '创建新 "组合框右键" 对象
''        Set nrr(i).cobox = Controls("Combobox" & i)  '归类
''        Set nrr(i).frm = Me               '和类窗体关联
''    Next
''End Sub

TA的精华主题

TA的得分主题

发表于 2014-4-23 07:57 | 显示全部楼层
技术高超! 不过个人觉得 既然选择了vba 就要适应它的规则 几个基本的英文单词都记不住 更别说vba还有自动提示
确却的说是只用记几个单词开头就行了  这都没法做到  怕是没法学好VBA吧
给新人用这个 怕是会惯坏了

TA的精华主题

TA的得分主题

发表于 2014-4-23 08:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-23 08:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
百度不到去谷歌 发表于 2014-4-23 07:57
技术高超! 不过个人觉得 既然选择了vba 就要适应它的规则 几个基本的英文单词都记不住 更别说vba还有自动提 ...

赞同3楼的观点。

TA的精华主题

TA的得分主题

发表于 2014-4-23 10:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看看,还是觉得应该掌握英语。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-24 23:08 | 显示全部楼层
  1. '代码缩进的学习
  2. Sub miApplyIndent() '改制版,使中国人能看懂
  3.     Dim 当前模块
  4.     Dim i As Long, k As Long
  5.     Dim 一行 As String, j As Integer, bool As Boolean
  6.     Dim Tool As Boolean, d As Boolean
  7.     Dim a As Boolean, Dool As Boolean
  8.     Set 当前模块 = ActiveWorkbook.VBProject.VBE.ActiveCodePane
  9.     k = ActiveWorkbook.VBProject.VBE.SelectedVBComponent.CodeModule.CountOfLines
  10.     sr = 当前模块.CodeModule.Lines(1, k) ' 取出全部代码
  11.     Srr = Split(sr, vbCrLf)
  12.     '下面开始对文本处理
  13.     For i = 0 To UBound(Srr)
  14.         Srr(i) = Trim(Srr(i))
  15.     Next i
  16.     For i = 0 To UBound(Srr)
  17.         一行 = Srr(i)
  18.         Select Case Left(一行, IIf(InStr(一行, " ") = 0, 999, InStr(一行, " ") - 1))
  19.         Case "Do", "For", "Private", "Select", "Sub", "While", "With", "Function"
  20.             a = True
  21.         Case "If"
  22.             If Right(一行, 4) = "Then" Then a = True
  23.         Case "Loop", "Next", "End"
  24.             d = True
  25.         Case "Case", "Else", "ElseIf"
  26.             d = True
  27.             a = True
  28.         End Select
  29.         If Right(一行, 2) = " _" And Not bool Then
  30.             a = True
  31.             bool = True
  32.         ElseIf Right(一行, 2) <> " _" And bool Then
  33.             Dool = True
  34.             bool = False
  35.         End If
  36.         If Tool Then j = j + 1: Tool = False
  37.         If d Then j = j - 1: d = False
  38.         On Error GoTo lIndentError
  39.         Srr(i) = Space$(j * 4) & 一行     '原来你在这里,哈哈
  40.         On Error GoTo 0
  41.         If a Then j = j + 1: a = False
  42.         If Dool Then j = j - 1: Dool = False
  43.         当前模块.CodeModule.ReplaceLine i + 1, Srr(i) ' 替换
  44.     Next i
  45.     Exit Sub
  46. lIndentError:
  47.     If j < 0 Then j = 0
  48.     Resume Next
  49. End Sub

  50. [2014-04-24 12:34:06]

  51. '翻译结果

  52. 过程 miapplyindent()
  53.     定义变量 当前模块
  54.     定义变量 i 为 长整型值 ,k 为 长整型值
  55.     定义变量 一行 为 字符串 ,j 为 整型值 ,bool 为 布尔值
  56.     定义变量 tool 为 布尔值 ,d 为 布尔值
  57.     定义变量 a 为 布尔值 ,dool 为 布尔值
  58.     设置 当前模块 = 活动工作簿.VB工程.vbe.activecodepane
  59.     k = 活动工作簿.VB工程.vbe.selectedvbcomponent.代码模块.countoflines
  60.     sr = 当前模块.代码模块.行数值(1 ,k)
  61.     srr = 分割字符串(sr ,回车换行符)
  62.     循环范围 i = 0 到 数组上限(srr)
  63.         srr(i) = 消除两端空格(srr(i))
  64.     下一句 i
  65.     循环范围 i = 0 到 数组上限(srr)
  66.         一行 = srr(i)
  67.         选定 条件情况 截取左侧(一行 ,如果(包含位置(一行 ," ") = 0 ,999 ,包含位置(一行 ," ") - 1))
  68.         条件情况 "do" ,"for" ,"private" ,"select" ,"sub" ,"while" ,"with" ,"function"
  69.             a = 真
  70.         条件情况 "if"
  71.             如果 截取右侧(一行 ,4) = "那么" 那么 a = 真
  72.         条件情况 "loop" ,"next" ,"end"
  73.             d = 真
  74.         条件情况 "case" ,"else" ,"elseif"
  75.             d = 真
  76.             a = 真
  77.         结束 选定
  78.         如果 截取右侧(一行 ,2) = " _" 并且 非 bool 那么
  79.             a = 真
  80.             bool = 真
  81.         否则如果 截取右侧(一行 ,2)<>" _" 并且 bool 那么
  82.             dool = 真
  83.             bool = 假
  84.         结束 如果
  85.         如果 tool 那么 j = j + 1: tool = 假
  86.         如果 d 那么 j = j - 1: d = 假
  87.         当 错误 跳至 lindenterror
  88.         srr(i) = space$(j * 4) & 一行     
  89.         当 错误 跳至 0
  90.         如果 a 那么 j = j + 1: a = 假
  91.         如果 dool 那么 j = j - 1: dool = 假
  92.         当前模块.代码模块.替换行 i + 1 ,srr(i)
  93.     下一句 i
  94.     退出 过程
  95. lindenterror:
  96.     如果 j < 0 那么 j = 0
  97.     转到 下一句
  98. 结束 过程




复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-25 00:26 | 显示全部楼层
  1. Public Sub 获取模块代码()
  2.     With ThisWorkbook.VBProject.VBComponents("拼音输入法").CodeModule
  3.         n = .CountOfLines
  4.         tex = .lines(1, n)
  5.     End With
  6.     Debug.Print tex
  7. End Sub

  8. Public Sub 插入代码()
  9.     With ActiveWorkbook.VBProject.VBComponents("xxxxxxxxxxxx").CodeModule
  10.         n1 = .CountOfLines + 1
  11.         .InsertLines n1, sr
  12.     End With
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-4-25 00:37 | 显示全部楼层
尽量用英文,否则操作系统换成其他语言版本会出问题

我看过繁体的、德文的、英文的,还有别的什么文的,反正只要不是英文的,就统统趴窝

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-25 23:07 | 显示全部楼层
翻译代码,准确的说是给代码加注释,这是新人最渴望的功能。
刚学时看到坛子里的一个帖子,大家讨论的热火朝天,当时真希望
那个程序能够不断更新,但是就是没有下文。
后来自己动手搞了个网页翻译的东西,总感觉不成熟,所以不敢拿出来
近日终于对那个东西进行了一番改造,并利用坛子里的一个程序,实现在
vbe 窗口翻译代码的功能,现在拿出来与新人们共享,高手们是不需要的
vba 几乎能够解决别人的所有难题,但是解释自己却总是十分吝啬
所以,很多的帮助方面的电子书铺天盖地。现在终于可以向耐心传授技艺
的老师们交上一份答卷了,这个小东西对如我一样的新手肯定会有所帮助。
坛子里“vba 常用代码快速输入”(以下简称“输入”) 这个程序
大家一定知道吧,我就是给这个程序打了个补丁。

666.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 01:24 , Processed in 0.058904 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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