VBA常见代码
VBA常用代码大全
.、八、-刖言我们平时在工作表单元格的公式中常常使用函数,EGcel自带的常用的函数多达300多个, 功能强大,丰富多彩,但是在 VBA中不能直接应用,必须在函数名前面加上对象,比如:Applicatio n. WorksheetF un ctio n.Sum(arg1,arg2,arg3) 。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数, 以供大家学习参考。
第1.1例ASC函数一、题目:要求编写一段代码,运行后得到字符串”EGcel”的首字母和” e”的ASCII值。
二、代码:Sub 示例_1_01()DimmyNum1%,myNum2%myNum仁Asc("EGcel")'返回 69myNum2=Asc("e")' 返回 101[a1]="myNum 1=":[b1]=myNum1[a2]="myNum2=":[b2]=myNum2En dSub三、代码详解1、Sub示例_1_01():宏程序的开始语句。
2、DimmyNum1%,myNum2% :变量 myNum1 和 myNum2 声明为整型变量。
也可以写为DimmyNum1AsInteger 。
Integer变量存储为16位(2个字节)的数值形式,其范围为-32,768到32,767之间。
Integer的类型声明字符是百分比符号(%)。
3、myNum1=Asc("EGcel"):把 Asc 函数的值赋给变量 myNum1 。
Asc函数返回一个Integer,代表字符串中首字母的字符的 ASCII代码。
语法Asc(stri ng)必要的string (字符串)参数可以是任何有效的字符串表达式。
如果string中没有包含任何字符,则会产生运行时错误。
4、myNum2=Asc("e"):把Asc函数的值赋给变量myNum2。
vba基础代码
vba基础代码VBA基础代码VBA是Visual Basic for Applications的缩写,是一种用于Microsoft Office应用程序的编程语言。
它可以帮助用户自动化重复性的任务,提高工作效率。
在本文中,我们将介绍一些VBA基础代码,帮助您更好地理解和使用VBA。
1. Sub和FunctionSub和Function是VBA中最基本的代码块。
Sub用于执行一系列操作,而Function则返回一个值。
下面是一个简单的Sub代码块: Sub HelloWorld()MsgBox "Hello World!"End Sub这个代码块将弹出一个消息框,显示“Hello World!”。
下面是一个简单的Function代码块:Function AddNumbers(x As Integer, y As Integer) As IntegerAddNumbers = x + yEnd Function这个代码块将返回两个整数的和。
2. If语句If语句用于根据条件执行不同的操作。
下面是一个简单的If语句:Sub CheckNumber()Dim x As Integerx = InputBox("Enter a number:")If x > 0 ThenMsgBox "The number is positive."ElseIf x < 0 ThenMsgBox "The number is negative."ElseMsgBox "The number is zero."End IfEnd Sub这个代码块将提示用户输入一个数字,并根据数字的正负性弹出不同的消息框。
3. For循环For循环用于重复执行一系列操作。
下面是一个简单的For循环:Sub CountToTen()Dim i As IntegerFor i = 1 To 10MsgBox iNext iEnd Sub这个代码块将弹出10个消息框,分别显示数字1到10。
常用VBA代码
常⽤VBA代码VBA代码(珍藏)'**关闭屏幕刷新Application.ScreenUpdating = False'**取消删除⼯作表警告提⽰Application.DisplayAlerts = False'**引⽤打开窗⼝Dim fd As FileDialogDim vrtSelectedItem As VariantSet fd = Application.FileDialog(msoFileDialogOpen)fd.InitialFileName = Sheets('设置').Range('CU7').Value & '\库存核对' '默认打开的⽂件夹 With fd.AllowMultiSelect = True '可选多个⽂件If .Show = -1 ThenFor Each vrtSelectedItem In .SelectedItemsFJ = Split(vrtSelectedItem, '\')ThisWorkbook.Sheets('设置').Range(CR).Value = FJ(3) '记录⽂件名ThisWorkbook.Sheets('设置').Range('AG1').Value = FJ(3) '记录⽂件名fd.Execute '执⾏打开mandButton62.Enabled = TrueExit ForNextEnd IfEnd WithSet fd = Nothing****得到计算机名称Environ('Computername')****判断是不是数字If IsNumeric(InputBox('Please Input:')) Then****筛选⾮空单元格ActiveSheet.Range('$E$7:$I$15').AutoFilter Field:=1, Criteria1:='<>'****仅贴值Range('F5:J25').SelectSelection.CopyRange('E5').SelectActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _IconFileName:=False****设置是否冻结空格ActiveWindow.FreezePanes = FalseActiveWindow.FreezePanes = True****设置页⾯With ActiveSheet.PageSetup.LeftFooter = '编制:审核:' '页脚LEFT.PrintTitleRows = '$1:$3' '要打印的默认页头.PrintArea = '$A$1:$E$12' '打印区域End With.PrintOut Copies:=2 '打印(2份)****设置批注Range('F8').AddComment'添加批注Range('F8').Comment.Visible = False'隐藏框.Comment.Shape.TextFrame.AutoSize = True'⾃动调整框⼤⼩.Comment.Font.FontStyle = '常规' '将字体设置为“常规”(不加粗)(不成功) '-------------------------------------Range('F8').Comment.Text Text:='黄传兵:' & Chr(10) & 'SS'If Range('F8').Comment Is Nothing Then '如果没有批注内容Public Function OPEN_JL(WJ As String) '检测是否有相应引⽤⽂件的打开记录 Dim I As IntegerDim MC, MC_CR As StringL3 = ThisWorkbook.Sheets('设置').Range('N2').ValueFor I = 4 To L3 + 3MC_CR = 'N' & IMC = ThisWorkbook.Sheets('设置').Range(MC_CR).ValueIf UCase(MC) = UCase(WJ) ThenOPEN_JL = 'Y'Exit ForEnd IfNext IEnd Function'打开需引⽤的⽂件Public Sub OPEN_WJ(LJ, WJ As String)On Error GoTo X:Dim M4, Y3 As StringDim LJWJ As StringLJWJ = LJ & WJIf OPEN_YN(WJ) <> 'Y' Then '如果未被其它引⽤并打开Workbooks.Open Filename:=LJWJL3 = ThisWorkbook.Sheets('设置').Range('N2').ValueM3_CR = 'N' & L3 + 4M4_CR = 'O' & L3 + 4ThisWorkbook.Sheets('设置').Range(M3_CR).Value = WJThisWorkbook.Sheets('设置').Range(M4_CR).Value = 1Windows(WJ).Visible = FalseElse '如果已被其它引⽤并打开If OPEN_JL(WJ) = '' ThenL3 = ThisWorkbook.Sheets('设置').Range('N2').ValueM3_CR = 'N' & L3 + 4M4_CR = 'O' & L3 + 4ThisWorkbook.Sheets('设置').Range(M3_CR).Value = WJThisWorkbook.Sheets('设置').Range(M4_CR).Value = 2End IfEnd IfExit SubX:MsgBox ''' & WJ & ''未打开,请检查路径。
vba 常用宏代码
在VBA中,你可以使用宏来自动执行一系列的操作。
以下是一些常用的VBA宏代码示例:1.打开一个工作簿:vba复制代码Sub OpenWorkbook()Workbooks.Open "C:\path\to\your\workbook.xlsx"End Sub2.关闭一个工作簿:vba复制代码Sub CloseWorkbook()ThisWorkbook.Close SaveChanges:=TrueEnd Sub3.复制一个单元格的内容:vba复制代码Sub CopyCell()Range("A1").Copy Range("B1")End Sub4.粘贴一个单元格的内容:vba复制代码Sub PasteCell()Range("B1").PasteSpecial Paste:=xlPasteValuesEnd Sub5.查找并替换单元格中的内容:vba复制代码Sub FindAndReplace()Range("A1").Replace What:="old", Replacement:="new"End Sub6.自动填充数据:vba复制代码Sub AutoFill()Range("A1:A10").FillDownEnd Sub7.插入新的列或行:vba复制代码Sub InsertColumn()Columns("B:B").Insert Shift:=xlToRight,CopyOrigin:=xlFormatFromLeftOrAboveEnd Sub8.删除列或行:vba复制代码Sub DeleteColumn()Columns("B:B").Delete Shift:=xlToLeft,CopyOrigin:=xlFormatFromLeftOrAboveEnd Sub。
vba编程代码大全
vba编程代码大全VBA编程代码大全。
VBA是Visual Basic for Applications的缩写,是一种用于Microsoft Office应用程序的编程语言。
通过VBA,用户可以编写自定义的宏和程序,以实现自动化操作和定制功能。
VBA编程在Excel、Word、PowerPoint等Office应用中都有广泛的应用,可以大大提高工作效率和数据处理的灵活性。
本文将为大家详细介绍VBA 编程中常用的代码,帮助大家更好地掌握VBA编程技能。
一、基本操作。
1. 打开VBA编辑器。
在Office应用程序中,按下Alt + F11快捷键即可打开VBA编辑器。
在VBA 编辑器中,可以编写和管理VBA代码。
2. 编写子程序。
使用Sub关键字定义一个子程序,然后在其中编写具体的VBA代码。
例如:Sub HelloWorld()。
MsgBox "Hello, World!"End Sub。
3. 运行宏。
在VBA编辑器中,可以直接运行编写好的宏程序。
也可以在Office应用程序中,通过快捷键或菜单来运行宏。
二、常用代码。
1. 操作单元格。
在Excel中,可以使用VBA来操作单元格,例如:Range("A1").Value = 100。
Range("A1").Interior.Color = RGB(255, 0, 0)。
2. 循环结构。
使用VBA可以编写各种类型的循环结构,例如For循环、Do While循环等,来实现对数据的遍历和处理。
3. 条件判断。
VBA中的If语句可以用来进行条件判断,根据不同的条件执行不同的操作,例如:If Range("A1").Value > 0 Then。
Range("B1").Value = "Positive"Else。
Range("B1").Value = "Negative"End If。
vba经典代码
vba经典代码以下是一些经典的 VBA 代码示例:1. 打开一个文件对话框,并选择文件路径:```vbaSub OpenFileDialog()Dim filePath As VariantWith Application.FileDialog(msoFileDialogOpen)If .Show = -1 ThenfilePath = .SelectedItems(1)MsgBox "选择的文件路径为:" & filePathEnd IfEnd WithEnd Sub```2. 在单元格 A1 中插入当前日期:```vbaSub InsertCurrentDate()Range("A1"Value = DateEnd Sub```3. 循环遍历一个区域中的单元格,并将每个单元格的值加倍:Sub DoubleValues()Dim cell As RangeFor Each cell In Range("A1:A10" cell.Value = cell.Value * 2Next cellEnd Sub```4. 将一个字符串数组写入工作表的一列中:```vbaSub WriteArrayToColumn()Dim arr() As StringDim i As Integerarr = Split("apple,banana,orange" ""For i = 0 To UBound(arr)Cells(i + 1, 1).Value = arr(i)Next iEnd Sub```5. 在单元格 A1 中执行一个简单的计算表达式:Sub EvaluateExpression()Range("A1"Value = Evaluate("2 + 3 * 4"End Sub```这些代码示例可以帮助你开始编写 VBA 宏。
vba常用代码大全
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA 函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII 值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的 string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
vba常用代码大全
前言我们平时在工作表xx的公式xx常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBAxx不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBAxx直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为Dim myNum1 As Integer 。
Integer 变量存储为16位(2 个字节)的数值形式,其范围为-32,768 到32,767 之间。
Integer 的类型声明字符是百分比符号(%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的string(字符串)参数可以是任何有效的字符串表达式。
如果string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
Excel VBA常用代码及解释
Excel VBA常用代码及解释(1) Option Explicit解释:强制对模块内所有变量进行声明(2) Option Base 1解释:指定数组的第一个下标为1(3) On Error Resume Next解释:忽略错误继续执行VBA代码,避免出现错误消息(4) On Error GoTo 100解释:当错误发生时跳转到过程中的某个位置(5) On Error GoTo 0解释:恢复正常的错误提示(6) Application.DisplayAlerts=False解释:在程序执行过程中使出现的警告框不显示(7) Application.DisplayAlerts=True解释:在程序执行过程中恢复显示警告框(8) Application.ScreenUpdating=False解释:关闭屏幕刷新(9) Application.ScreenUpdating = True解释:打开屏幕刷新(10) Workbooks.Add()解释:创建一个新的工作簿(11) Workbooks(“book1.xls”).Activate解释:激活名为book1的工作簿(12) ThisWorkbook.Save解释:保存工作簿(13) ThisWorkbook.close解释:关闭当前工作簿(14) ActiveWorkbook.Sheets.Count解释:获取活动工作薄中工作表数(15) Active 解释:返回活动工作薄的名称(16) This 解释:返回当前工作簿名称(17) ThisWorkbook.FullName解释:返回当前工作簿路径和名(18) edRange.Rows.Count解释:当前工作表中已使用的行数(19) Rows.Count解释:获取工作表的行数(20) Sheets(Sheet1).Name= “Sum”解释:将Sheet1命名为Sum(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) 解释:添加一个新工作表在第一工作表前(22)ActiveSheet.MoveAfter:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count )解释:将当前工作表移至工作表的最后(23) Worksheets(Array(“sheet1”,”sheet2”)).Select解释:同时选择工作表1和工作表2(24) Sheets(“sheet1”).Delete或 Sheets(1).Delete解释:删除工作表1(25) edRange.FormatConditions.Delete解释:删除当前工作表中所有的条件格式(26) Cells.Hyperlinks.Delete解释:取消当前工作表所有超链接(27) ActiveCell.CurrentRegion.Select选择当前活动单元格所包含的范围,等同于快捷键Ctrl+A(28) Cells.Select解释:选定当前工作表的所有单元格(29) Range(“A1”).ClearContents解释:清除活动工作表上单元格A1中的内容。
vba常用代码大全
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例 ASC函数一、题目:要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的 string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
(word完整版)VBA代码汇总,推荐文档
1:打开所有隐藏工作表Sub打开所有隐藏工作表()Dim i As IntegerFor i=1To Sheets.CountSheets(i).Visible=TrueNext iEnd Sub2:循环宏Sub循环()AAA=Range("C2")Dim i As LongDim times As Longtimes=AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i=1To timesCall过滤一行If Range("完成标志")="完成"ThenExit For'假如名为'完成标志'的命名单元的值等于'完成',则退出循环,假如一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A"&i).Text="完成"ThenExit For'假如某列出现"完成"内容则退出循环Next iEnd Sub3:录制宏时调用“停止录制”工具栏Sub录制宏时调用停止录制工具栏()mandBars("Stop Recording").Visible=TrueEnd Sub4:高级筛选5列不重复数据至指定表Sub高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536")=""'清除Sheet2的A:D列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy,CopyToRange:=Sheet2.Range(_"A1"),Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"),Order1:=xlAscending,Header:=xlGuess,_OrderCustom:=1,MatchCase:=False,Orientation:=xlTopToBottom,SortMethod_ :=xlPinYinEnd Sub5:双击单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)If Range("$A$1")="关闭"ThenExit SubSelect Case Target.AddressCase"$A$4"Call宏1Cancel=TrueCase"$B$4"Call宏2Cancel=TrueCase"$C$4"Call宏3Cancel=TrueCase"$E$4"Call宏4Cancel=TrueEnd SelectEnd Sub6:双击指定区域单元执行宏(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean) If Range("$A$1")="关闭"Then Exit SubIf Not Application.Intersect(Target,Range("A4:A9","C4:C9"))Is Nothing Then Call打开隐藏表End Sub7:进入单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1")="关闭"Then Exit SubSelect Case Target.AddressCase"$A$5"'单元地址(Target.Address),或命名单元名字()Call宏1Case"$B$5"Call宏2Case"$C$5"Call宏3End SelectEnd Sub8:进入指定区域单元执行宏(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1")="关闭"Then Exit SubIf Not Application.Intersect(Target,Range("A4:A9","C4:C9"))Is Nothing Then Call打开隐藏表End Sub9:在多个宏中依次循环执行一个(控件按钮代码)Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase0宏1RunMacro=1Case1宏2RunMacro=2Case2宏3RunMacro=0End SelectEnd Sub10:在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Private Sub CommandButton1_Click()With CommandButton1If.Caption="保护工作表"ThenCall保护工作表.Caption="取消工作表保护"Exit SubEnd IfIf.Caption="取消工作表保护"ThenCall取消工作表保护.Caption="保护工作表"Exit SubEnd IfEnd WithEnd Sub11:在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)Option Explicit Private Sub CommandButton1_Click()With CommandButton1If.Caption="宏1"ThenCall宏1.Caption="宏2"Exit SubEnd IfIf.Caption="宏2"ThenCall宏2.Caption="宏3"Exit SubEnd IfIf.Caption="宏3"ThenCall宏3.Caption="宏1"Exit SubEnd IfEnd WithEnd Sub12:根据A1单元文本隐藏/显示按钮(控件按钮代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1")>2ThenCommandButton1.Visible=1ElseCommandButton1.Visible=0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub13:当前单元返回按钮名称(控件按钮代码)Private Sub CommandButton1_Click()ActiveCell=CommandButton1.CaptionEnd Sub14:当前单元内容返回到按钮名称(控件按钮代码)Private Sub CommandButton1_Click()CommandButton1.Caption=ActiveCellEnd Sub15:奇偶页分别打印Sub奇偶页分别打印()Dim i%,Ps%Ps=ExecuteExcel4Macro("GET.DOCUMENT(50)")'总页数MsgBox"现在打印奇数页,按确定开始."For i=1To Ps Step2ActiveSheet.PrintOut from:=i,To:=iNext iMsgBox"现在打印偶数页,按确定开始."For i=2To Ps Step2ActiveSheet.PrintOut from:=i,To:=iNext iEnd Sub16:自动打印多工作表第一页Sub自动打印多工作表第一页()Dim sh As IntegerDim xDim yDim syDim syzx=InputBox("请输入起始工作表名字:")sy=InputBox("请输入结束工作表名字:")y=Sheets(x).Indexsyz=Sheets(sy).IndexFor sh=y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1,To:=1Next shEnd Sub17:查找A列文本循环插入分页符Sub循环插入分页符()'Selection=Workbooks("临时表").Sheets("表2").Range("A1")调用指定地址内容Dim i As LongDim times As Longtimes=Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"),"分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i=1To timesCall插入分页符Next iEnd SubSub插入分页符()Cells.Find(What:="分页",After:=ActiveCell,LookIn:=xlValues,LookAt:=_xlPart,SearchOrder:=xlByRows,SearchDirection:=xlNext,MatchCase:=False)_.ActivateActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCellEnd SubSub取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub18:将A列最后数据行以上的所有B列图片大小调整为所在单元大小Sub将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture,i&i=[A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell,Range("B1:B"&i))Is Nothing Then Pic.Top=Pic.TopLeftCell.TopPic.Left=Pic.TopLeftCell.LeftPic.Height=Pic.TopLeftCell.HeightPic.Width=Pic.TopLeftCell.WidthEnd IfNextEnd Sub19:返回光标所在行数Sub返回光标所在行数()x=ActiveCell.RowRange("A1")=xEnd Sub20:在A1返回当前选中单元格数量Sub在A1返回当前选中单元格数量()[A1]=Selection.CountEnd Sub21:返回当前工作簿中工作表数量Sub返回当前工作簿中工作表数量()t=Application.Sheets.CountMsgBox tEnd Sub93:B列录入数据时在A列返回记录时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Target.Column=2ThenTarget.Offset(,-1)=NowEnd IfEnd Sub94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target,[A1:A1000])Is Nothing Then If Target.Column=1ThenTarget.Offset(,1)=DateTarget.Offset(,2)=TimeEnd IfEnd IfEnd SubPublic Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target,[A1:A1000])Is Nothing Then If Target.Column=1ThenTarget.Offset(,1)=Format(Now(),"yyyy-mm-dd")Target.Offset(,2)=Format(Now(),"h:mm:ss")End IfEnd IfEnd Sub95:指定单元显示光标位置内容(工作表代码)Private Sub Worksheet_SelectionChange(ByVal T As Range) Sheets(1).Range("A1")=SelectionEnd Sub96:每编辑一个单元保存文件Private Sub Worksheet_Change(ByVal Target As Range) ThisWorkbook.SaveEnd Sub97:指定允许编辑区域Sub指定允许编辑区域()ActiveSheet.ScrollArea="B8:G15"End Sub98:解除允许编辑区域限制Sub解除允许编辑区域限制()ActiveSheet.ScrollArea=""End Sub99:删除指定行Sub删除指定行()Workbooks("临时表").Sheets("表2").Range("5:5").Delete End Sub100:删除A列为指定内容的行Sub删除A列为指定内容的行()Dim a,b As Integera=Sheet1.[a65536].End(xlUp).RowFor b=a To2Step-1If Cells(b,1).Value="删除"ThenRows(b).DeleteEnd IfNextEnd SubExcel 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]•选中某sheetSet NewSheet = Sheets("sheet1")NewSheet.Select•选中或激活某单元格'“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。
vba经典代码
vba经典代码以下是一些经典的VBA代码示例:1. 在单元格中显示当前日期:```vbaRange("A1"Value = Date```2. 在单元格中显示当前时间:```vbaRange("A1"Value = Time```3. 在单元格中显示当前日期和时间:```vbaRange("A1"Value = Now```4. 循环遍历并处理所有工作表:```vbaDim ws As WorksheetFor Each ws In Worksheets"在此处添加处理代码Next ws```5. 将工作表中的数据复制到另一个工作表:```vbaWorksheets("Sheet1"UsedRange.CopyDestination:=Worksheets("Sheet2"Range("A1"```6. 打开文件对话框并选择文件路径:```vbaDim filePath As VariantfilePath = Application.GetOpenFilename("Excel 文件(*.xlsx),*.xlsx"If filePath <> False Then"在此处添加处理已选择文件的代码End If```7. 创建新工作簿并保存:```vbaDim newWorkbook As WorkbookSet newWorkbook = Workbooks.AddnewWorkbook.SaveAs "C:""路径""文件名.xlsx"```8. 删除所有空行:```vbaDim lastRow As LonglastRow = Cells(Rows.Count, 1).End(xlUp).RowOn Error Resume NextActiveSheet.Range("A1:A" &lastRow).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp On Error GoTo 0```9. 过滤数据并复制到另一个工作表:```vbaActiveSheet.Range("A1:D10"AutoFilter Field:=1,Criteria1:="条件"ActiveSheet.Range("A2:D10"SpecialCells(xlCellTypeVisible). CopyDestination:=Worksheets("Sheet2"Range("A1"ActiveSheet.AutoF ilterMode = False```10. 遍历并选择某一列中的所有唯一值:```vbaDim uniqueValues As CollectionSet uniqueValues = New CollectionDim cellValue As VariantOn Error Resume NextFor Each cellValue In Range("A1:A10" uniqueValues.Add cellValue, CStr(cellValue)Next cellValueOn Error GoTo 0```。
VBA代码全集
VBA代码全集VBA代码全集一、引用相对引用B4绝对引用$B$4混合引用$B4、B$4F4进行引用切换,$在字母前面则锁定列,在数字前面则锁定行。
二、Worksheet_Change 事件:1.在单元格中C4=VLOOKUP(B4,简码表!$B$4:$C$1000,2,FALSE)2. Worksheet_Change事件代码:Private Sub Worksheet_Change(ByVal Target As Range)On error resume nextIf Target.Row > 3 And Target.Column = 2 Theni = Target.RowCells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 2), Sheets("简码表").Range("b4:c100"), 2, False)End IfEnd Sub备查代码:Private Sub Worksheet_Change(ByVal Target As Range)On Error Resume NextIf Target.Row > 3 And Target.Column = 5 Theni = Target.RowCells(i, 6) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 2, False)Cells(i, 7) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 3, False)Cells(i, 8) = Application.WorksheetFunction.VLookup(Cells(i, 5), Sheets("类款项").Range("b2:e2000"), 4, False)End IfEnd Sub三、相乘Sub 计算金额()Application.ScreenUpdating = FalseDim i As LongDim irow As Longirow = Range("a3").End(xldown).RowFor i = 4 To irowCells(i, 3) = Cells(i, 1) * Cells(i, 2)Next iApplication.ScreenUpdating = TrueEnd Sub四、相减Sub 相减()Application.ScreenUpdating = FalseRange("c3:c10000").ClearContentsDim i As LongDim irow As Longirow = Range("a5000").End(xlUp).RowFor i = 3 To irowCells(i, 3) = VBA.Round((Cells(i, 1) - Cells(i, 2)), 2) Next iApplication.ScreenUpdating = TrueEnd Sub五、高级筛选(工具-宏-录制新宏,宏名改成高级筛选)Sub 高级筛选()Sheets("业务").Range("A3:I10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=ActiveCell.Range("A1:B1"), Unique:=TrueEnd Sub六、双击事件1.插入-名称-定义(修改名称和引用位置)2.查看代码-插入-用户窗体工具箱-多页、列表框-右键属性点击page1修改caption为资产类-点击空白列表框修改rowsource 为box1依次类推3. 业务表-查看代码 Worksheet beforedoubleclickPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Row > 3 And Target.Column = 6 Then UserForm1.ShowSheets("初始化").Range("m3") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowEnd IfEnd Sub备查代码:Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Row > 3 And Target.Column = 6 Then UserForm1.ShowSheets("初始化").Range("c2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 7 ThenUserForm2.ShowSheets("初始化").Range("f2") = ActiveCellElseIf Target.Row > 3 And Target.Column = 8 ThenUserForm3.ShowEnd IfEnd Sub4.右键点击Userform1查看代码 Listbox1 dbclickPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox2.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox3.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox4.ListIndex, 0)Unload MeEnd SubPrivate Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 6) = ListBox1.List(ListBox5.ListIndex, 0)Unload MeEnd Sub见上图5.插入用户窗体右键点击userform2 worksheet dblclickPrivate Sub ListBox1_DblClick(ByVal Cancel AsMSForms.ReturnBoolean)ActiveSheet.Cells(ActiveCell.Row, 7) = ListBox1.List(ListBox1.ListIndex, 0)Unload MeEnd SubUserform initializePrivate Sub UserForm_Initialize()Application.ScreenUpdating = FalseWith Sheets("初始化")Sheets("科目表").Range("h2:i10000").AdvancedFilterAction:=xlFilterCopy, _CriteriaRange:=.Range("m2:m3"), CopyToRange:=.Range("n2"), Unique:=TrueEnd WithEnd Sub七.单位汇总(sumif),单条件汇总=SUMIF(业务!$D$4:$D$1000,单位汇总!$A15,业务!I$4:I$10000)Sub 单位汇总1()Application.ScreenUpdating = Falserange("a1:i10000").ClearCells(3, 2) = "指标数"Cells(3, 3) = "拨款数"Cells(3, 4) = "余额"Cells(1, 7) = "单位"Cells(3, 7) = "单位"Cells(3, 8) = "指标数"Cells(3, 9) = "拨款数"Sheets("业务").Range("D3:D10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("A3"), Unique:=TrueSheets("业务").Range("A3:J10000").AdvancedFilterAction:=xlFilterCopy, _CriteriaRange:=Range("G1:G2"), CopyToRange:=Range("G3:I3"), Unique:=False Dim i As LongDim irow As Longirow = Range("a3").End(xlDown).RowFor i = 4 To irowCells(i, 2) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("h4:h10000"))Cells(i, 3) = Application.WorksheetFunction.SumIf(Range("g4:g10000"), Cells(i, 1), Range("i4:i10000"))Cells(i, 4) = VBA.Round(Cells(i, 2) - Cells(i, 3), 2)Next iRange("g1:i10000").ClearApplication.ScreenUpdating = TrueEnd Sub八、多条件汇总(连接、sumif)连接=k4&l4&m4&n4Vba:Sub 多条件汇总()Application.ScreenUpdating = FalseRange("a1:p10000").ClearSheets("业务").Range("D3:G10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("B3:E3"), Unique:=True Sheets("业务").Range("D3:I10000").AdvancedFilterAction:=xlFilterCopy, _CopyToRange:=Range("K3:P3"), Unique:=False Dim j As LongDim jrow As Longjrow = Range("k3").End(xlDown).RowFor j = 4 To jrowCells(j, 10) = Cells(j, 11) & Cells(j, 12) & Cells(j, 13) & Cells(j, 14)Next jDim i As LongDim irow As Longirow = Range("b3").End(xlDown).RowFor i = 4 To irowCells(3, 6) = "指标数"Cells(3, 7) = "拨款数"Cells(3, 8) = "余额"Cells(i, 1) = Cells(i, 2) & Cells(i, 3) & Cells(i, 4) & Cells(i, 5)Cells(i, 6) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("o4:o10000"))Cells(i, 7) = Application.WorksheetFunction.SumIf(Range("j4:j10000"), Cells(i, 1), Range("p4:p10000"))Cells(i, 8) = VBA.Round(Cells(i, 6) - Cells(i, 7), 2)Next iRange("i3:p10000").ClearRange("a1:a10000").Delete Application.ScreenUpdating = True End Sub九、多条件汇总、adoSub 多条件汇总()Application.ScreenUpdating = False Dim i As IntegerDim strsql As StringDim cnn As New ADODB.Connection Dim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标,sum(拨款数) as 预算股拨款 from[业务$a3:J10000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("多条件汇总").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("多条件汇总").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingEnd Sub 十、对账Sub 预算股()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 单位,类,款,项, sum(指标数) as 预算股指标 from[预算股$a3:m50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项" rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("对帐").Cells(3, i + 10) = rst1.Fields(i - 1).NameNext iSheets("对帐").Range("k4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = " SELECT 单位,类,款,项, sum(指标数) as 专业股指标 from[专业股$a3:j50000] where 归口='" & Range("h2").Value & "'and 月<=" & Range("i2").Value & " GROUP BY 单位,类,款,项"rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("对帐").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("对帐").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = Nothings = Application.WorksheetFunction.CountA(Range("k4 :k10000")) + 4Range("T4:W10000").SelectSelection.CopyRange("K" & s).SelectActiveSheet.PasteRange("X4:X10000").SelectSelection.CopyRange("P" & s).SelectActiveSheet.PasteRange("X3").SelectSelection.CopyRange("P3").SelectActiveSheet.PasteDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款,项, sum(预算股指标) as 预算股指标 ,sum(专业股指标) as 专业股指标from[对帐$k3:p50000] GROUP BY 单位,类,款,项" rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("对帐").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("对帐").Range("a4").CopyFromRecordsetrstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = True End Sub十一、sql筛选Sub 筛选()Application.ScreenUpdating = False Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT distinct 单位,类,款,项 from[专业$a3:h10000]"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("筛选").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("筛选").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd Sub十二、sql连接、交叉汇总Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 股,月,归口,单位,类,款,项,指标数 from [专业$a3:h10000] union ALL SELECT 股,月,归口,单位,类,款,项,指标数from [预算$a3:l10000] order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(1, i + 19) = rst.Fields(i - 1).NameNext iSheets("连接").Range("t2").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 汇总()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " transform sum(指标数) SELECT 单位,类,款,项 from [连接$t1:aa10000] where 归口= '" & Range("h2").Value & "' and 月=" & Range("i2").Value & " group by 单位,类,款,项pivot 股"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("连接").Cells(3, i) = rst.Fields(i - 1).NameNext iSheets("连接").Range("a4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingEnd Sub十三、select语句总结1、筛选(false ---筛选全部)Select 列表名称1,列表名称2,…….列表名称n from [表$区域]或者Select * from [表$区域]2、筛选唯一的数据Select distinct 列表名称1,列表名称2,…….列表名称n from [表$区域]3、分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Group by列表名称1,列表名称2,…….列表名称n4、条件分类汇总Select 列表名称1,列表名称2,…….列表名称n,sum(a) as a from [表$区域]Where 归口=’”& range(“”).value &”’ and 月=”& range(“”).value &” Group by列表名称1,列表名称2,…….列表名称n5、交叉汇总Transform sum() select 列名称1,……列名称n from[表$区域] group by 列名称1,…..列名称n pivot 交叉事项6、连接Select 列名称1表$区域] unionall Select 列名称1n from[表$区域] order by 列名称 desc十四、报表(有层次)连接Transform sum(指标数),pivot 股按单位、类、款进行汇总按单位、类进行汇总按单位进行汇总连接以上四个表的内容,并按单位、类、款、项进行排序,其中单位按降序排序1、整体写代码Sub 报表()Application.ScreenUpdating = FalseDim i As IntegerDim strsql1 As StringDim cnn1 As New ADODB.ConnectionDim rst1 As New ADODB.Recordsetcnn1.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql1 = " SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 股,月,归口,单位,类,款,项 union all SELECT 股,月,归口,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 股,月,归口,单位,类,款,项 order by 股 desc"rst1.Open strsql1, cnn1For i = 1 To rst1.Fields.CountSheets("报表").Cells(3, i + 9) = rst1.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rst1rst1.Closecnn1.CloseSet rst1 = NothingSet cnn1 = NothingDim strsql2 As StringDim cnn2 As New ADODB.ConnectionDim rst2 As New ADODB.Recordsetcnn2.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql2 = "transform sum(指标数) SELECT 单位,类,款,项 from[报表$j3:q10000] where 归口='" & Range("g2") _.Value & "' and 月<=" & Range("h2").Value & "group by 单位,类,款,项 order by 单位 desc pivot 股 "rst2.Open strsql2, cnn2For i = 1 To rst2.Fields.CountSheets("报表").Cells(3, i + 19) = rst2.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rst2rst2.Closecnn2.CloseSet rst2 = NothingSet cnn2 = NothingDim strsql3 As StringDim cnn3 As New ADODB.ConnectionDim rst3 As New ADODB.Recordsetcnn3.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql3 = "SELECT 单位,类,款,sum(专业股) as 专业股,sum(预算股) as 预算股 from[报表$t3:y10000] group by 单位,类,款 order by 单位 desc"rst3.Open strsql3, cnn3For i = 1 To rst3.Fields.CountSheets("报表").Cells(3, i + 26) = rst3.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rst3rst3.Closecnn3.CloseSet rst3 = NothingSet cnn3 = NothingDim strsql4 As StringDim cnn4 As New ADODB.ConnectionDim rst4 As New ADODB.Recordsetcnn4.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql4 = "SELECT 单位,类,sum(专业股) as 专业group by 单位,类 order by 单位 desc"rst4.Open strsql4, cnn4For i = 1 To rst4.Fields.CountSheets("报表").Cells(3, i + 32) = rst4.Fields(i - 1).NameNext iSheets("报表").Range("ag4").CopyFromRecordset rst4rst4.Closecnn4.CloseSet rst4 = NothingSet cnn4 = NothingDim strsql5 As StringDim cnn5 As New ADODB.ConnectionDim rst5 As New ADODB.Recordsetcnn5.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql5 = "SELECT 单位,sum(专业股) as 专业group by 单位 order by 单位 desc"rst5.Open strsql5, cnn5For i = 1 To rst5.Fields.CountSheets("报表").Cells(3, i + 37) = rst5.Fields(i - 1).NameNext iSheets("报表").Range("al4").CopyFromRecordset rst5rst5.Closecnn5.CloseSet rst5 = NothingSet cnn5 = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightRange("ad3") = "项"Columns("Aj:Ak").SelectSelection.Insert Shift:=xlToRightRange("aj3") = "款"Range("ak3") = "项"Columns("Ap:Ar").SelectSelection.Insert Shift:=xlToRightRange("ap3") = "类"Range("aq3") = "款"Range("ar3") = "项"Dim strsql6 As StringDim cnn6 As New ADODB.ConnectionDim rst6 As New ADODB.Recordsetcnn6.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql6 = " SELECT 单位,类,款,项,专业股,预算股from [报表$t3:y10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$aa3:af10000] union all SELECT 单位,类,款,项,专业股,预算股from [报表$ah3:am10000] union all SELECT 单位,类,款,项,专业股,预算股 from [报表$ao3:at10000] order by 单位 desc,类,款,项 "rst6.Open strsql6, cnn6For i = 1 To rst6.Fields.CountSheets("报表").Cells(3, i) = rst6.Fields(i - 1).NameNext iSheets("报表").Range("a4").CopyFromRecordset rst6rst6.Closecnn6.CloseSet rst6 = NothingSet cnn6 = NothingRange("j1:au10000").ClearContentsDim p As LongDim prow As Longprow = Range("a3").End(xlDown).RowFor p = 4 To prowRange("g3") = "金额"Cells(p, 7) = VBA.Round(Cells(p, 6) - Cells(p, 5), 2)Next pApplication.ScreenUpdating = TrueEnd Sub2、分开写代码:Sub 连接()Application.ScreenUpdating = FalseDim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 月,归口,股,单位,类,款,项,sum(指标数) as 指标数 from[专业$a3:h10000] group by 月,归口,股,单位,类,款,项 union all SELECT 月, 归口,股,单位,类,款,项,sum(指标数) as 指标数 from[预算$a3:l10000] group by 月, 归口,股,单位,类,款,项 order by 股 desc"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 9) = rst.Fields(i - 1).NameNext iSheets("报表").Range("j4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 项()Application.ScreenUpdating = FalseCall 连接Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = "transform sum(指标数) SELECT 单位,类,款,项 from [报表$j3:q10000] where 归口= '" &Range("g2").Value & "' and 月<=" & Range("h2").Value & " group by 单位,类,款,项pivot 股"rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 19) = rst.Fields(i - 1).NameNext iSheets("报表").Range("t4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingApplication.ScreenUpdating = TrueEnd SubSub 款()Application.ScreenUpdating = FalseCall 项Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类,款, sum(专业股) as 专业股, sum(预算股) as 预算股from [报表$t3:y10000] group by 单位,类,款 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 26) = rst.Fields(i - 1).NameNext iSheets("报表").Range("aa4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AD:AD").SelectSelection.Insert Shift:=xlToRightCells(3, 30) = "项"Application.ScreenUpdating = TrueEnd SubSub 类()Application.ScreenUpdating = FalseCall 款Dim i As IntegerDim strsql As StringDim cnn As New ADODB.ConnectionDim rst As New ADODB.Recordsetcnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;Hdr=Yes';Data Source=" & ThisWorkbook.FullNamestrsql = " SELECT 单位,类, sum(专业股) as 专业股, sum(预算股) as 预算股from [报表$aa3:af10000] group by 单位,类 "rst.Open strsql, cnnFor i = 1 To rst.Fields.CountSheets("报表").Cells(3, i + 33) = rst.Fields(i - 1).NameNext iSheets("报表").Range("ah4").CopyFromRecordset rstrst.Closecnn.CloseSet rst = NothingSet cnn = NothingColumns("AJ:AJ").SelectSelection.Insert Shift:=xlToRightColumns("AK:AK").SelectSelection.Insert Shift:=xlToRightRange("AJ3").SelectActiveCell.FormulaR1C1 = "款"Range("AK3").SelectActiveCell.FormulaR1C1 = "项"Application.ScreenUpdating = TrueEnd SubSub 单位()Application.ScreenUpdating = FalseCall 类Dim i As Integer。
VBA常用代码分类介绍
VBA常用代码分类介绍一、编写VBA代码1、定义变量定义变量的语法:Dim 变量名 as 数据类型变量名:变量的名称可以是字母、数字或其组合,但必须以字母开头,最长不超过40个字符;数据类型:包括Byte、Integer、Long、Currency、Single、Double、Date、String、Boolean、Object、Variant等几种数据类型。
2、定义常量定义常量的语法:Const 常量名 = 字符串常量名:只能是字母、数字或其组合,但必须以字母开头,最长不超过40个字符;字符串:可以是String类型的文本、Boolean类型的true和false、整形数值、单精度数值、双精度数值等;3、编写循环语句循环语句用于重复执行相同的操作,循环语句包括For … Next、Do While…Loop、Do…Loop While以及Do Until…Loop。
For … NextFor … Next语句的语法结构为:For 变量=起始值 to 终止值[Step 步长]Do While…LoopDo While…Loop语句的语法结构为:Do While 条件循环体……… LoopDo…Loop WhileDo…Loop While语句的语法结构为:Do 循环体……… Loop While 条件Do Until…LoopDo Until…Loop语句的语法结构为:Do Until 条件循环体……… Loop二、数据结构1、数组数组是一种结构,其中存储着一系列值,每个值称为一个元素。
VBA 支持一维数组和多维数组。
定义数组的语法结构为:Dim 数组名(维度) as 数据类型2、集合集合类似于数组,不同之处在于集合中元素的个数不是固定的,而是可以随着应用程序的运行而变化。
VBA代码汇总范文
VBA代码汇总范文VBA(Visual Basic for Applications)是一种用于自动化任务和宏编程的编程语言。
它是Microsoft Office套件的一部分,用于自动执行重复的任务和增强办公软件的功能。
以下是一些常用的VBA代码汇总,供参考和学习:1.向单元格中填入数值或文本:```vbaRange("A1").Value = 10Range("A2").Value = "Hello, world!"```2.循环遍历单元格:```vbaFor Each cell In Range("A1:A10")'逐个处理单元格MsgBox cell.ValueNext cell```3.创建新的工作表:```vbaSet ws = Sheets.Add = "New Sheet"```4.删除工作表:```vbaSheets("Sheet1").Delete```5.自动筛选数据:```vbaActiveSheet.Range("A1:D10").AutoFilter Field:=1, Criteria1:="Apple"```6.打开文件对话框并选择文件:```vbaWith Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False.ShowIf .SelectedItems.Count > 0 ThenMsgBox .SelectedItems(1)MsgBox "No file selected."End IfEnd With```7.在单元格中执行计算:```vbaRange("C1").Formula = "=SUM(A1:B1)"```8.隐藏行或列:```vbaColumns("A").Hidden = TrueRows("1:5").Hidden = True```9.在单元格中显示当前日期和时间:```vbaRange("A1").Value = Now```10.复制和粘贴单元格:Range("A1").Copy Destination:=Range("B1")```11.保存文件:```vbaActiveWorkbook.SaveAs "C:\MyFolder\MyFile.xlsx"```12.打开网页并获取内容:```vbaSet objHTTP = CreateObject("MSXML2.ServerXMLHTTP") objHTTP.Open "GET", URL, FalseobjHTTP.SendMsgBox objHTTP.ResponseText```13.设置单元格格式:```vbaRange("A1").NumberFormat = "0.00"```14.创建图表:Set chartObj = ActiveSheet.Shapes.AddChart2(251, xlColumnClustered)chartObj.SelectActiveChart.SetSourceData Source:=Range("A1:B5")```15.在窗口中显示消息框:```vbaMsgBox "Hello, world!"```以上只是一些常见的VBA代码示例,可以根据具体需求进行修改和扩展。
VBA编程中的常用代码
VBA编程中的常用代码VBA(Visual Basic for Applications)是一种编程语言,用于在Microsoft Office应用程序中编写自定义宏和功能。
以下是一些在VBA 编程中常常用到的代码片段和技巧。
1. Excel VBA:打开和关闭工作簿这段代码演示了如何在Excel VBA中打开和关闭一个工作簿。
```vbaSub OpenAndCloseWorkbookDim wb As WorkbookSet wb = Workbooks.Open("C:\Path\To\Your\File.xlsx")'在这里执行你的代码wb.Close SaveChanges:=FalseEnd Sub```2. Excel VBA:遍历工作表下面的代码展示了如何遍历一个Excel工作簿中的所有工作表。
```vbaSub LoopThroughWorksheetsDim ws As WorksheetFor Each ws In ThisWorkbook.Worksheets'在这里执行你的代码Next wsEnd Sub```3. Excel VBA:在工作表中查找特定值以下代码展示了如何在一个工作表中查找特定值并返回它的位置。
```vbaFunction FindValue(ByRef rng As Range, ByVal searchValue As String) As RangeDim cell As RangeSet FindValue = NothingFor Each cell In rngIf cell.Value = searchValue ThenSet FindValue = cellExit FunctionEnd IfNext cellEnd Function```4. Word VBA:插入文本以下代码演示了如何在Word文档中插入文本。
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 Integerxuhao = 1Range("b2").SelectDo While Selection <> ""If Selection <> 0 ThenActiveCell.Previous.Value = xuhaoxuhao = xuhao + 1End IfActiveCell.Offset(1, 0).Range("a1").SelectLoop004.求教自定义函数查询了一些自定义函数的例子都是单变量的。
自定义函数能否建立“(As Range) As Interger”的函数,应该可以的,请各位大师赐教!请以“∑x2”为例,万分感谢!(该用"For Each ...Next",就是还不知道如何引用Range中的每个值,请高手指点。
VBA常见代码分析
VBA常见代码分析概述VBA(Visual Basic for Applications)是一种Microsoft Office应用程序中常用的宏编程语言。
在使用VBA过程中,有一些常见的代码模式和用法,本文将对这些常见的VBA代码进行分析和讨论。
常见代码分析1. 循环代码在VBA中,循环是一种常见的代码结构,用于重复执行一段代码块。
常见的循环结构有以下几种:- For循环:通过指定初始值、结束值和每次迭代的增量,可以让代码块重复执行一定次数。
For循环:通过指定初始值、结束值和每次迭代的增量,可以让代码块重复执行一定次数。
- Do循环:通过在循环开始和结束之间设置条件判断语句,可以让代码块重复执行直到条件不满足为止。
Do循环:通过在循环开始和结束之间设置条件判断语句,可以让代码块重复执行直到条件不满足为止。
- While循环:通过在循环开始之前和循环体内设置条件判断语句,可以让代码块重复执行直到条件不满足为止。
While循环:通过在循环开始之前和循环体内设置条件判断语句,可以让代码块重复执行直到条件不满足为止。
- Foreach循环:用于遍历集合或数组中的元素,让代码块对每个元素执行一次。
Foreach循环:用于遍历集合或数组中的元素,让代码块对每个元素执行一次。
2. 条件语句在VBA中使用条件语句可以根据条件的成立与否执行相应的代码块。
常见的条件语句有以下几种:- If语句:用于根据条件的成立与否执行不同的代码块。
If语句:用于根据条件的成立与否执行不同的代码块。
- Select Case语句:用于根据变量的值执行不同的代码块。
Select Case语句:用于根据变量的值执行不同的代码块。
3. 错误处理在VBA中,处理错误是重要的一部分。
以下是一些常见的错误处理的方式:- On Error语句:用于定义出现错误时要采取的动作,可以结合`Resume`语句实现错误的处理和跳转。
On Error语句:用于定义出现错误时要采取的动作,可以结合`Resume`语句实现错误的处理和跳转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(12) ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数
(13) '返回活动工作薄的名称
(14) ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称
(1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text '字符串不区分大小写 Option Base 1 '指定数组的第一个下标为1
(32) ActiveCell.CurrentRegion.Select 或Range(ActiveCell.End (xlUp),ActiveCell.End(xlDown)).Select '选择当前活动单元格所包含 的范围,上下左右无空行
(33) Cells.Select ‘选定当前工作表的所有单元格
(52) Range(“Data”).Count ‘单元格区域Data中的单元格数 Range(“Data”). Columns.Count ‘单元格区域Data中的列数 Range(“Data”). Rows.Count ‘单元格区域Data中的行数
(53) Selection.Columns.Count ‘ 当前选中的单元格区域中的列数 Selection.Rows.Count ‘当前选中的 单元格区域中的行数
(47) Range(“A1”).Offset(RowOffset:=4,ColumnOffset:=5) 或 Range(“ A1”).Offset(4,5) ‘指定单元格F5
(48) Range(“B3”).Resize(RowSize:=11,ColumnSize:=3) Rnae (“B3”).Resize(11,3) ‘创建B3:D13区域
(15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小
(16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平 铺方式排列
(17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化 工作表
(31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在 页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.LeftFooter=erName ‘将用 户名放置在活动工作表的页脚 单元格/单元格区域
(18) edRange.Rows.Count ‘当前工作表中已使用的行数
(19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性)
(20) Sheets(Sheet1).Name= “Sum” '将Sheet1命名为Sum
(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一个新工作 表在第一工作表前
(8) Workbooks.Add() '创建一个新的工作簿
(9) Workbooks(“book1.xls”).Activate '激活名为book1的工作簿
(10) ThisWorkbook.Save '保存工作簿
(11) ThisWorkbook.close '关闭当前工作簿
(54) Selection.Areas.Count ‘选中的单元格区域所包含 的区域数
(55) edRange.Row ‘获取单元格区域中使用的第 一行的行号
(56) Rng.Column ‘获取单元格区域Rng左上角单元格所在列编号
(57) ActiveSheet.Cells.SpecialCells (xlCellTypeAllFormatConditions) ‘在活动工作表中返回所有符合条 件格式设置的区域
(38) Range(“A1”).Copy Range(“B1”) '复制单元格A1,粘贴到单元格B1 中 Range(“A1:D8”).Copy Range(“F1”) '将单元格区域复制到单元 格F1开始的区域中 Range(“A1:D8”).Cut Range(“F1”) '剪切单元格 区域A1至D8,复制到单元格F1开始的区域中 Range (“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”) ' 复制包含A1的单元格区域到工作表2中以A1起始的单元格区域中注: CurrentRegion属性等价于定位命令,由一个矩形单元格块组成,周围是 一个或多个空行或列 本示例选定工作表 Sheet1 上的当前区域。 Worksheets("Sheet1").Activate ActiveCell.CurrentRegion.Select 本示例假定在工作表 Sheet1 中有一个包含标题行的表。本示例选定该 表,但不选定标题行。运行本示例之前,活动单元格必须处于该表中。 Set tbl = ActiveCell.CurrentRegion tbl.Offset(1, 0).Resize (tbl.Rows.Count - 1, _ tbl.Columns.Count).Select
(42) GetAddress=Replace(Hyperlinkcell.Hyperlinks (1).Address,mailto:,””) ‘返回单元格中超级链接的地址并赋值
(43) TextColor=Range(“A1”).Font.ColorIndex ‘检查单元格A1的文本颜 色并返回颜色索引 Range(“A1”).Interior.ColorIndex ‘获取单元格A1 背景色
(27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示
(28) edRange.FormatConditions.Delete ‘删除当前工作表 中所有的条件格式
(44) cells.count ‘返回当前工作表的单元格数
(45) Selection.Range(“E4”).Select ‘激活当前活动单元格下方3右4列 的单元格
(46) Cells.Item(5,”C”) ‘引单元格C5 Cells.Item(5,3) ‘引 单元格C5
(60) Names(“book”).Delete ‘删除名称
(61) Names.Add Name:=“ContentList”,_ RefersTo:=“=OFFSET(Sheet1!A2,0,0,COUNTA(Sheet2!$A:$A))” ‘动态命名列
(29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接
(30) ActiveSheet.PageSetup.Orientation=xlLandscape 或 ActiveSheet.PageSetup.Orientation=2 '将页面设置更改为横向
(49) Range(“Data”).Resize(,2) ‘将Data区域扩充2列
(50) Union(Range(“Data1”),Range(“Data2”)) ‘将Data1和Data2区域 连接
(51) Intersect(Range(“Data1”),Range(“Data2”)) ‘返回Data1和 Data2区域的交叉区域
(2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息
(3) On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置
(4) On Error GoTo 0 '恢复正常的错误提示
(5) Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示
(6) Application.ScreenUpdating=False '关闭屏幕刷新 Application.ScreenUpdating=True '打开屏幕刷新
(7) Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏运行的功能 工作簿
(36) ActiveCell.Offset(1,0).Select '活动单元格下移一行,同理,可下 移一列
(37) Range(“A1”).Offset(ColumnOffset:=1)或Range(“A1”).Offset (,1) ‘偏移一列 Range(“A1”).Offset(Rowoffset:=-1)或Range(“A1 ”).Offset(-1) ‘向上偏移一行
(34) Range(“A1”).ClearContents '清除活动工作表上单元格A1中的内容 Selection.ClearContents '清除选定区域内容 Range (“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包 '清除工作表中所有单元格的内容
(24) Sheets(“sheet1”).Delete或 Sheets(1).Delete '删除工作表1
(25) ActiveWorkbook.Sheets(i).Name '获取工作表i的名称
(26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines '切换工作表中的网格线显示,这种方 法也可以用在其它方面进行相互切换,即相当于开关按钮