搜档网
当前位置:搜档网 › Excel VBA 常用代码50例

Excel VBA 常用代码50例

Excel VBA 常用代码50例
Excel VBA 常用代码50例

Excel VBA 常用代码50例

001。用命令按扭打印一个sheet1中B2:M30区域中的内容? 我想在Sheet2中制件一个命令按扭, 打印表Sheet1中的[B2:M30] 区域中的内容?

解答:可以将打印区域设为b2:m30,然后打印,如:sheets("sheet1").printarea="b2:m30"

sheets("sheet1").printout

随手写的,你可以试试看。最简单的方法是:你先录制宏,在录制宏过程中,跑到页面设臵里面,把打印范围设臵到你想要的范围。

然后退出,停止录制宏,你就可以得到一些代码!

002。能否对一列中的文字统一去掉最后一个字?这些文字不统一,有些字数多,有些字数少。如何处理?我用{"&-}不行

解答:=REPLACE(A1,LEN(A1),1," ")(在过渡列进行)

003.能否根据单元格数值自动标记序号?

各位大佬,一工作表有两列,“序号”及“金额”,能否将金额不等于0的行自动标上序号呢?如无现成的函数,应怎样设臵?

解答:Dim xuhao As Integer

xuhao = 1

Range("b2").Select

Do While Selection <> ""

If Selection <> 0 Then

ActiveCell.Previous.Value = xuhao

xuhao = xuhao + 1

End If

ActiveCell.Offset(1, 0).Range("a1").Select

Loop

004.求教自定义函数

查询了一些自定义函数的例子都是单变量的。自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“∑x2”为例,万分感谢!(该用"For Each ...Next",就是还不知道如何引用Range中的每个值,请高手指点。)

解答:参数使用Range而函数值为Integer是可以的

用for each next循环思路也是对的,应该这样作:

dim rg as range

dim ivalue as integer

for each rg in 参数区域

ivalue=ivalue+rg.value

next

函数=ivalue

大概意思如此,但没有加入防错处理,你自己先试试看,有问题在问。

又问:试了一天,还是不行。

Public Function x2(rng As Range) As Integer

Dim rng As Range

Dim ivalue As Integer

For Each rng In rng.Range

ivalue = ivalue + rng.value ^ 2

Next

x2 = ivalue

End Function

还望您的帮助。

解答:Public Function SUMX2(rng As Range) As Integer '你的错误有几项:

'1.函数名不能使用单元格位址的形式,否则在工作表中引用函数产生歧义,excel以为你引用单元格

'2.参数名与内部变量名冲突,rng本来是定义参数,在过程中不应出现重名变量

'3.rng已被定义为range对象变量,实际意义是一range引用,不能再用rng.Range引用,range的range属性是什么呢,没有吧

'函数我已经给你改了,基本能用

Dim rg As Range

Dim ivalue As Integer

For Each rg In rng

ivalue = ivalue + rg.value ^ 2

Next

SUMX2 = ivalue

End Function

结果:调试成功!,非常感谢!

005.判断字符串的包含性

用什么命令“abcdefg”是否包含“abc”?

解答:If VBA.InStr(1, "abcdefg", "abc") <> 0 Then MsgBox "包含"

006.利用背景实现套打的解决方案

利用背景套打主要在于数据打印位臵的确定,关键就是要使图片和实物之间的尺寸保持一致,这里我引入一个中间参照物—空白表(只有表格线的表)。具体操作以套打支票为例说明:

(1)将支票扫描成图片。

(2)打印一个空白表,使其与支票尺寸一致(需反

复调整打印,也可行、列分别打印)。

(3)用“画图”的缩放功能调整图片大小,导入excel作背景,并使其与空白表大小一致(亦需反复调整导入,每次均用原图缩放,再另存为一个文件)。

(4)根据图片背景调整好单元格,填入数据后套打支票,效果是匹配度达99%。

(5)由于每次都是用原图缩放,故可取得缩放比例作为参数,再套打其他表格时,即可直接依参数缩放图片。

思路:因为空白表=支票,图片=空白表,所以图片=支票。

该方案已证实可行。

007.宏放在worksheet和sheet及模块中各有什么区别?

解答:放在this workbook或sheet中的宏与模块中的宏的主要区别是book或sheet中的过程函数只能是对象所专有的,不能在对象之外的任何地方调用(很显然不能声明Public过程,否则编译报错),而模块中声明Public过程函数可以在任何地方使用。

008.关于excel问题

在excel中如何用公式实现单元格内容递增?

如: AB12

AB13

AB14

.......

AB100

条件是无法确定储存格中的内容的前面有多少个字符,也就是,可能是2个,也可能是3个,或者更多。

解答:為什麼要用公式呢?

如 A1 = AB12 ,只要你向下拉的複制就可以。

公式可参考 (条件是 AB12 不可以是 AB02,处理 0 为首的文字有困难,亦不可以只有英文字)

A1 = AB12

A2 = LEFT(A1,LEN(A1)-SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0", "1","2","3","4","5","6","7","8","9"},"")))) & RIGHT(A1,SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2" ,"3","4","5","6","7","8","9"},""))))+1

