ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何在VBA代码中添加行号?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-4-26 17:02 | 显示全部楼层 |阅读模式
如何在VBA代码中添加行号?
比如:下面代码中前方的#001等。
#001  Sub RngSelect()
#002      Sheet1.Range("A3:F6, B1:C5").Select
#003  End Sub

加上前方的行号,目的只是用来解释说明用的,简单的方法就用5楼“山风”先生的方法,复杂的就用“老朽”的加载宏。
其实,加上前方的行号,代码就不能运行了。要复制到VBA编辑器中的话,还要删除掉的。
谢谢各位大侠!

[ 本帖最后由 xiaomi123ok 于 2010-4-27 11:01 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-4-26 17:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
要这个有什么用?

TA的精华主题

TA的得分主题

发表于 2010-4-26 17:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-4-26 17:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有这方面的小软件,用于自动添加的。你可以自己搜一下

TA的精华主题

TA的得分主题

发表于 2010-4-26 18:22 | 显示全部楼层
如何在VBA代码中添加行号?

1、在代码表中加入行号,代码是不能运行的
2、如果是为了说明代码,可以将代码放到工作表中第2列,然后,在第1列输入编号(所谓行号)即可

TA的精华主题

TA的得分主题

发表于 2010-4-26 18:30 | 显示全部楼层
用非vbe的ide,有的有这个功能。

TA的精华主题

TA的得分主题

发表于 2010-4-26 18:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
使用老朽这个加载宏

[源码全公开]让你在论坛发布彩色VBA代码
http://club.excelhome.net/thread-470541-1-1.html

If MsgBox("是否需要添加行标?", vbYesNo + vbQuestion, "系统提示:") = vbYes Then Hb = True Else Hb = False

[ 本帖最后由 zldccmx 于 2010-4-26 18:59 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-4-26 18:56 | 显示全部楼层
将原来加载宏中 
  1. Private Sub Convertor(ByRef Txt, Hb As Boolean)
  2.     Dim Lf As Long, Tp As Long, Wd As Long, Ht As Long, i As Long, Falg As Boolean, Flag As Boolean
  3.     Dim Tmp As String, K&, StartLine&, J&, Hr&, Pr, Mt&
  4.     Dim CodeMod As CodeModule, Pane As CodePane
  5.     Dim HrLine()
  6.     On Error GoTo 0
  7.     If Application.VBE.MainWindow.Visible = False Then
  8.         MsgBox "执行本程式请先开启VBE视窗", vbCritical, AppName
  9.         Exit Sub
  10.     End If
  11.     Set Pane = Application.VBE.ActiveCodePane
  12.     If Err.Number <> 0 Then
  13.         MsgBox "您未勾选信任存取 Visual Basic 专案", vbCritical, AppName
  14.         Exit Sub
  15.     End If
  16.     Set CodeMod = Pane.CodeModule
  17.     '取得每个程序的所在列(日后THML要插入水平线的列数)
  18.     With CodeMod
  19.         K = 0
  20.         StartLine = .CountOfDeclarationLines + 1    '略过宣告区
  21.         Do Until StartLine >= .CountOfLines
  22.             StartLine = StartLine + _
  23.                         .ProcCountLines(.ProcOfLine(StartLine, vbext_pk_Proc), _
  24.                                         vbext_pk_Proc)
  25.             ReDim Preserve HrLine(K)
  26.             HrLine(K) = StartLine
  27.             K = K + 1
  28.         Loop
  29.     End With
  30.     Lf = 1
  31.     Ht = CodeMod.CountOfLines  '全部程式码的列数
  32.     '档名 & 模组名称
  33.     Txt = "<head><title>" & Pane.Window.Caption & _
  34.           "- Html" & "</title></head>"
  35.     ' Verdana 字体
  36.     Txt = Txt & "<font face=Verdana size=2>"
  37.     IExp.document.writeln Txt
  38.     For i = 1 To Ht
  39.         Tmp = CodeMod.Lines(i, 1)
  40.         If Trim(Tmp) <> "" Then
  41.             If Not (Flag Or Left(Trim(Tmp), 1) = "'" Or Len(Trim(Tmp)) = 0) Then
  42.                 If Right(Trim(Tmp), 2) = " _" Then Flag = True Else Flag = False
  43.                 Select Case Split(Trim(Tmp), " ")(0)
  44.                 Case "Sub", "Function"
  45.                     J = 0
  46.                 Case "Private", "Public"
  47.                     Select Case Split(Trim(Tmp), " ")(1)
  48.                     Case "Sub", "Function"
  49.                         J = 0
  50.                     End Select
  51.                 End Select

  52.                 J = J + 1
  53.                  If Hb Then Tmp = "<SPAN style=" & Chr(34) & " color:FF0000" & Chr(34) & "> #" & Format(J, "000") & " </SPAN>" & Tmp
  54. '                If Hb Then Tmp = "<SPAN style=" & Chr(34) & " color:FF0000" & Chr(34) & ">" & Format(J, "000:") & "</SPAN>" & Tmp
  55.                 If J = 1 Then Tmp = "<SPAN style=" & Chr(34) & " color:007F00" & Chr(34) & ">" & "      '撰写:" & NA_M & vbCrLf & "      '网址:" & Http & vbCrLf & "      '日期:" & Now & "</SPAN>" & vbCrLf & Tmp
  56.             Else
  57.                 If Right(Trim(Tmp), 2) = " _" Then Flag = True Else Flag = False
  58.                 '            If Left(Trim(Tmp), 1) = "'" Or Len(Trim(Tmp)) = 0 Then Falg = False Else Falg = True
  59.             End If

  60.             If i <= CodeMod.CountOfDeclarationLines Then
  61.                 '处里宣告区的程式码
  62.                 ConvertCode Tmp, True
  63.                 Hr = CodeMod.CountOfDeclarationLines
  64.             Else
  65.                 '            处理主程序程式码
  66.                 ConvertCode Tmp, True
  67.                 Pr = CodeMod.ProcOfLine(i, vbext_pk_Proc)
  68.             End If
  69.             If i - 1 = Hr And Hr <> 0 Then
  70.                 '插入水平线 <" & "hr" & ">"
  71.                 IExp.document.writeln "<" & "hr" & ">"
  72.             End If

  73.             On Error Resume Next
  74.             Mt = Application.WorksheetFunction.Match(i, HrLine(), 0)
  75.             On Error GoTo 0
  76.             If Mt > 0 Then
  77.                 IExp.document.writeln "<" & "hr" & ">"
  78.                 Mt = 0
  79.             End If
  80.             Txt = Tmp & "<" & "br" & ">"
  81.             IExp.document.writeln Txt    'IIf(Flag Or j = 0, "", Format(j, "000:")) & Txt
  82.         End If
  83.     Next i
  84.     IExp.document.writeln "</FONT>"
  85. End Sub
复制代码
中的一行代码作如下修改即可! 

  1.                 If Hb Then Tmp = "<SPAN style=" & Chr(34) & " color:FF0000" & Chr(34) & "> #" & Format(J, "000") & " </SPAN>" & Tmp
  2.  
复制代码

TA的精华主题

TA的得分主题

发表于 2010-4-26 19:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
完成样式:

      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2010-4-26 下午 07:01:22

#001 Sub init()
'引用 Microsoft Scripting Runtime

'Dim Dic As New Dictionary
#002 Set Dic = CreateObject("Scripting.Dictionary")
#003     arr = Sheet1.UsedRange
#004     For
i = UBound (arr) To 2 Step -1
#005         Dic(arr(i, 1) & Chr(10) & arr(i, 2)) = arr(i, 3) & Chr(10) & arr(i, 4)
#006     Next

#007 End Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2010-4-26 下午 07:01:22

#001 Private Sub Worksheet_Change(ByVal Target As Range )
#002     If
Target.Count > 1 Or Target.Column > 2 Then Exit Sub
#003     If Dic Is Nothing Then Call init
#004     Application.EnableEvents = False

#005     If Dic.Exists(Cells(Target.Row, 1) & Chr(10) & Cells(Target.Row, 2)) Then
#006         Cells(Target.Row, 3).Resize(1, 2) = Split(Dic(Cells(Target.Row, 1) & Chr(10) & Cells(Target.Row, 2)), Chr(10))
#007     End
If
#008         Application.EnableEvents = True
#009 End Sub

TA的精华主题

TA的得分主题

发表于 2010-4-26 19:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 15:57 , Processed in 0.046792 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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