精华内容
下载资源
问答
  • 我常用到VBA的常规操作只在excel中,要用VBA控制ppt中的文本并贴入图片,着实让我思考了一段时间,但因此我也学习到不少,因有所得,记录在此作为学习输出并分享吧。定义变量:Public ppapp As PowerPoint.Appl...

    因为工作中,需要将excel中的内容复制粘贴到ppt中,再贴入与之对应的图片,统一的ppt模板不停地复制粘贴,实在是浪费时间,于是我才寻找一些可以自动化的方法。

    我常用到VBA的常规操作只在excel中,要用VBA控制ppt中的文本并贴入图片,着实让我思考了一段时间,但因此我也学习到不少,因有所得,记录在此作为学习输出并分享吧。

    定义变量:

    Public ppapp As PowerPoint.Application
    Public pppres As PowerPoint.presentation
    Public actfilename As Variant
    Public totalslide As Object
    Public Picpath As String

    因为为了方便自己看和修改,后续的宏我分成了几个部分,变量的定义我就选择公共变量。

    第一部分:

    actfilename = Application.GetOpenFilename("microsoft powerpoint-file(*.pptx),*.pptx") 
    Set ppapp = CreateObject("powerpoint.application") 
    ppapp.Visible = True
    ppapp.Activate
    Set pppres = ppapp.Presentations.Open(actfilename)

    GetOpenFilename: 显示标准的“打开”对话框,并获取用户文件名,不打开任何文件。获取的文件名用open打开,个人认为这样的结合会很灵活,看起来也很厉害(┑( ̄Д  ̄)┍)

    FileFilter 参数由文件筛选字符串对以及后跟的 MS-DOS 通配符文件筛选规范组成,还不是很懂这个参数是如何写的,只知其然不知其所以然,如果有人看到这篇文章并知道的话,不妨指教一下我。

    第二部分:

    ppapp.ActivePresentation.Slides(1).Layout = ppLayoutBlank
    ppapp.ActivePresentation.Slides(1).Shapes.AddPicture Filename:="D:QQPCmgrDesktopexceltoppt背景.jpg", linktofile:=msoTrue, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=992, Height:=568 

    第一部分中打开的ppt文件就是我已经设计好的模板,

    646f607d4505c5088b806294b8356e68.png

    由于需要添加一张图片作为封面,所以将第一p(slide(1))的板式(layout)先改成空白(ppLayoutBlank),再用到addpicture方法,设定图片的位置大小参数。我发现如果用我设计的板式添加图片的话,位置和大小参数将毫无用处...图片会直接插入到图片占位符中,故需要改一下板式为空白。

    With ppapp.ActivePresentation.Slides(1).Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=0, Top:=450, Width:=992, Height:=100)
        .TextFrame.TextRange.Text = Range("G2").Value 
        .TextFrame.TextRange.Font.Size = 44
        .TextFrame.TextRange.Font.Color.RGB = RGB(255, 255, 255)
        .TextFrame.VerticalAnchor = msoAnchorMiddle 
        .TextFrame.HorizontalAnchor = msoAnchorCenter 
        End With

    在第一p插入封面图片后插入文本框(TextFrame),文本框的文本(TextRange)对象设置内容、字号、颜色、居中

    第三部分:

    ppapp.ActivePresentation.Slides.Add ppapp.ActivePresentation.Slides.Count + 1, ppLayoutCustom

    开始添加设计好的模板,注意slides的add方法中index是幻灯片在 Slides 集合中的索引号。ppLayoutCustom是设计好的板式,注意该板式要放在板式的第一个。这里我还不够清楚,ppLayoutCustom只能代表一个设计好的板式,且在板式的第一个,如果有多个的话,要如何表达还真的不甚清楚,又一次求指教了。

    向模板中输入内容时,设计占位符的顺序很重要,他会简化你的代码。我的顺序如下:

    31373660ff1ad13fcfa1c4db20165aee.png
    row = 2
    Set totalslide = ppapp.ActivePresentation.Slides(ppapp.ActivePresentation.Slides.Count)
    totalslide.Shapes(1).TextFrame.TextRange.Text = Range("A" & row)
    totalslide.Shapes(2).TextFrame.TextRange.Text = "社区地址:" & Range("D" & row) & vbLf & "合同规定:" & Range("B" & row) & vbLf & "实际发布:" & Range("C" & row)
    totalslide.Shapes(5).TextFrame.TextRange.Text = Range("A" & row + 1)
    totalslide.Shapes(6).TextFrame.TextRange.Text = "社区地址:" & Range("D" & row + 1) & vbLf & "合同规定:" & Range("B" & row + 1) & vbLf & "实际发布:" & Range("C" & row + 1)

    这是按要求填充文本占位符的文本内容

    Picpath = "D:QQPCmgrDesktopexceltoppt"
    totalslide.Shapes.AddPicture Filename:=Picpath & "外景照片" & Range("A" & row) & ".jpg", linktofile:=msoTrue, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=0, Height:=0
    totalslide.Shapes.AddPicture Filename:=Picpath & "外景照片" & Range("A" & row + 1) & ".jpg", linktofile:=msoTrue, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=0, Height:=0
    totalslide.Shapes.AddPicture Filename:=Picpath & Range("G2") & "" & Range("A" & row) & "1.jpg", linktofile:=msoTrue, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=0, Height:=0
    totalslide.Shapes.AddPicture Filename:=Picpath & Range("G2") & "" & Range("A" & row + 1) & "1.jpg", linktofile:=msoTrue, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=0, Height:=0

    这是按照占位符的顺序添加对应的照片,之前说过有图片占位符的时候,addpicture的位置大小的参数都不重要了,所以这里的Left:=0, Top:=0, Width:=0, Height:=0,如果中间某一张照片缺失,后面的照片会填充到前一个占位符,这也是一个我未解决的问题。所以工作中我必须保证每一张照片都存在。

    临表涕零,不知所言。

    展开全文
  • 经过上次两篇Excel应用的分享郑天玑:如和快速地通过数据列表生成表格并打印-1对1...应该推荐什么教材我以前看过不少Excel VBA教材,虽然看得多忘得也多也写过不少VBA代码,但越深入越觉得,Excel VBA是一个很适合...

    经过上次两篇Excel应用的分享

    郑天玑:如和快速地通过数据列表生成表格并打印-1对1关系zhuanlan.zhihu.com
    郑天玑:如和快速地通过数据列表生成表格并打印-1对多关系zhuanlan.zhihu.com

    有同学问我该如何学习Excel VBA,应该推荐什么教材

    f7ec49cde5797c4a7133229af4911fe9.png

    我以前看过不少Excel VBA教材,虽然看得多忘得也多

    4e82ee3a14085141485449ca78952233.png

    也写过不少VBA代码,但越深入越觉得,Excel VBA是一个很适合点到为止的知识:

    在我看来VBA本身是寄生在Office套件中的脚本,所以语言本身的表达能力并不强,一旦需要脱离表格开发更多样化更深入的功能,立刻会有各种各样的替代品,甚至替代品本身比VBA好用多,比如Python甚至go也可以。

    所以我对同学们想要学习VBA的路径建议很简单:

    1 首先明确三个原则

    • 1.1 明确你学习Excel VBA要做什么?
    • 对于Excel VBA,我觉得不应该为学而学,而是应该先明确自己遇到了什么报表处理上的业务,是当前Excel标准功能解决不了的,必须借助编程才能完成。我们的学习应该跟着具体业务场景走,一事一列,不断积累解决方案。
    • 1.2 点到为止。
    • 正如我前文所述,Excel VBA适合拿来就用,不适合过于深入钻牛角尖式的研究。一旦业务需要脱离Excel表格体系,立马换其他编程工具是一种成本更低更有效的解决思路。
    • 1.3 善用录制宏
    • 这是Excel开发工具附带的功能,只要点击录制宏,然后再录制期间,进行任何表格操作都会形成相应的VBA代码,这就可以让我们不必查阅卷帙浩繁的使用手册,就知道某些功能的代码应该怎么写:

    d6bfce684aef50b4dd7be5eefc5ff5f6.png

    比如我想在代码中实现对选中的数据区域进行排序,但我们不知道代码怎么写:

    da3d370b6128ad666c6f6eedaa5a1cfa.png

    我可以先点击一下录制宏,在录制期间,我们按照正常的Excel操作选中数据区域,然后点击排序功能

    76ba1a5d85699697eb0e3c83c13b3fef.png

    接着,结束宏录制,进入到代码页面,我们就可以看到这个期间我们-选中区域和排序操作产生的代码,我们可以将他们稍作改造集成到自己的代码当中:

    c8596898a2f4359bb77801bf75fe74ce.png

    2 区分VBA语言本身的学习和API或框架的学习

    学习任何编程语言开发,往往包含两个阶段:

    1 是语言本身的学习,内容无非以下几类:

    基本数据类型(整型、浮点型、布尔、字符串等)、基本数据结构(数组、字典)、基本控制结构(条件判断、循环)、函数(方法、过程、事件)、对象模型、接口、泛型、语言特性等

    由于VBA本身的特点所致,其语言本身的编程模型并不复杂,我们甚至可以通过一个案列覆盖其80%的语言特性:

    1293edfb8854a9749934a9b6a717359e.png

    2 API或者框架的学习:

    API和框架是我们搭建应用的桥梁,我们通过组合别人事先编程好的接口和函数来完成我们的业务,这和我们平常用各种Excel函数很类似,我们不会自己去写vlookup函数,但是可以拿来使用,编程亦是如此。

    到这里我们要学习各种Excel中的接口模型,比如Range,Cell,Sheets等完成我们对表格的控制和使用。

    当我阅读很多Excel书籍的时候,往往有一个困惑,就是大多数Excel技术图书,都会将两个阶段杂糅在一起,当初学者对编程模型还未有个大体认识的时候,开篇就各种Range Cells FormulaR1C1,甚至贴上了非常生僻可以用录制宏解决的功能代码,一通组合拳下来直接劝退,很少有从语言本身开始,慢慢过渡到表格应用上的图书,这可能是当下Excel VBA技术图书普遍存在的问题,他们已经默认读者有一定的VB6基础(虽然这是大部分经管类大学生理所应当掌握的技能)

    比如这TM竟然是第3页的内容,变量竟然还用中文命名:

    649cfeeaae303137757616b1fbb77e80.png

    所以,我在这里想单独开一个系列的文章,帮助有需要的同学,一点点走进Excel VBA的应用。

    大致章节如下:

    一、 VBA语言概览:我们通过编写一个基本的List链表数据结构,过一遍VBA语言本身的特性,这一章不夹杂任何Excel有关的API或者功能接口,单纯地使用语言自身,目的在于让大家对VBA编程本身先有个认识,如果你有VB6或者其他语言基础,只要粗略看一遍就可以了。

    二、 不使用VBA情况下,利用5-6个主要函数和Excel标准功能(包括透视表,自定义表格,图表等),实现在Excel表上搭建一个小型可实用的财务系统:包括科目管理、往来单位管理、凭证录入、往来受控、报表自动生成、自动财务分析。

    三、利用VBA重构小型财务系统(同时附上搭建Access),做到数据-报表-输入的三分离。通过第二章的学习,我们大致能够明白不使用VBA编程完成Excel报表业务的极限在哪里。而通过这一章,我们会了解到了什么样的业务场景,应该考虑使用VBA,如何用VBA控制表格(Range Cell等接口模型,自定义函数等),到了何种更深层次的场景应该果断放弃使用VBA,转而使用其他工具(点到为止)。

    我们不纠结具体的功能细节,所有的目标就是完成我们的任务,最后会把所有代码和文件模板放出。

    敬请期待

    展开全文
  • vbaListBox控件的使用

    千次阅读 2013-11-08 16:25:00
    ListBox添加内容 If CheckBox8 = True Then---------------------------checkbox控件被选中 For i = 0 To ListBox1.ListCount - 1--------------循环将值赋到ListBox中 If i < ListBox1.ListCount Then '...

    给ListBox添加内容

    If CheckBox8 = True Then---------------------------checkbox控件被选中

        For i = 0 To ListBox1.ListCount - 1--------------循环将值赋到ListBox中
            If i < ListBox1.ListCount Then
        '        If ListBox1.Selected(i) Then
        '            ListBox1.RemoveItem (i) ---------------clear   selected row 删除选中内容
                    Me.ListBox1.Selected(i) = True----------Me只有在同一个页面的时候才用  sheet5.ListBox1.Selected(i) = True 适用所有情况。
        '            i = i - 1
        '        End If
            End If
        Next

    Else
        For i = 0 To ListBox1.ListCount - 1
            If i < ListBox1.ListCount Then
       
                    Me.ListBox1.Selected(i) = False
       
            End If
        Next
       
    End If

     

    通过调节ListBox属性调节ListBox多选或者单选ListSytle等改变内容的输出形式。

     

     

     

     

     

    转载于:https://www.cnblogs.com/zigewb/p/3414519.html

    展开全文
  • 设置文本的打开方式为追加Set file = fs.OpenTextFile("D:\test.txt", 8, True)'以追加的方式写入如下两行文本file.WriteLine ("这是通过VBA脚本写入的第三行字符")file.WriteLine ("这是通过VBA脚本写入的第四行...

    Hi,大家好,上一期介绍了文件系统对象,从示例演示可以看到,通过文件系统对象,可以利用代码快速的创建,复制,粘贴,移动文件夹等操作,同时示例中还涉及到了对文文件对象的简单操作,演示代码中创建了一个文本文件对象,并写入了一串字符串到文本文件中。
    鉴于文本文件易于创建,读取,保存,格式简单,同时兼容性较好,能应用在很多的场合,无需安装额外的软件就能操作,因此,在对文本文件进行抽象后,形成了文本对象,便于通过代码来自动化操作文本文件。
    文本文件对象不仅提供了常用的文件操作,例如文件的创建,打开,关闭等操作,还提供了编辑操作,读取,写入,移动光标等操作,同时还提供了返回当前光标所在的行,列等位置信息,有了这些支持,已经可以满足绝大部分情况下对文本文件操作的需求了。
    虽然此前的例子的中已经演示了如何创建文本对象,这里还是再次提一下,方便以后查看:

    '定义一个通用对象用于表示文件系统对象Dim fs As Object'定义一个通用对象用于表示文本文件对象Dim file As Object'创建文件系统对象并绑定到通用对象Set fs = CreateObject("Scripting.FileSystemObject")'创建文本文件test.txt对象并绑定到通用对象Set file = fs.CreateTextFile("D:\test.txt", True)


    上述例子中,创建的文本文件对象对应的文本文件是新建的,若想通过打开已有的文本文件创建对象,则需要用到如下代码:

    '通过打开已有的文本文件来创建文本文件对象Set file = fs.OpenTextFile("D:\test.txt", 2, True)


    通过打开已有的文件的方式的情况下,如果要打开的文件不存在,则有两种可能,一种是报错,提示找不到文件,另外一种就是直接创建新文件。
    要想在打开的文件不存在时直接创建新文件,则需要在打开打开文件函数调用上设置第三个参数要为True,否则文件不存在时,会报错。
    下面通过一个具体的示例,演示一下对于文本文件的常用的操作是如何实现的:

    Sub BaseCode8()'定义一个通用对象用于表示文件系统对象Dim fs As Object'定义一个通用对象用于表示文本文件对象Dim file As Object'创建文件系统对象并绑定到通用对象Set fs = CreateObject("Scripting.FileSystemObject")'通过打开已有的文本文件来创建文本文件对象,设置文本的打开方式为写入Set file = fs.OpenTextFile("D:\test.txt", 2, True)'写入如下两行文本到文件file.WriteLine ("这是通过VBA脚本写入的第一行字符")file.WriteLine ("这是通过VBA脚本写入的第二行字符")'关闭文件file.Close'通过打开已有的文本文件来创建文本文件对象,设置文本的打开方式为追加Set file = fs.OpenTextFile("D:\test.txt", 8, True)'以追加的方式写入如下两行文本file.WriteLine ("这是通过VBA脚本写入的第三行字符")file.WriteLine ("这是通过VBA脚本写入的第四行字符")'关闭文件file.Close'通过打开已有的文本文件来创建文本文件对象,设置文本的打开方式为只读Set file = fs.OpenTextFile("D:\test.txt", 1, True)'获取文件对象的名字并输出Debug.Print fs.getFile("D:\test.txt").Name & "内容如下:"'读取所有文本内容并输出Debug.Print file.ReadAll'关闭文件file.CloseEnd Sub


    复制上述代码到VBA代码编辑窗口并运行,可以看到如下结果:

    46ac4c06fce1c914c46dc4055a5eb310.png


    这里主要演示了通过打开文本文件的方式来创建一个文本对象,第一次以写入的方式进行打开,然后写入最开头两行文本,然后关闭文件。
    然后再次以追加的方式打开文件,再次写入文本,追加的方式会在此前文本内容的最后进行添加,然后再次关闭文件。
    随后以只读的方式打开文件,读取所有的文本内容并输出,然后最后关闭文件。
    打开文件时,读取,写入,追加这三种方式是要分开处理的,以读取方式打开时,此时是不能写入的。同样,以写入,追加的方式打开时,此时是不能读取的。
    觉得有用吗?想了解更多吗?下方扫码关注喔!

    16257f83f48b63cf8b69eaa3715b0fe2.png

    展开全文
  • 蓝字关注,加微信NZ9668获资料信息VBA解决方案 系列丛书作者头条百家平台 VBA资深创作者_______________________________VBA++ 题记:一剪闲云一溪月,一程山水一年华。一世浮生一刹那,一树菩提一烟霞。岁月静好,...
  • VBA++ 题记:一剪闲云一溪月,一程山水一年华。一世浮生一刹那,一树菩提一烟霞。岁月静好,现世安稳。纵算云水漂泊,心若安宁,亦可淡若清风。希望见者与不见者都能安康。静下心,多学习有用的知识,多提高自己的...
  • 去除粗枝繁叶,留一根主干,作攀天之梯,目标是那金碧辉煌的VBA殿堂。一路上,两旁都是漂亮的姑娘,不要三心二意,请跟我走。闲话少说,言归正传。打开Excel,新建一工作簿。如果你的工具栏中找不到“控件工具箱”,...
  • 大家好,今天给继续讲解VBA数据库解决方案的第15讲:Recordset集合的单个数据精确处理,在前几讲中,我们讲了对于Table的对象的添加和删除。今天我们要讲的内容是Recordset集合的处理方案,这个处理和Table的处理是...
  • VBA数据库解决方案第16讲:利用VBA控制数据库,动态显示Recordset对象记录的方法大家好,今天给继续讲解VBA数据库解决方案的第16讲:动态显示每一条Recordset对象记录的方法。在上一讲中我们讲了MoveFirst,MoveLast...
  • 上一次介绍了控制工作的使用时间,今天 我们介绍用VBA限制工作薄的使用日期。先看效果。如果是在使用日期内,仅仅是提示你到期时间。如果超出这个时间,工作薄将会自动关闭。下面我们来看如何设置。首先设置你限制的...
  • Excel VBA ListBox列表框添加和删除问题

    万次阅读 2008-04-04 23:30:00
    Excel VBA 窗体中有两个ListBox,需要做的操作:从一个列表框中选择列表值向另一个列表添加值,以及从已选择的值中删除选择的列表值。 例:ListBox列表 被选框lbData, 选择框lbSelectedData,列表框中显示三列。-...
  • VBA LISTBOX初始化代码

    千次阅读 2013-11-15 16:37:43
    Private Sub UserForm_Initialize() Dim lsb As Worksheet Set lsb = Sheets("临时表") ...With ListBox1 .ColumnCount = 7 '设置7列 .ColumnWidths = "30,70,70,70,70,70,50" '设置每列宽度 .ColumnHe
  • 本文是Excel的正确学习姿势系列的第七篇文章,要想了解该系列文章的目的,可以参考第一篇文章Excel的正确学习姿势:从入门到巅峰这次我们进入Excel的第五层修炼:VBA,它是之前Excel初学者梦想的巅峰系列,用VBA一键...
  • 在使用Excel编写VBA程序时,用到ListBox,然后研究了下它的所有属性。其实这个控件功能很不好用,太老了,最重要的是还不支持鼠标滚轮,很不好操作,但是考虑到兼容性,还是使用它。 其实读取、写入数据用...
  • 大家好,我们今日讲解“VBA信息获取与处理”教程中第十二个专题“VBA中剪贴板(Clipboard)的应用”的第六节“利用剪贴板提取工作表的文本内容”,这个专题是非常有用的知识点,希望大家能掌握利用。第六节利用剪贴板...
  • 大家好,我们今日讲解“VBA信息获取与处理”教程中第十八个专题“FSO对象对文件及文件夹的处理”的第四节“利用FSO对象读取文本文件的信息”,这个专题是非常实用的知识点,希望大家能掌握利用。教程会提供配套的...
  • listbox 如何指定多列内容 ? 没有columnSource 属性 只有columncount属性 可以在rowsource指定一个区域 设置列宽度,sheListBox1.ColumnWidths = "50;100;50" '实测用两种分隔都可以 "50,100,50" Private ...
  • vba里的listbox是一个既需要有恶心的控件。 如果你是将二维数组赋值给Listbox.rowsource的话,当需要取得listbox中某行某列的值时,会报属性索引值无效等错误。 看官方文档,文档,文档。得到并记住以下一点,就...
  • 上一次我们介绍了纯公式的动态筛选下拉菜单的方法,但是纯公式打造的方法在操作上不太方便,所以这一次我们用VBA制作一个动态筛选快速录入的方法。先看效果。下图是我们的数据源。我们经常需要在某个地方快速录入...
  • VBA向列表框(ComboBox或ListBox)中填加数据向列表框中填加数据的方法很多,下面根据实例介绍3种最常用到的方法:图1图2如图1所示的下拉列表框(组合框),图2为其数据源,图2所有在工作表表名为:设置表无论哪种...
  • 相关阅读 | CATIA软件中基于VBA的焊点小球生成工具应用程序编写 相关阅读 | AutoCAD软件基于VBA二次开发的圆形绘制应用程序编写 相关阅读 | CATIA软件基于VBA二次开发的Excel坐标数据导入与模型生成 上一篇 | ...
  • 在Excel中存在着Excel.ListBox和MsForms.ListBox两种ListBox。其中Excel.ListBox是隐藏的,你在ObjectView窗体中是不可见的(如果你想看到这个类请在...在Excel的VBA项目中这个隐藏的Excel.ListBox被视为Lis...
  • VBA代码宝.xlsm

    2021-01-01 18:48:52
    VBA代码宝,用来储存自己的各种代码,文章,使用时可以一键查询,可修改,源码全部可见,使用Excel的窗体做界面,excel表格做数据储存,使用了listbox控件,Treeview树形目录控件,Imagelist图像控件,toolbar菜单...
  • Excel在录入时可以匹配现有的内容,但有时还是满足不了我们的要求,以下是用Excel VBA实现的渐进式模糊搜索作者:Excel小子-Office中国实现的效果:Excel 模糊 渐进式搜索操作动画教程Excel VBA实现渐进式模糊搜索的...
  • Collection(集合) + Dictionary(字典) 解决 MS Access Listbox ..."关键词":["VBA","Collection","Dictionary","Access","Listbox","字典"] "开发平台":"不限" "开发语言":"VBA" "简介": "在VBA中使用...
  • VBA 用户窗体的认识

    2020-08-18 21:19:49
    今天学的是VBA用户窗体~可算到这里来,有点以前大学学VB的味道了 一、插入新的用户窗体 插入用户窗体很简单啦,在VBE的工程下右击选择插入——用户窗体就可以了。 如果下面这个工具箱关闭了,可以在菜单栏的...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

listboxvba