三国志11威力加强版吧 关注:152,377贴子:5,034,540

【Excel抽签器美化】关于自动替换图片的二三事

只看楼主收藏回复

一楼不说事


IP属地:浙江1楼2021-10-28 16:58回复
    抽签器是吧剧的重要产生基础数值的助力之一,作为其中最简单易懂的当然是使用Excel来制作抽签器,比如吧里就还有一个以上的Excel抽签器制作教程。
    在学会了使用Excel制作抽签器后,想要使抽签器变得具有自己的特色,最基础的就是改变数值的呈现方式以及给人不一样的改观。
    而这次就是利用宏实现自动替换图片来给Excel抽签器呈现不一样的改观。


    应用达人
    应用吧活动,去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:浙江2楼2021-10-28 17:04
    回复
      说是这样说,但还是先上图,楼中楼会放出测试用的Excel,可以下载后尝试操作一下。
      注意:本教程并不是一个一个字的告诉你其中包含的原理,只是简单地告诉你可以个别的作用和如何调整来直接拿去套用。


      应用达人
      应用吧活动,去领取
      活动截止:2100-01-01
      去徽章馆》
      IP属地:浙江3楼2021-10-28 17:08
      收起回复
        为了更好的理解,可以查看测试用的Excel界面,其中重点记住B3,K3两个选框


        应用达人
        应用吧活动,去领取
        活动截止:2100-01-01
        去徽章馆》
        IP属地:浙江4楼2021-10-28 17:10
        收起回复
          Public Sub 按钮()
          插入图片 (ActiveSheet.Range("k3"))
          End Sub
          ————————————————————
          那么先从这个开始,这里面的k3,你就记住是替换图片的名字,如图所示


          应用达人
          应用吧活动,去领取
          活动截止:2100-01-01
          去徽章馆》
          IP属地:浙江5楼2021-10-28 17:17
          收起回复
            Public Sub 插入图片(Name)
            Dim path, pic
            [B3].Select '图片插入的单元格
            path = Dir(ThisWorkbook.path & "\图片\" & Name & ".*") '查找图片路径
            For Each pic In ActiveSheet.Pictures
            If pic.TopLeftCell.Address = "$B$3" Then '检测该位置有无图片
            pic.Delete
            End If
            ————————————————————————————————
            接着是这一段,【[B3].Select 】这个表示图片插入到什么地方,这里说的是插入B3单元格中,使用时根据自己需要修改这个就好。
            【path = Dir(ThisWorkbook.path & "\图片\" & Name & ".*")】是指的在表格所在的当前位置的名为【图片】的文件夹中寻找名字为K3单元格显示的格式任意的图片。所以需要自己把用来替换的图片改好名字放置在名为图片的文件夹中,如图,当然代码中的【图片】你可以随自己喜欢修改其他文字,只要和文件夹名字对应就好。
            【 ".*"】表示的就是任意格式, 【".jpg"】的话就是搜索格式为JPG的图片了。
            ————————————————————————————————
            而下面的则是为了避免重复的在B3单元格中插入图片所以增加的。
            其中加入了【If pic.TopLeftCell.Address = "$B$3" Then】后会只删除B3单元格内的图片然后插入新图片,如果去掉了这一行,那么运行时则会删除整个工作表中的全部图片后再插入新的。


            应用达人
            应用吧活动,去领取
            活动截止:2100-01-01
            去徽章馆》
            IP属地:浙江6楼2021-10-28 17:44
            回复
              With ActiveSheet.Pictures.Insert(ThisWorkbook.path & "\图片\" & path).ShapeRange
              ————————————————————————————————————————
              这一段和【path = Dir(ThisWorkbook.path & "\图片\" & Name & ".*")】里面的图片对应就可以了。


              应用达人
              应用吧活动,去领取
              活动截止:2100-01-01
              去徽章馆》
              IP属地:浙江7楼2021-10-28 17:58
              回复
                啥?这也能氵?怎么我就想不到


                IP属地:广西来自Android客户端8楼2021-10-28 18:04
                收起回复
                  .PictureFormat.TransparentBackground = msoTrue 图片自动透明
                  .PictureFormat.TransparencyColor = RGB(255, 255, 255) 透明颜色判定
                  ——————————————————————————————————
                  这两段代码测试里是使用了挂起,效果没有展示,其实就是设定插入的图片自动选择一种颜色透明处理,这里的透明判定使用的是【RGB(255, 255, 255) 】,也就是插入的图片中白色部分自动透明显示的意思。
                  如图,这个抽签器右侧的图就使用了透明效果,显示出了被图片覆盖的抽签属性。


                  应用达人
                  应用吧活动,去领取
                  活动截止:2100-01-01
                  去徽章馆》
                  IP属地:浙江9楼2021-10-28 18:11
                  回复
                    .LockAspectRatio = msoFalse
                    .Height = Range("B3").MergeArea.Height - 1
                    .Width = Range("B3").MergeArea.Width - 1
                    .Left = [B3].Left + 1
                    .Top = [B3].Top + 1
                    ——————————————————————————
                    这部分也是重中之重了。
                    【.Height = Range("B3").MergeArea.Height - 1】这行的作用是表示图片高度同B3单元格高度,测试里的这一行被挂起了,如果不挂起的话效果如图所示,高度与B3单元格一致了。


                    应用达人
                    应用吧活动,去领取
                    活动截止:2100-01-01
                    去徽章馆》
                    IP属地:浙江10楼2021-10-28 18:35
                    回复
                      同理【.Width = Range("B3").MergeArea.Width - 1】就是指的图片宽度等同B3单元格。
                      这里说个事情,测试里挂起[相当于删除或者禁用]了图片高度等同单元格的代码后,图片就会根据宽度等比例调整图片大小,如图显示。



                      应用达人
                      应用吧活动,去领取
                      活动截止:2100-01-01
                      去徽章馆》
                      IP属地:浙江11楼2021-10-28 18:38
                      回复
                        大佬,牛逼


                        IP属地:山东来自Android客户端12楼2021-10-28 18:47
                        收起回复
                          .Left = [B3].Left + 1
                          .Top = [B3].Top + 1
                          ————————————————————————————
                          这两个也放在一起说明好了,【Left】代表左边,【Top】代表顶部。
                          所以【.Left = [B3].Left + 1】指的是图片距离单元格B3所在方位往右移动1的距离[如果是 - 1则是往左移],这个数字的距离我也不是特别清楚,但知道是什么意思理解就好了,如图,我把代码改成【.Left = [B3].Left + 50】,插入的图片就自动往右侧移动了一段距离。
                          另一个【.Top = [B3].Top + 1】的话,+多少表示往下移动,-则是往上移动多少


                          应用达人
                          应用吧活动,去领取
                          活动截止:2100-01-01
                          去徽章馆》
                          IP属地:浙江13楼2021-10-28 18:49
                          回复


                            应用达人
                            应用吧活动,去领取
                            活动截止:2100-01-01
                            去徽章馆》
                            IP属地:浙江16楼2021-10-28 19:01
                            回复
                              以往的Excel抽签器很少使用图片内容,最早的还是2020年的新春吧剧,根据模板自动替换武将头像,往后开始,比如芷若的原神吧剧使用的是自动替换背景图,而如同上面作为图片透明的图是我自己打算开吧剧使用的抽签器,也是一种插入图片的来美化图片的手段。
                              希望能看到有兴趣制作抽签器的吧友依靠自动图片宏做出有创意的抽签器吧。那就这样了,有问题的可以提出,会在能力范围内帮忙解答一二的。


                              应用达人
                              应用吧活动,去领取
                              活动截止:2100-01-01
                              去徽章馆》
                              IP属地:浙江17楼2021-10-28 19:16
                              回复