皮皮网

【开源约课系统源码】【asp源码设置文件权限】【源码为什么不能给】vbaexcel源码

2024-11-20 20:29:31 来源:keil agsi 源码

1.Excelvba删除工作表的源码代码和实例
2.ExcelVBA设置图表动态数据源实例教程
3.excelVBA代码怎么在单元格中输入数组公式
4.实现分列的两段excelvba分列代码
5.Excel获取指定路径的文件名vba代码
6.如何利用ExcelVBA解决棘手的数据提取问题

vbaexcel源码

Excelvba删除工作表的代码和实例

       文章介绍excel中vba删除工作表的方法,并通过两个案例来具体理解vba代码。源码

       上一篇文章我们介绍了使用excel的源码基础操作来删除工作表。本文给大家分享vba删除工作表的源码代码写法。

       vba删除工作表案例一:删除一张表以外的源码所有工作表

       如下图所示:这一个excel工作薄包含多张工作表,如何使用vba删除 “IT部落窝论坛”以外的源码开源约课系统源码工作表呢?右边截图就是使用VBA代码删除后的效果,整个工作薄就只剩下一张工作表:IT部落窝论坛。源码

       下面是源码具体的vba删除工作表操作步骤:

       第一,按下ALT+F,源码打开VBE编辑器。源码

       第二,源码单击菜单:插入——模块,源码插入一个模块,源码并复制下面的源码代码到代码输入区:

       Sub vba删除工作表()

       Application.DisplayAlerts = False

       Dim sht As Object

       For Each sht In ThisWorkbook.Worksheets

       If sht.Name > "

       IT部落窝论坛" Then

       sht.Delete

       End If

       Next

       Application.DisplayAlerts = True

       End Sub

       第三,单击上面截图所示的源码工具栏上面那个绿色的“运行”命令,excel就会自动删除“

       IT部落窝论坛”以外的所有工作表。

       从两篇删除工作表方法的文章对比,我们可以清楚的看到,如果工作表很多的情况,使用VBA删除工作表,效率会更加高效。而且代码可以随时调用运行,减少手工操作。asp源码设置文件权限

       vba删除工作表案例二:逐一提示删除工作表

       录制代码的方法参考上面介绍,下面这一段代码运行的结果是出现一个提示框,要求输入工作表名称,如果输入的工作表名正确,excel就删除对应的工作表,如果输入的工作表不正确,excel返回消息框提示:您要删除的工作表不存在。

       Sub vba删除工作表()

       Dim ws As Worksheet

       Dim str As String

       str = Application.InputBox(prompt:="输入需要删除的工作表:", Title:="删除工作表", Default:="sheet1", Type:=2)

       On Error GoTo back

       Set ws = Worksheets(str)

       Application.DisplayAlerts = False

       ws.Delete

       Application.DisplayAlerts = True

       Exit Sub

       back:

       MsgBox "您要删除的工作表不存在!"

       End Sub

       上面这段vba删除工作表的方法,如果需要经常使用,我们可以保存为宏,在需要的时候按快捷键ALT+F8调用,只要输入工作表名称即可删除工作表。