(A1 = AB12

公式

=LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5","6","7" ,"8","9"},""))

答案看到的是 4 ,但其實它回傳一個數組{4,3,3,4,4,4,4,4,4,4}

公式

=LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4","5" ,"6","7","8","9"},""))

答案看到的是0 ,但其實它回傳一個數組{0,1,1,0,0,0,0,0,0,0}

公式

=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{"0","1","2","3","4" ,"5","6","7","8","9"},""))) 是將{0,1,1,0,0,0,0,0,0,0} 加總

= 2)

009.给数组公式、VBA爱好者泼点冷水。

数组公式、VBA威力巨大,在某些情形下提高效率非常明显,但各有其弱点。数组公式在大数据的时候,运行速度慢得无法忍受。比如,我日常需要编制得几个报表,原始数据有4-8万行,20——30列,用数组根本无法操作。倒是利用数据透视表及其他一些组合功能,可谓神速。而VBA主要适用与日常比较固定的一些工作,对于一些临时性工作而言,缺

乏灵活性,有杀鸡用牛刀之嫌疑。因此,根据我个人多年工作经验的体会,能熟练地灵活运用EXCEL基本功能和常用函数,就可以高效地完成大部分日常工作。

我比较常用地东西有:数据透视表,数据——有效性,ctrl+enter,index ,match,indirect,offset,if,vlookup,下拉列表框,绝对引用与相对引用,编辑——选择性粘贴(数值、乘除、转臵等),图表,条件格式,定义名称,分列,填充等。

相反观点:数据透视表的计算是excel中内臵的,同样的计算次数速度与数组公式是一样的,数组公式计算慢有两个因素,一是公式的编写不合理,另一个主要的原因是数组公式要对所有的引用数据进行计算,不管这些数据是否有效。VBA应该是最灵活的,在VBA中结合数组公式是可以达到最佳目的的,可用VBA先分析出数组公式要用的有效引用区域,在辅助表中进行数组计算(这个速度比用VBA直接分析计算要快得多),再将结果记入需要的单元格中,然后删除辅助表。

其实你说的那些基本操作均可用VBA来做的,速度比手工做要快。

010.从式子抽取一小式子的问题?

b1=sum(a1:a10)+(10+20)/4,怎么从中取出(10+20)/4或其结果(即5)?用evaluate、get.cell都不能取出。

解答:定义X=get.formula($B$1)得到B1的公式,再用MID、Right等函数截取

011.or可以用数组应用?

有一个工作表,数据上万行,其中一列是我要分析的数值,数值比如为:0111,0112,0113,0114,0115,0116,0117中的任何一个。我要统计除0111,0113,0115之外的数据。公式:{sum(if(or(sheet!A2:A1111="0111",sheet!a2:a1111="01 13",sheet!a2:a1111="0115"),1,0))},可是统计数字和我筛选相加的不一样,用if层层选,可以。请问原因?

解答:数组公式中用*、+代替AND、OR

{sum(if((sheet!A2:A1111="0111")+(sheet!a2:a1111="01 13")+(sheet!a2:a1111="0115"),1,0))}

012.countif表达式的格式

请问:我想找A1:A15中,值不为空的数目,用countif命令怎么写呢?

解答1:应为counta(a1:a15)。countif为找a1:a15中,特定值的数目。

解答2:=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTIF(A1:A15,"")

=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTBLANK(A1:A15)

解答3:直接用count(a1:a15)不是更好吗!

013.删除字符串中某个字符的函数是什么?删除字符串中某个字符的函数是什么?

举例:字符串“i love you a!"想删除a字面,应该用什么函数实现?还有就是在字符串中某个位臵加入某个字符用什么函数呢?

解答:如果有一定的规律,可以用Replace函数。例如:在A1单元格已有的字符串”123467"中加入个5变为“1234567”。可以这样做:=replace(a1,5,,"5")

另一方法:用CONCATENATE函数。

例如:a5单元格里的数据是“asdfhjkl",在另外的单元格了输入下面的函数

CONCATENATE(LEFT(A5,4),"l",RIGHT(A5,4)),得到的结果就是”asdflhjkl",然后用“选择性粘贴,粘贴数值”粘贴回a5单元格就可以了。

014.两表合一实例

问题提出:怎样把两个表(有相同的字段)怎样合并成

一个表?

思路:用CountIf()函数对表1进行判断,如果其值为0,则表示没以重复,再将表2中和表1不重复的数据复制到表1中,从而实现两表合一。

解题的方法:

Sub dd()

b = Sheets(2).[a1].CurrentRegion.Rows.Count + 1

‘判断表2的行数

For i = 3 To b

a = Sheets(1).[a1].CurrentRegion.Rows.Count + 1

‘判断表1的行数

c = Sheets(2).[a1].CurrentRegion.Columns.Count

‘判断表2的列数

If

Application.WorksheetFunction.CountIf(Sheets(1).[b1 :b1000], Sheets(2).Cells(i, 2)) = 0 Then

Sheets(2).Range(Sheets(2).Cells(i, 1), Sheets(2).Cells(i, c)).Copy Sheets(1).Cells(a, 1)

