当前位置:首页经验技巧Excel经验excel技巧

EXCEL的vba中行号是变量,电子表格vba中行怎么表示

2024-07-22 10:30:54

1. vba中行怎么表示

VBA判断单元格是否包含某字符使用InStr函数,与工作表的FIND函数类似。InStr函数的帮助信息如下:程序中判断是否包含,可以这样写VBA代码:If InStr("111a222", "a")=0 Then MsgBox "不包含" Else MsgBox "包含"执行示例:创建一张空白的表格。在“a1”单元格输入“你好朋友”。

接着我们选择“B1”单元格。输入查找函数“=FIND("朋友",a1)”,查找a1中“朋友”这个字符所在位置。

回车后我们发现“B1”的值是“3”,“朋友”这个在a1中的第三个字符位置,证明a1包含朋友这个字符。

把函数改为“=FIND("哈哈",a1)”,查找“哈哈”在a1中的位置。

回车后我们发现值是“#VALUE!”所以不存在“哈哈”这个字符。单元格是表格中行与列的交叉部分,它是组成表格的最小单位,可拆分或者合并。单个数据的输入和修改都是在单元格中进行的,单元格属于Microsoft Excel /WPS表格中使用的术语。单元格按所在的行列位置来命名,它有A1引用样式、R1C1引用样式和三维引用样式三种引用样式。

单元格按所在的行列位置来命名,例如:地址“B5”指的是“B”列与第5行交叉位置上的单元格。可以利用OFFICE软件的EXCEL来编辑或者是GOOGLE的我的文档来创建或编辑。

If Range("A1").Find("abc") Nothing Then MsgBox "找到了"Else MsgBox "没找到"End If

2. vba 行号

在excel vba 编程中,当前单元格的行号用row表示,列号用column表示,例如下面的程序:

sub example ()

worksheets(1).select

dim row1,column1 as integer

row1=ActiveCell.Row  ' 当前行号

column1=ActiveCell.Column '当前列号

sub

应用中可以直接引用cells(1,2).row,cells(1,2).column来表示。

3. vba分行符

用实现vba事件实现,wps实现的话要安装宏插件,excel就不用安装插件。 代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$E$3" Then [F3] = DateEnd Sub

在某一列点击,右边列显示日期代码,Target.column=2 表示更新列在B列,如Target.column=4表示在D列,依此类推,你可以把2改成其他值,其他内容不变。 Private Sub Worksheet_Change(ByVal Target As Range)On Error Resume NextIf Target.Value <> "" ThenIf Target.Column = 2 And Target.Count = 1 Then Target.Offset(0, 1) = DateEnd IfEnd Sub

4. vba 行

在excel vba 编程中,当前单元格的行号用row表示,列号用column表示,例如下面的程序:

sub example ()

worksheets(1).select

dim row1,column1 as integer

row1=ActiveCell.Row ' 当前行号

column1=ActiveCell.Column '当前列号

sub

应用中可以直接引用cells(1,2).row,cells(1,2).column来表示。

5. vba总行数怎么表述

一、增加模块

1.增加一个模块,命名为“我的模块”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "我的模块"

系统常量vbext_ct_StdModule=1

2.增加一个类模块,命名为“我的类”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name = "我的类"

vbext_ct_ClassModule=2

3.增加一个窗体,命名为“我的窗体”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = "我的窗体"

vbext_ct_MSForm=3

二、删除模块

1.删除“模块1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("模块1")

2.删除窗体“UserForm1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("UserForm1")

3.删除类模块“类1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("类1")

4.删除所有的窗体

Sub RmvForms()

Dim vbCmp As VBComponent

For Each vbCmp In ThisWorkbook.VBProject.VBComponents

If vbCmp.Type = vbext_ct_MSForm Then ThisWorkbook.VBProject.VBComponents.Remove vbCmp

Next vbCmp

End Sub

相关:

工作表和ThisWorkbook的模块类型为vbext_ct_Document=100

三、增加代码

1.在“模块1”中插入代码

如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。

方法1:

在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。

Sub AddCode1()

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.AddFromString _

"sub aTest()" & Chr(10) & _

"msgbox ""Hello""" & Chr(10) & _

"end sub"

End Sub

方法2:

在模块指定行处增加代码,原代码后移。增加代码不理会和判断插入处代码的内容。当指定行大于最后一行行号时,在最后一行的后面插入。

Sub AddCode2()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.InsertLines 1, "sub aTest()"

.InsertLines 2, "msgbox ""Hello"""

.InsertLines 3, "end sub"

End With

End Sub

相关语句:

(1)“模块1”中代码总行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.CountOfLines

(2)“模块1”中代码公共声明部分的行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.CountOfDeclarationLines

(3)显示“模块1”中第1行起的3行代码内容:

Sub ShowCodes()

Dim s$

s = ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.Lines(1, 3)

Debug.Print s

End Sub

(4)过程aTest的起始行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcBodyLine("aTest", vbext_pk_Proc)

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcStartLine("aTest", 0)

系统常量vbext_pk_Proc=0

二者的区别是ProcBodyLine返回sub aTest或Function aTest所在的行号,如果sub前面有空行,ProcStartLine返回空行的行号。

(5)过程aTest的总行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcCountLines("aTest", vbext_pk_Proc)

2.建立事件过程

建立事件过程除了使用上面的代码如下面的AddEventsCode1外,还可以使用CreateEventProc方法,如AddEventsCode2所示。