ExcelVBA设置图表动态数据源实例教程

       Excel图表的数据源通常为一个连续区域,但有时会遇到图表数据源区域不连续,且需要动态改变的情况。例如下面的某公司人员基本情况汇总表,B列为部门名称,C至S列分别为“性别”、“年龄”、“学历”、“职称”等不同类别数据的源码为什么不能给汇总,如果将这些数据同时显示在一个图表中,显然不便观察和比较数据,这时可以用VBA来动态改变数据源,单独对各个类别进行显示。

       具体的方法是:先在表格中创建一个下拉列表,然后通过下拉列表选择不同的系列,通过VBA代码改变图表数据区域,让图表中的数据随之改变。下面以在Excel 中绘制柱形图为例说明如下:

       1.设置下拉列表。设置下拉列表的方法有很多,这里用数据有效性来设置。选择某个单元格,如T,单击菜单“数据→有效性→设置→序列”,在“来源”下输入“性别,年龄,学历,职称”(不含引号)后确定,这样就在T单元格中通过数据有效性设置了一个下拉列表。

       2.插入图表。选择B3:D区域,即“部门”和第一个类别所在区域“性别”,单击菜单“插入→图表→柱形图→簇状柱形图”,单击“完成”插入一个包含“男”、“女”两个系列的下拉扣费系统源码柱形图。

       3.输入VBA代码。按Alt+F,打开VBA编辑器,在代码窗口中粘贴下列代码:

       Private Sub Worksheet_Change(ByVal Target As Range)

       If Target.Address = $T$ Then

       Dim RngStr As String

       Select Case Target.Value

       Case 性别

       RngStr = b3:b,c3:d

       Case 年龄

       RngStr = b3:b,e3:i

       Case 学历

       RngStr = b3:b,j3:n

       Case 职称

       RngStr = b3:b,o3:s

       End Select

       ChartObjects(图表 1).Chart.SetSourceData Source:=Range(RngStr)

       End If

       End Sub

       说明:改变T单元格中的内容时,图表的数据区域随之改变。本例中的图表名称为“图表 1”,需根据实际进行更改。查看图表名称的方法是:

       Excel :按住Ctrl键单击图表,在名称框中即可看到所选图表的名称。

       Excel /:选择图表,在“图表工具-布局”选项卡的“属性”组中即可看到图表名称。

       关闭VBA编辑器,返回Excel工作表界面,选择T单元格中的不同系列即可在图表显示相应类别的数据。

excelVBA代码怎么在单元格中输入数组公式

Q我想使用VBA代码在单元格中输入数组公式,如何实现?

       A:Range对象提供了一个FormulaArray属性,可以用来设置或者返回单元格区域中的数组公式,也就是说,在工作表单元格中输入完后需要按Ctrl+Shift+Enter组合键才能最终完成的公式。

       如下所示,要求工作表Sheet2中所列出的水果总的销售金额,即分别使用各种水果的自动拾取源码单价乘以各自的销量后的和。

       代码:

       Sheet2.Range(“C7”).FormulaArray= “=SUM(B2:B5*C2:C5)”

       在单元格C7中输入数组公式并计算结果,如下所示。

       上面演示了VBA代码在单个单元格中输入数组公式,如果要在多个单元格中输入数组公式呢?如下面的代码所示:

       Sheet3.Range(“B1:B6”).FormulaArray= “=A1:A6=”” Excel”””

       判断工作表Sheet3的单元格区域A1:A6中的值是否为“ Excel”,如果是则返回TRUE,否则为FALSE。运行代码后的结果如下所示。

       如果需要输入的数组公式在每个单元格中都不同呢?下面以colinlegg.wordpress.com中提供的示例来说明。

       如下所示,在列C中输入列E中的值等于其对应的列A单元格中的值或者列F中的值等于其对应的列B单元格中的值时列G中的最大值。

       下面的四段代码均可实现。

代码1

       Sub test()

       Dim r As Long

       For r = 2 To 5

       Sheet1.Cells(r, 3).FormulaArray = _

       “=MAX(IF((($E$2:$E$1 =A”1;2;3;4;5}*7+{ 1,2,3,4,5,6,7}-1),””””,”1;2;3;4;5}*7+{ 1,2,3,4,5,6,7}-1)”

       With ActiveSheet.Range(“E2:K7”)

       .FormulaArray = theFormulaPart1

       .Replace “X_X_X())”,theFormulaPart2

       .NumberFormat = “m””月””d””日”””

       End With

       End Sub

       上述程序将在单元格区域E2:K7中生成当月的日历。

       正如本文一开始所的,FormulaArray属性还可以返回单元格中的公式。

       如果想要从单个单元格中返回公式,那么无论单元格中是否包含数组公式,Formula属性和FormulaArray属性都会返回相同的结果。然而,Formula属性和FormulaArray属性应用于连续的、多单元格区域时返回不同的结果。

       如果单元格区域中含有数组公式,即多个单元格中为一个数组公式,那么FormulaArray属性返回该公式。

       如果单元格区域不是数组区域但所有单元格都包含相同的公式,那么FormulaArray属性也返回该通用公式。

       如果单元格区域不是数组区域且包含的公式不相同,那么FormulaArray属性返回Null。

       在上述所有三种情形中,Formula属性返回Variant型数组,数组中的每个元素表示区域中每个单元格的公式。