‘将表2中与表1不重复的数据复制到表1中

End If

Next

End Sub

015.有没有办法把加载宏内臵到Excel文件里?

因为用了 Networkdays 函数,用到了分析工具库,但是还要发给别人,怎么办?

解答:试试在"Thisworkbook"中写如下语句:

Private Sub Workbook_Open()

Application.RegisterXLL Filename:= _

"Office安装路径\Office\Library\Analysis\ANALYS32.XLL"

End Sub

又问:Office安装路径怎么写呀?大家不一定都装在C盘上。解答:试试:Application.Path & "\Library\Analysis\ANALYS32.XLL"

046.如何在userform上显示最大化与最小化按钮

解答:

利用API

Option Explicit

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias

"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const GWL_STYLE = (-16)

Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)

Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)

Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)

Private Sub UserForm_Initialize()

Dim hWndForm As Long

Dim IStyle As Long

hWndForm = FindWindow("ThunderDFrame", Me.Caption) IStyle = GetWindowLong(hWndForm, GWL_STYLE)

IStyle = IStyle Or WS_THICKFRAME '还原

IStyle = IStyle Or WS_MINIMIZEBOX '最小化

IStyle = IStyle Or WS_MAXIMIZEBOX '最大化

SetWindowLong hWndForm, GWL_STYLE, IStyle

End Sub

017.这个判断代码怎么写

在A列输入日期,如果所输入日期为1月1日或5月1日则B列相关单元格+1,其他日期+0,这要用到什么函数?代码怎么写?谢谢!

解答:用IF函数或用Worksheet_Change事件

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then

If IsDate(Target) Then

If (Month(Target) = 1 And Day(Target) = 1) Or (Month(Target) = 5 And Day(Target) = 1) Then

Target.Offset(0, 1) = Target.Offset(0, 1) + 1

End If

End If

End If

End Sub

018.这个汇总表拆分程序怎么写,高手帮忙!

要将总表里的数据按工作单位字段拆分成数个分表(每个单位一张表格,标签名字为工作单位)这个程序怎么编写,请

高手指点。如果记录增多或字段增多(但拆分字段不增)这个程序又应该怎样改写,请高手稍微讲解一下,应为我不是为这一个表,还想用到别的工作表中,谢谢!

解答:Sub Add_data(sht_Name) '找出要取资料的区域

Dim i As Integer, j As Integer, row_d As Integer Dim First_row As Integer, Last_row As Integer

On Error Resume Next

With Sheets("总表")

i = 1

Do Until .Cells(i, 3).value = sht_Name

i = i + 1

Loop

First_row = i

j = First_row

Do Until .Cells(j, 3) <> sht_Name

j = j + 1

Loop

Last_row = j - 1

End With

Sheets("总表").Range(Cells(First_row, 1), Cells(Last_row, 12)).Select

Selection.Copy

Sheets(sht_Name).Select

Range("A2").Select

ActiveSheet.Paste

With ActiveSheet

row_d = .Range("A2").End(xlDown).Row + 1

Range("B" & row_d).value = "合计"

For i = 5 To 11

Cells(row_d, i).value = Application.WorksheetFunction.Sum(Range(Cells(2, i), Cells(row_d - 1, i)))

Next i

End With

Sheets("总表").Activate

Range("A2").Select

End Sub

020.这个公式应该怎么写?

我想统计所有物料编码的第一个字符为a的库存数量的总和,这个公式应该怎么写?A列为物料编码,B列为库存数量。

解答:=SUMIF($A:$A,"a*",$B:$B)

021.样修改此宏?

下面的宏是k版主帮我写的,从文件夹内汇入其他工作表表格。汇入范围为第五行、第L列。

如汇入范围改为第三行、第R列。

怎样修改此宏?

Public Sub Feed_in2()

Dim Row_dn, Row_dn1, i, j, k, m As Integer

Dim Path1, Str1 As String

Dim wb As Workbook

Row_dn = [B65536].End(xlUp).Row

Path1 = Application.ActiveWorkbook.Path

Str1 = https://www.sodocs.net/doc/5e14228586.html,

k = 5

With Application

.EnableEvents = False

.ScreenUpdating = False

If Row_dn >= 5 Then

Range("B5:L" & Row_dn).ClearContents

End If

With .FileSearch

.NewSearch

.LookIn = Path1

.FileType = msoFileTypeExcelWorkbooks

If .Execute <= 1 Then

MsgBox "files no found": Exit Sub

Else

For m = 1 To .FoundFiles.Count