一般方法:

Sub AddEventsCode1()

ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromString _

"Private Sub Workbook_Open()" & Chr(13) & _

"MsgBox ""Hello""" & Chr(13) & _

"End Sub"

End Sub

'CreateEventProc方法:

Sub AddEventsCode2()

Dim i%

With ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule

i = .CreateEventProc("SelectionChange", "Worksheet") + 1

.InsertLines i, "Msgbox ""Hello"""

End With

End Sub

上面CreateEventProc的两个参数建立的事件过程为Worksheet_SelectionChange,分别是下划线两边的内容。

相关:

测试是否存在SelectionChange事件

下面函数测试模块modulname是否存在过程subname,如果存在,则返回起始行号,否则返回0。

debug.print HasSub("Worksheet_SelectionChange","Sheet1")

Function HasSub(ByVal subname As String, ByVal modulname As String) As Long

On Error Resume Next

Dim i&

i = ThisWorkbook.VBProject.VBComponents(modulname).CodeModule.ProcBodyLine(subname, 0)

If Err.Number = 35 Then

Err.Clear

HasSub = 0

Else

HasSub = i

End If

End Function

如果存在,则返回起始行号,否则返回0。

四、删除代码

1.删除Sheet1中第2行起的三行代码:

如果只删除1行代码,第二个参数可省略。

Sub DelCodes()

ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.DeleteLines 2, 3

End Sub

2.删除“模块1”的所有代码:

Sub DelCodes()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.DeleteLines 1, .CountOfLines

End With

End Sub

3.删除过程aTest:

Sub DelCodes()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.DeleteLines .ProcStartLine("aTest", 0), .ProcCountLines("aTest", 0)

End With

End Sub

4.将“模块1”的第5行代码替换为“x=3”

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ReplaceLine 5, "x=3"

五、引用项目

1.增加引用

ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\asctrls.ocx"

2.取消引用

ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("ASControls")

这里ASControls是引用的名字,即后面的rf.Name。

3.显示当前所有引用

Sub ShowRefs()

Dim rf As VBIDE.Reference

For Each rf In ThisWorkbook.VBProject.References

Debug.Print rf.Name, rf.FullPath

Next

End Sub

六、信任及密码

上面所有操作都基于这样的前题:

(1)EXCEL已设置:

工具(T)-宏(M)-安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V)”

(2)工程没有设置密码

如果不能满足它们中的任何一个,代码运行就会出错。因为微软不希望我们对VBProject进行操作,我们无从知道这种操作的直接方法被藏到了什么地方。幸运的是,微软在关起正门的同时,还是为我们留了一道门:SendKeys。借助于这道后门和“错误陷阱”,我们仍可以完成我们所要做的事。

下面给出绕开这两道门的示意代码,如果你要运行它们,请记得切回EXCEL主界面,而不是在VBE中直接运行。

1.信任对于VB项目的访问

Sub SetAllowableVbe()

On Error Resume Next

Dim Chgset As Boolean

'陷阱测试,VBProject.Protection在这儿并无实际的意义

Debug.Print ThisWorkbook.VBProject.Protection

If Err.Number = 1004 Then

Err.Clear

Application.SendKeys "%TMS%T%V{ENTER}"

Chgset = True

DoEvents

End If

'要执行的操作....

'.....

'操作完成后还原操作前的状态

If Chgset Then Application.SendKeys "%TMS%T%V{ENTER}"

End Sub

2.操作密码工程

Sub AllowPass()

Dim pw$

pw = "Password"

If ThisWorkbook.VBProject.Protection = vbext_pp_locked Then

Application.VBEmandBars(1).Controls("工具(T)").Controls("VBAProject 属性(&E)...").Execute

Application.SendKeys pw & "{ENTER}{ENTER}"

DoEvents

End If

'要执行的操作….

'.....

End Sub

Protection属性返回工程的受保护状态,vbext_pp_locked(1)为受保护,vbext_pp_none(0)表示没有保护。

6. vba行数

1、打开excle表格,在表格汇总选中A8这个单元格。

2、然后在开发工具栏的下方找到“Visual Basic”的入口。

3、点击入口进入VBA的编程界面。

4、在编程界面的顶部找到“视图”的按钮。

5、然后点击“视图”,选择“立即窗口”。

6、在立即窗口里面输入以下代码:Selection.EntireRow.Select表示选中当前活动单元格所在行的整行。

7、然后按一下回车键运行,回到excle界面,发现当前行已经被选中了。

7. excel vba 行

12345678910Sub fuzhi()with activesheet For i = .Range("N65536").End(xlUp).Row To 2 Step -1 n = UBound(Split(.Cells(i, "N"), ",")) .Rows(i & ":" & i + n - 1).Insert .Rows(i + n).Copy .Rows(i & ":" & i + n - 1) .Rows(i + 1 & ":" & i + n).Interior.Color = vbGreen Next end withEnd Sub

8. vba如何表示一行

sheet2中第一行=sheet1中第二行的代码如下

Sheets(2).Rows(1).Value = Sheets(1).Rows(2).Value


电脑版

免责声明:本站信息来自网络收集及网友投稿,仅供参考,如果有错误请反馈给我们更正,对文中内容的真实性和完整性本站不提供任何保证,不承但任何责任,谢谢您的合作。
版权所有:五学知识网 Copyright © 2015-2024 All Rights Reserved .