实现分列的两段excelvba分列代码

       excel vba 分列多用于一般常规的分列操作完成不了的情况。

       Excel内置的分列,仅用于有规律的数据进行分列。比如下面的截图,这样的数据源,分列就可以考虑使用excel vba 分列完成。

       A列数据源,要将汉字和数字分列后的效果如B:D列。

       下面是两段excel vba 分列的代码,案例和答案来自论坛版主。

       第一段excel vba 分列的代码:

       Sub vba分列()

       Dim oJs As Object, rng As Range

       Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"

       oJs.eval "function gets(str){ return str.replace(/(\d+)/,’ $1 ‘)}"

       For Each rng In Range("A2", [A].End(3))

       rng(1, 2).Resize(1, 3) = Split(oJs.codeobject.gets(rng.Value), " ")

       Next

       End Sub

       第二段excel vba 分列的代码:

       Sub vba分列()

       Dim arr, i%, brr(), sma As Object

       arr = Range("a2:a" & Cells(Rows.Count, 1).End(3).Row)

       ReDim brr(1 To UBound(arr), 1 To 3)

       With CreateObject("vbscript.regexp")

       .Global = True

       .Pattern = "([^\d]+)(\d+)(.+)"

       For i = 1 To UBound(arr)

       Set sma = .Execute(arr(i, 1))(0).submatches

       brr(i, 1) = sma(0)

       brr(i, 2) = sma(1)

       brr(i, 3) = sma(2)

       Next

       End With

       Range("b2", Cells(Rows.Count, Columns.Count)).ClearComments

       Range("b2").Resize(UBound(brr), UBound(brr, 2)).NumberFormat = "@"

       Range("b2").Resize(UBound(brr), UBound(brr, 2)) = brr

       Set sma = Nothing

       End Sub

       代码使用方法,在excel中,按下ALT+F,打开VBE编辑器,单击插入——模块,复制上面任意一段代码,按F5键运行即可完成分列。

Excel获取指定路径的文件名vba代码

       在Excel VBA中,如果需要Excel获取指定路径的文件名以方便用户的操作体验,可通过VBAExcel获取指定路径的文件名。Excel可通过VBA宏Excel获取指定路径的文件名。

       Excel获取指定路径的文件名的方法:

       首先按“Alt+F”组合键,Excel打开代码编辑器,单击“插入”菜单-“模块”,双击插入的模块,在右侧的代码窗口中输入:

       Sub Excel_Partner()

       Dim myFilename As String, myPath As String

       ChDir Application.DefaultFilePath ‘改变默认路径

       myPath = "C:\" ‘指定的任意路径

       SendKeys myPath & "{ TAB}" ‘将指定的任意路径发送到“打开”对话框

       myFilename = Application.GetOpenFilename

       Range("A1") = myFilename

       End Sub

       按F5运行键运行程序,Excel调用“打开”对话框,自动打开指定的路径。双击指定的文件,Excel获取指定路径的文件名。

       相关说明: 当输入法处于中文输入法状态时,将不能打开指定的路径。

如何利用ExcelVBA解决棘手的数据提取问题

       今天同事问了个我一个数据提取的问题。他的需求是这样的:

       他有1个工作簿,里面有个工作表。他希望把每个工作表里的第6行的b6:i6数据复制到一起,

       也就是说他要把工作表里的第6行,汇总在一起。比如这样:

       他说如果你没办法,那他只能手动来复制个工作表,提取这数据了。

       我想了下说,我用VBA编程试试。

       差不多分钟折腾,我把代码搞定了。

       Public Sub tiqu()’指定行遍历工作表提取

       Application.ScreenUpdating = False

       Dim LastRow As Integer

       Dim sh As Worksheet

       Set sh = Worksheets.Add ‘新建工作表

       Set sh = ActiveSheet’为当前工作表

       sh.Name = "sheet1"

       Sheets(3).Range("b5:i5").Copy Destination:=Sheets("sheet1").Range("b1") ‘表头

       Sheets(3).Range("a6:i6").Copy Destination:=Sheets("sheet1").Range("a2") ‘复制

       For i = 4 To Sheets.Count ‘遍历工作表

       LastRow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row ‘判定最后非空行

       Sheets(i).Range("a6:i6").Copy Destination:=Sheets("sheet1").Range("a" & LastRow).Offset(1, 0) ‘复制到特定非空行的下一行

       Next

       MsgBox "处理完毕"

       Application.ScreenUpdating = True

       End Sub

       他按alt+F,把代码贴入模块,点运行就行了。就是要他的结果。

       我来解释下我的思路原理:我的解决方案。遍历工作表,提取每个工作表的第6行,复制到sheet1里的A2开始,难点1是偏移,用offset。难点2,判断非空的最后一行,用en那个个工作表,1分钟内运行完。如果复制粘贴次,大家试下就知道要多久了,起码我肯定你的手已经废掉了,哈哈。

       哈哈,本贴结束.