Str2 = Split(.FoundFiles(m), "\") n1 = UBound(Str2)

Str2 = Str2(n1)

If Str2 <> Str1 Then

Set wb = Workbooks.Open((Path1 & "\" & Str2), True, True)

Row_dn1 = wb.Sheets(1).[B65536].End(xlUp).Row

For i = 5 To Row_dn1

For j = 2 To 12

Workbooks(Str1).Sheets(1).Cells(k, j) _

=

wb.Sheets(1).Cells(i, j)

Next j

k = k + 1

Next i

wb.Close False

Set wb = Nothing

End If

Next m

End If

End With

.EnableEvents = True

End With

End Sub

解答:除了B65536中的5,其余5都改成3;将Range("B5:L" & Row_dn)改成Range("B5:R" & Row_dn);将For j = 2 To 12改成For j = 2 To 17。

022.怎样控制textbox的只读,要使textbox中的数据不能

改变(删除或修改),在属性里我没有找到

有相关的方法吗?

解答:Textbox.Enabled = False,直接修改控件属性都行。又问:这样还不行,因为Textbox在显示上就灰显了,我想只让它不可改变值,在显示上还是原来的形式。

解答:那就用Label代替,设臵BackColor和SpecialEffect 属性。

023.请教个小问题!

你好:我录制了个删除工作表的宏,但每次运行后,总出现确认删除提示框,请问该如何编写,直接默认删除,不在作确认呢?

解答:Application.DisplayAlerts = False

代码为:Sub Dell()

'

' Dell Macro

' DC.Direct 记录的宏 2003-11-14

Application.DisplayAlerts = False

Sheets("Sheet2").Select

ActiveWindow.SelectedSheets.Delete

ActiveWorkbook.Save

excelvba常见字典用法集锦及代码详解(全)

常见字典用法集锦及代码详解 前言 凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。 凡是上过EH论坛的想学习VBA里面字典用法的,几乎都看过研究过northwolves狼版主、oobird版主的有关字典的精华贴和经典代码。我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。 字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。深受大家的喜爱。 本文希望通过对一些字典应用的典型实例的代码的详细解释来

给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。 给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。 字典的简介 字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。 附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject)对象也是微软Windows脚本语言中的一份子。 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。就好像一本字典书一样,是

Excel VBA常用代码VSTO版20150425

21-1 使用工作表的名称 this.Application.Worksheets["工作表2"].Activate(); 21-2 使用工作的索引号 this.Application.Worksheets[2].Activate(); 21-3 使用工作表的代码名称 MessageBox.Show(this.Application.ActiveSheet.CodeName); 21-4 用ActiveSheet属性引用活动工作表 this.Application.Worksheets[2].Select(); MessageBox.Show(https://www.sodocs.net/doc/5e14228586.html,); 22-1 选择工作表的方法 this.Application.Worksheets[2].Select(); this.Application.Worksheets[2].Activate(); 23-1 使用For遍历工作表 intwkCount = this.Application.Worksheets.Count; string s = string.Empty; for (inti = 1; i<= wkCount; i++) { s = s + this.Application.Worksheets[i].Name + "\n"; } MessageBox.Show("工作簿中含有以下工作表:" + "\n" + s); 23-2 使用ForEach语句 string s = string.Empty; foreach (Excel.Worksheetwk in this.Application.Worksheets) { s = s + https://www.sodocs.net/doc/5e14228586.html, + "\n"; } MessageBox.Show("工作簿中含有以下工作表:" + "\n" + s); 24-1 在工作表中向下翻页 Excel.Sheetsshs=Globals.ThisWorkbook.Worksheets; Excel.WorksheetwkThis = shs.Application.ActiveSheet; Excel.WorksheetwkNext; intwkIndex = wkThis.Index; intwkCount = shs.Count; if (wkIndex

EXCEL常用VBA代码

删除B列中字符串数值少于21的单元格所在的行 Sub 删除行() r = Range("B65536").End(xlUp).Row '行数 For h = r To 1 Step -1 If Cells(h, 2) < 21 Then Cells(h, 2).EntireRow.Delete Next End Sub ------------------------- 【工作表合并】将同一工作簿中的所有工作表合并到一个工作表中 新建一个工作表,写入代码[在新建的工作表标签处右键查看代码(找不到的直接按一下alt+F11) 把下面的代码复制进去然后点上面的运行运行子程序即可]: Sub 合并当前工作簿下的所有工作表() Application.ScreenUpdating = False For j = 1 To Sheets.Count If Sheets(j).Name <> https://www.sodocs.net/doc/5e14228586.html, Then X = Range("A65536").End(xlUp).Row + 1 Sheets(j).UsedRange.Copy Cells(X, 1) End If Next Range("B1").Select Application.ScreenUpdating = True MsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示" End Sub ********************************************************* 代码这样写也行: Sub c() For i = Sheets.Count To 2 Step -1 Sheets(i).Select Sheets(i).UsedRange.Copy Sheets(1).Select Cells(Cells(65000, 1).End(xlUp).Row + 1, 1).Select ActiveSheet.Paste 'Sheets(i).Delete Next i End Sub ************************************************************ 把一个工作簿中的所有表单合并成一个表单,怎么去掉重复的表头、标题行?方法如下:

Excel VBA常用代码总结1

Excel VBA常用代码总结1 改变背景色 Range("A1"). = xlNone ColorIndex一览 改变文字颜色 Range("A1"). = 1 获取单元格 Cells(1, 2) Range("H7") 获取范围 Range(Cells(2, 3), Cells(4, 5)) Range("a1:c3") '用快捷记号引用单元格 Worksheets("Sheet1").[A1:B5] 选中某sheet Set NewSheet = Sheets("sheet1") 选中或激活某单元格 '“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。 '下面的代码首先选择A1:E10区域,同时激活D4单元格: Range("a1:e10").Select

Range("d4:e5").Activate '而对于下面的代码: Range("a1:e10").Select Range("f11:g15").Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。 获得文档的路径和文件名 '路径 '名称 '路径+名称 '或将ActiveWorkbook换成thisworkbook 隐藏文档 = False 禁止屏幕更新 = False 禁止显示提示和警告消息 = False 文件夹做成 strPath = "C:\temp\" MkDir strPath 状态栏文字表示 = "计算中" 双击单元格内容变换 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If>= 5And<= 8) Then If= "●"Then = "" Else = "●" End If Cancel = True End If End Sub 文件夹选择框方法1 Set objShell = CreateObject("") Set objFolder = (0, "文件", 0, 0) If Not objFolder Is Nothing Then path= & "\" end if

EXCELVBA常用代码实战大全共393页word资料

VBA常用技巧代码解析 yuanzhuping 1VBA VBAVBA VBA常用 常用常用 常用技巧 技巧技巧 技巧 目录 目录目录 目录 VBA VBAVBA VBA常用技巧 常用技巧常用技巧 常用技巧 ------------------------------------------------------------------------------------------------------- 1 第1章 Range(单元格)对象 -------------------------------------------------------------------- 10 技巧1 单元格的引用方法 ---------------------------------------------------------------------- 10 1-1 使用Range属性 ----------------------------------------------------------------------- 10 1-2 使用Cells属性 ------------------------------------------------------------------------ 11 1-3 使用快捷记号 -------------------------------------------------------------------------- 11 1-4 使用Offset属性 ----------------------------------------------------------------------- 12 1-5 使用Resize属性 ----------------------------------------------------------------------- 13 1-6 使用Union方法 ----------------------------------------------------------------------- 14 1-7 使用UsedRange属性 ---------------------------------------------------------------- 14 1-8 使用CurrentRegion属性 ------------------------------------------------------------ 15 技巧2 选定单元格区域的方法---------------------------------------------------------------- 15 2-1 使用Select方法 ----------------------------------------------------------------------- 15 2-2 使用Activate方法 -------------------------------------------------------------------- 16 2-3 使用Goto方法 ------------------------------------------------------------------------- 17 技巧3 获得指定行、列中的最后一个非空单元格 -------------------------------------- 17 技巧4 定位单元格 ------------------------------------------------------------------------------- 20

Excel VBA编程的常用代码

用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的! 使用Dim语句 Dim a as integer '声明a为整型变量 Dim a '声明a为变体变量 Dim a as string '声明a为字符串变量 Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量 ...... 声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不支持)、Date、String(只限变长字符串)、String * length(定长字符串)、Object、Variant、用户定义类型或对象类型。 强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数 用来代替文字值。 Const ' 常数的默认状态是 Private。 Const My = 456 ' 声明 Public 常数。 Public Const MyString = "HELP" ' 声明 Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就

可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。 Sub My_Select Selection.CurrentRegion.Select End sub 返回当前单元格中数据删除前后空格后的值 sub my_trim msgbox Trim(ActiveCell.Value) end sub 单元格位移 sub my_offset ActiveCell.Offset(0, 1).Select'当前单元格向左移动一格 ActiveCell.Offset(0, -1).Select'当前单元格向右移动一格 ActiveCell.Offset(1 , 0).Select'当前单元格向下移动一格 ActiveCell.Offset(-1 , 0).Select'当前单元格向上移动一格 end sub 如果上述程序产生错误那是因为单元格不能移动,为了解除上述错误,我们可以往 sub my_offset 之下加一段代码 on error resume next 注意以下代码都不再添加sub “代码名称” 和end sub请自己添加! 给当前单元格赋值 ActiveCell.Value = "你好!!!" 给指定单元格赋值 例如:A1单元格内容设为"HELLO" Range("a1").value="hello" 又如:你现在的工作簿在sheet1上,你要往sheet2的A1单元格中插入"HELLO" 1. sheets("sheet2").select

ExcelVBA常用代码VSTO版

Excel VBA常用代码VSTO版(C#) 1-1使用Range属性 this.Range["A3:F6, B1:C5"].Select(); 1-2使用Cells属性 for(int icell=1;icell<=100;icell++) { this.Application.Worksheets[2].cells[icell, 1].value = icell; } 1-3使用快捷记号 #N/A 1-4使用Offset属性 this.Range["A1:A3"].Offset[3, 3].Select(); 1-5使用Resize属性 this.Range["A1"].Resize[3, 3].Select(); 1-6使用Union属性 this.Application.Union(this.Range["A1:D4"], this.Range["E5:H8"]).Select(); 1-7使用UsedRange属性 https://www.sodocs.net/doc/5e14228586.html,edRange.Select(); 1-8使用CurrentRegion属性 this.Range["A5"].CurrentRegion.Select(); 2-1 使用Select方法 this.Application.Worksheets[3].Activate(); this.Application.Worksheets[3].Range["A1:B10"].Select(); 2-2 使用Activate方法 this.Application.Worksheets[3].Activate(); this.Application.Worksheets[3].Range["A1:B10"].Activate(); 注:此处的代码,可以运行,但是只会选中A1这一个单元格 2-3 使用Goto方法

excel代码大全

excel代码大全.txt第一次笑是因为遇见你,第一次哭是因为你不在,第一次笑着流泪是因为不能拥有你。EXCEL宏代码大全 本文件部分文章来源于网络,文章版权归原作者所有,如果本站转载的文章侵犯了您的权益请及时联系我们,我们将尽快妥善处理。本站除部分特别声明禁止转载的专稿外,其他文章可以自由转载,但请务必注明原出处和作者。 000. A列半角内容变红 Sub A列半角内容变红() Dim rg As Range, i As Long = False For Each rg In (xlCellTypeConstants, 3) For i = 1 To Len(rg) If Asc(Mid(rg, i, 1)) 001. A列等于A列减B列 Sub A列等于A列减B列() For i = 1 To 23 Cells(i, 1) = Cells(i, 1) - Cells(i, 2) Next End Sub 002. B列录入数据时在A列返回记录时间(工作表代码) Public Sub Worksheet_Change(ByVal Target As Range) If = 2 Then (, -1) = Now End If End Sub 003. Excel宏常用代码 本大类暂没有内容,以下是关于本类的所有记录集。 004. Sub 以当前日期为名称另存文件() Filename:=Date & ".xls" End Sub 005. Sub 启用保存() ("File").Controls(4).Enabled = True ("File").Controls(5).Enabled = True End Sub 006. Sub 执行前需要验证密码的宏()

Excel VBA编程的常用代码

Excel VBA编程的常用代码 用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的! 使用Dim语句 Dim a as integer '声明a为整型变量 Dim a '声明a为变体变量 Dim a as string '声明a为字符串变量 Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量 ...... 声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (当前不支持)、Date、String(只限变长字符串)、String * length(定长字符串)、Object、Variant、用户定义类型或对象类型。 强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数

用来代替文字值。 Const ' 常数的默认状态是Private。 Const My = 456 ' 声明Public 常数。 Public Const MyString = "HELP" ' 声明Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。 Sub My_Select Selection.CurrentRegion.Select End sub 返回当前单元格中数据删除前后空格后的值 sub my_trim msgbox Trim(ActiveCell.Value)

Excel VBA 常用代码50例

Excel VBA 常用代码50例 001。用命令按扭打印一个sheet1中B2:M30区域中的内容? 我想在Sheet2中制件一个命令按扭, 打印表Sheet1中的[B2:M30] 区域中的内容? 解答:可以将打印区域设为b2:m30,然后打印,如:sheets("sheet1").printarea="b2:m30" sheets("sheet1").printout 随手写的,你可以试试看。最简单的方法是:你先录制宏,在录制宏过程中,跑到页面设臵里面,把打印范围设臵到你想要的范围。 然后退出,停止录制宏,你就可以得到一些代码! 002。能否对一列中的文字统一去掉最后一个字?这些文字不统一,有些字数多,有些字数少。如何处理?我用{"&-}不行 解答:=REPLACE(A1,LEN(A1),1," ")(在过渡列进行) 003.能否根据单元格数值自动标记序号? 各位大佬,一工作表有两列,“序号”及“金额”,能否将金额不等于0的行自动标上序号呢?如无现成的函数,应怎样设臵? 解答:Dim xuhao As Integer xuhao = 1

Range("b2").Select Do While Selection <> "" If Selection <> 0 Then ActiveCell.Previous.Value = xuhao xuhao = xuhao + 1 End If ActiveCell.Offset(1, 0).Range("a1").Select Loop 004.求教自定义函数 查询了一些自定义函数的例子都是单变量的。自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“∑x2”为例,万分感谢!(该用"For Each ...Next",就是还不知道如何引用Range中的每个值,请高手指点。) 解答:参数使用Range而函数值为Integer是可以的 用for each next循环思路也是对的,应该这样作: dim rg as range dim ivalue as integer for each rg in 参数区域 ivalue=ivalue+rg.value next

excelvba编程的常用代码

强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数 用来代替文字值。 Const ' 常数的默认状态是 Private。 Const My = 456 ' 声明 Public 常数。 Public Const MyString = "HELP" ' 声明 Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。Sub My_Select End sub 返回当前单元格中数据删除前后空格后的值 sub my_trim msgbox Trim end sub

单元格位移 sub my_offset (0, 1).Select'当前单元格向左移动一格 (0, -1).Select'当前单元格向右移动一格 (1 , 0).Select'当前单元格向下移动一格 (-1 , 0).Select'当前单元格向上移动一格 end sub 如果上述程序产生错误那是因为单元格不能移动,为了解除上述错误,我们可以往 sub my_offset 之下加一段代码 on error resume next 注意以下代码都不再添加sub “代码名称” 和end sub请自己添加! 给当前单元格赋值 = "你好!!!" 给指定单元格赋值 例如:A1单元格内容设为"HELLO" Range("a1").value="hello" 又如:你现在的工作簿在sheet1上,你要往sheet2的A1单元格中插入"HELLO" 1. sheets("sheet2").select range("a1").value="hello" 或 2. Sheets("sheet1").Range("a1").Value = "hello" 说明: 被选中,然后在将“HELLO"赋到A1单元格中。 不必被选中,即可“HELLO"赋到sheet2 的A1单元格中。

Excel VBA编程常用代码

Excel VBA编程常用代码 时间:2009-12-05 22:36:04 来源:本站作者:未知我要投稿我要收 藏投稿指南 用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的!使用Dim语句 Dim a as integer '声明a为整型变量 Dim a '声明a为变体变量 Dim a as string '声明a为字符串变量 Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量...... 声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不支持)、Date、String(只限变长字符串)、String * length (定长字符串)、Object、Variant、用户定义类型或对象类型。 强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数 用来代替文字值。 Const ' 常数的默认状态是 Private。 Const My = 456 ' 声明 Public 常数。 Public Const MyString = "HELP" ' 声明 Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。 Sub My_Select Selection.CurrentRegion.Select End sub 返回当前单元格中数据删除前后空格后的值 sub my_trim msgbox Trim(ActiveCell.Value) end sub 单元格位移 sub my_offset ActiveCell.Offset(0, 1).Select'当前单元格向左移动一格

Excel-VBA常用技巧代码

多个工作薄合并成同一个工作薄,如何合并? 多人填一个同样的工作薄,形成了多个工作薄。如何让几人填了一部分的工作薄合并成终稿。 Sub 汇总() Dim mypath As String, myname As String, Dname As String, sh As Workbook, copyrow As Integer Set sh = ThisWorkbook mypath = ThisWorkbook.Path myname = https://www.sodocs.net/doc/5e14228586.html, Dname = Dir(mypath & "\*.xls") Application.ScreenUpdating = False Do While Dname <> "" If Dname <> myname Then copyrow = 1 With GetObject(mypath & "\" & Dname) For i = 1 To .Worksheets.Count If .Sheets(i).Cells(5, 3) <> "" Then .Sheets(i).Rows("1:" & .Sheets(i).UsedRange.Rows.Count).Copy sh.Sheets(i).Cells(copyrow, 1) End If Next .Close False End With End If Dname = Dir Loop Application.ScreenUpdating = True MsgBox "OK!" End Sub

合并工作簿:将其他工作簿的全部表合并到本工作 Sub 合并工作簿() Dim FilesToOpen Dim x As Integer On Error GoTo ErrHandler Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "No Files were selected" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets _ (ThisWorkbook.Sheets.Count) x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub Sub 合并工作表() For Each st In Worksheets If https://www.sodocs.net/doc/5e14228586.html, <> https://www.sodocs.net/doc/5e14228586.html, Then https://www.sodocs.net/doc/5e14228586.html,edRange.Offset(1, 0).Copy [a65536].End(xlUp).Offset(1, 0) Next End Sub

VBA常用代码

1.遍历所有已打开的word文档 For Each docOpened In Documents …… Next docOpened 2.Word 将目录下所有文档转换为txt,并删除原文档 Sub 目录下doc转txt() '目录下所有word文档转为txt,并删除word文档 '保存在原目录 '遍历所有文件夹,把带路径的文件名存入字典 On Error Resume Next Dim Path As String, t 'Path为路径,t用于计算程序执行花费的时间 Set objshell = CreateObject("Shell.Application") Set objfolder = objshell.BrowseForFolder(0, "选择文件夹", 0, 0) If Not objfolder Is Nothing Then Path = objfolder.sel f.Path & "\" Set objfolder = Nothing Set objshell = Nothing '创建字典用于存储路径和文件名 Dim DicPath, DicFile, i As Integer, Ke, ContentName A s String, FileName As String, MsgTxt Set DicPath = CreateObject("Scripting.Dictionary")

Set DicFile = CreateObject("Scripting.Dictionary") DicPath.Add Path, "" i = 0 '存所有路径 Do While i < DicPath.count Ke = DicPath.keys ContentName = Dir(Ke(i), vbDirectory) Do While ContentName <> "" '若有子文件夹,则添加 '跳过当前的目录及上层目录 If ContentName <> "." And ContentName < > ".." Then If GetAttr(Ke(i) & ContentName) = vbDirectory Then DicPath.Add (Ke(i) & Conte ntName & "\"), "" End If End If ContentName = Dir Loop i = i + 1 Loop '存所有doc文件名 For Each Ke In DicPath.keys FileName = Dir(Ke & "*.doc")

EXCEL VBA常用代码集

EXCEL VBA常用代码集 1.显示活动工作簿名称 MsgBox "当前活动工作簿是" & https://www.sodocs.net/doc/5e14228586.html, 2.保存活动工作簿 Activeworkbook.Save 3.保存所有打开的工作簿关闭EXCEL For Each W in Application.Workbooks W.Save Next W Application.Quit 4.将网格线设置为蓝色 ActiveWindow.GridlineColorIndex = 5 5.将工作表sheet1隐藏 Sheet1.Visible = xlSheetV eryHidden 6.将工作表Shtte1显示 Sheet1.Visible = xlSheetVisible 7.单击某单元格,该单元格所在的行以蓝色背景填充,字体颜色为白色 Private Sub Worksheet_SelectionChange(ByV al Target As Excel.Range) If Target.Row >= 2 Then’第二行以下的区域 On Error Resume Next [ChangColor_With1].FormatConditions.Delete https://www.sodocs.net/doc/5e14228586.html, = "ChangColor_With1" With [ChangColor_With1].FormatConditions .Delete .Add xlExpression, , "TRUE" .Item(1).Interior.ColorIndex = 5 .Item(1).Font.ColorIndex = 2 End With End If End Sub 8.使窗体在启动的时候自动最大化 Private Sub UserForm_Initialize() Application.WindowState = xlMaximized With Application Me.Top = .Top Me.Left = .Left Me.Height = .Height Me.Width = .Width End With End Sub 9.不保存工作簿退出EXCEL Application.DisplayAlerts = False Application.Quit

Excel 宏编程的常用代码

Excel 宏编程的常用代码 用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的!使用Dim语句 Dim a as integer '声明a为整型变量 Dim a '声明a为变体变量 Dim a as string '声明a为字符串变量 Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量...... 声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不支持)、Date、String(只限变长字符串)、String * length(定长字符串)、Object、V ariant、用户定义类型或对象类型。 强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数 用来代替文字值。 Const ' 常数的默认状态是Private。 Const My = 456 ' 声明Public 常数。 Public Const MyString = "HELP" ' 声明Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。 Sub My_Select Selection.CurrentRegion.Select End sub

VBA常用代码

VBA编程常用代码 用过VB的人都应该知道如何声明变量,在VBA中声明变量和VB中是完全一样的!使用Dim语句 Dim a as integer '声明a为整型变量 Dim a '声明a为变体变量 Dim a as string '声明a为字符串变量 Dim a as currency ,b as currency ,c as currency '声明a,b,c为货币变量...... 声明变量可以是:Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(当前不支持)、Date、String(只限变长字符串)、String * length (定长字符串)、Object、Variant、用户定义类型或对象类型。 强制声明变量 Option Explicit 说明:该语句必在任何过程之前出现在模块中。 声明常数 用来代替文字值。 Const ' 常数的默认状态是 Private。 Const My = 456 ' 声明 Public 常数。 Public Const MyString = "HELP" ' 声明 Private Integer 常数。 Private Const MyInt As Integer = 5 ' 在同一行里声明多个常数。 Const MyStr = "Hello", MyDouble As Double = 3.4567 选择当前单元格所在区域 在EXCEL97中,有一个十分好的功能,他就是把鼠标放置在一个有效数据单元格中,执行该段代码,你就可以将连在一起的一片数据全部选中。只要将该段代码加入到你的模块中。 Sub My_Select Selection.CurrentRegion.Select End sub 返回当前单元格中数据删除前后空格后的值 sub my_trim msgbox Trim(ActiveCell.Value) end sub 单元格位移 sub my_offset ActiveCell.Offset(0, 1).Select'当前单元格向左移动一格 ActiveCell.Offset(0, -1).Select'当前单元格向右移动一格 ActiveCell.Offset(1 , 0).Select'当前单元格向下移动一格 ActiveCell.Offset(-1 , 0).Select'当前单元格向上移动一格

ExcelVBA常用代码总结1

Excel VBA常用代码总结1 ?改变背景色 Range("A1").Interior.ColorIndex = xlNone ColorIndex一览 ?改变文字颜色 Range("A1").Font.ColorIndex = 1 ?获取单元格 Cells(1, 2) Range("H7") ?获取围 Range(Cells(2, 3), Cells(4, 5)) Range("a1:c3") '用快捷记号引用单元格 Worksheets("Sheet1").[A1:B5] ?选中某sheet Set NewSheet = Sheets("sheet1") NewSheet.Select ?选中或激活某单元格 '“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。 '下面的代码首先选择A1:E10区域,同时激活D4单元格: Range("a1:e10").Select

Range("d4:e5").Activate '而对于下面的代码: Range("a1:e10").Select Range("f11:g15").Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。 ?获得文档的路径和文件名 ActiveWorkbook.Path '路徑 https://www.sodocs.net/doc/5e14228586.html, '名稱 ActiveWorkbook.FullName '路徑+名稱 '或将ActiveWorkbook换成thisworkbook ?隐藏文档 Application.Visible = False ?禁止屏幕更新 Application.ScreenUpdating = False ?禁止显示提示和警告消息 Application.DisplayAlerts = False ?文件夹做成 strPath = "C:\temp\" MkDir strPath ?状态栏文字表示 Application.StatusBar = "计算中" ?双击单元格容变换 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If (Target.Cells.Row >= 5And Target.Cells.Row <= 8) Then If Target.Cells.Value = "●"Then Target.Cells.Value = "" Else Target.Cells.Value = "●" End If Cancel = True End If End Sub ?文件夹选择框方法1 Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(0, "文件", 0, 0) If Not objFolder Is Nothing Then path= objFolder.self.Path & "\" end if

相关主题