ExcelVBAEndWith结构专为对象而生

       我们主要是和对象打交道,这包括各种各样的对象以及由这些对象组成的集合对象。我们来看看并学习Excel内部是如何处理对象的。

       我们先来录制一个宏。

       在Excel中,打开宏录制器,录制下面的操作:在工作表单元格A1中输入“Excel”,设置其字体为红色,单元格背景色为**。录制的代码如下:

       Sub 宏3()

       ‘

       ‘ 宏3 宏

       ‘

       ‘

       ActiveCell.FormulaR1C1 = “Excel”

       Range(“A1”).Select

       With Selection.Font

       .Color = -

       .TintAndShade = 0

       End With

       With Selection.Interior

       .Pattern = xlSolid

       .PatternColorIndex = xlAutomatic

       .Color =

       .TintAndShade = 0

       .PatternTintAndShade = 0

       End With

       End Sub

       观察代码,我们发现,宏录制器为设置字体和单元格背景的两段代码都使用了With … End With结构,这就是VBA为我们提供的处理对象的有效方法之一。

       在这里,宏录制器自动优化了代码,在With … End With结构中对同一个对象执行多项操作。当需要对某个对象执行多项操作时(例如,为同一对象的多个属性赋值),使用With … End With结构的代码比在每个语句中都显示地引用对象的代码要更快。

       在上一篇文章《Excel VBA解读():谈谈对象变量》中,我们展示了一个示例:在单元格区域A1:B2中输入文本“示例”,将字体加粗,字号大小调整为号,并将单元格背景设置为**。

       代码1:不使用对象变量

       Sub test()

       Worksheets(“Sheet1”).Range(“A1:B2”).Value= “示例”

       Worksheets(“Sheet1”).Range(“A1:B2”).Font.Bold = True

       Worksheets(“Sheet1”).Range(“A1:B2”).Font.Size =

       Worksheets(“Sheet1”).Range(“A1:B2”).Interior.Color =vbYellow

       End Sub

       代码2:使用对象变量

       Sub testUpdate()

       Dim rng As Range

       Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)

       rng.Value = “示例”

       rng.Font.Bold = True

       rng.Font.Size =

       rng.Interior.Color = vbYellow

       End Sub

       上述两段代码是我们已经学过的代码。现在,我们学习了With … End With结构,又可以将代码进行改写而获得相同的效果。

       代码3:使用With … End With结构(不使用对象变量)

       Sub test1()

       WithWorksheets(“Sheet1”).Range(“A1:B2”)

       .Value = “示例”

       .Font.Bold = True

       .Font.Size =

       .Interior.Color = vbYellow

       End With

       End Sub

       代码4:使用With … End With结构(使用对象变量)

       Sub testUpdate1()

       Dim rng As Range

       Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)

       With rng

       .Value = “示例”

       .Font.Bold = True

       .Font.Size =

       .Interior.Color = vbYellow

       End With

       End Sub

       实际上,我们还可以进一步深入,将相同的对象全部归于With … End With结构内,这样就可以得到下面的代码。

       代码5:完全使用With … End With结构

       Sub testUpdate2()

       Dim rng As Range

       Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)

       With rng

       .Value = “示例”

       With .Font

       .Bold = True

       .Size =

       End With

       .Interior.Color = vbYellow

       End With

       End Sub

       With … End With结构为我们提供了更高效的处理重复引用对象的方式,虽然难以理解一点,也更难阅读,但它确实能带来运行速度上的提高。