ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 兰色幻想

带你入门VBA系列之:不懂的代码快点贴过来

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-11-9 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

Sheets("Sheet1").DrawingObjects("TextBoxWait").Visible = True

这个语句调用了一个名叫"TextBoxWait"的Shape,但在所有模块中却找不到,这个由文本的矩形图形是放在哪里,怎么做出来的。

老师帮帮忙,指点一下,Shape应该怎么用?

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:13 | 显示全部楼层
QUOTE:
以下是引用303hd在2006-11-3 15:16:02的发言:

从第五行开始看不懂,谁能解释一下

Sub Me_Micro()
    Dim t_Str$
    Dim i%
    Dim Bh() As String
    For n = 2 To [B65536].End(xlUp).Row
        Bh = Split(Cells(n, 2), "编号")
        If UBound(Bh) > 0 Then
            For i = 1 To UBound(Bh)
                t_Str = t_Str & i & Split(Cells(n, 2), "编号")(i)
            Next
            Cells(n, 2) = t_Str
        End If
    Next
End Sub



代码主要在于Split的用法,你可以找找帮助或看看相关资料,我这里大致说下

如 s = "a,b,c"

bn = split(s,",") '就是说把s变量,按,分开成一个数组。这时bn就是一个数组,从0开始,具体为:

bn(0) = "a",bn(1) = "b",bn(2) = "c"

例子中是按“编号”来分开的Bh = Split(Cells(n, 2), "编号"),如单元格里为“a编号1”,则按上面的分开之后就是bn(0) = "a",bn(1) = "1"

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用bjnftcc2006在2006-11-3 13:33:03的发言:

  老师:

 Sheets("Sheet2").PrintOut Copies:=1, Collate:=True这句话里的collate:=true是什么意思

请在VBE的帮助里搜索“collate”

Collate      Variant 类型,可选。如果该值为 True,则逐份打印每份副本。

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:19 | 显示全部楼层
QUOTE:
以下是引用haodayikeshu在2006-11-9 9:11:11的发言:

CreateObject("Scripting.FileSystemObject",<Not defined>")

不好意思,我对VBA一窍不通,我从别人那里拷来了一个EXCEL表格,里面有这么个"宏",卡巴斯基说是有风险的"宏".请问兰老师,这个"宏"是什么意思?

谢谢

[em04]

宏是一些VB代码,写在Excel里面,用它可以实现很多功能。宏代码里有些特殊的操作,如窗体的导入、导出等,有些杀毒软件就会把这些代码判定为病毒,其实这种可能性很小

在这个论坛里面,不可能出现有病毒的宏文件,请放心使用

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:23 | 显示全部楼层
QUOTE:
以下是引用rachelyou在2006-11-9 14:36:23的发言:

Sheets("Sheet1").DrawingObjects("TextBoxWait").Visible = True

这个语句调用了一个名叫"TextBoxWait"的Shape,但在所有模块中却找不到,这个由文本的矩形图形是放在哪里,怎么做出来的。

老师帮帮忙,指点一下,Shape应该怎么用?

这个图形在工作表里。你可以看到它的前面为Sheets("Sheet1"),这就是它的存放地方

如userform1.checkbox.....,这样的就在窗体里面

Shape表示的是图形,包括所有的绘图、控件、批注等,用下面的代码,可以看到所有图形的名称

Sub hjs()
    Dim p As Shape
   
    For Each p In Sheet1.Shapes
        Debug.Print p.Name
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:26 | 显示全部楼层
QUOTE:
以下是引用aofeng0101在2006-10-23 22:08:41的发言:

Private Sub Worksheet_Change(ByVal Target As Range) '单元格改变的时候将执行代码
If Target.Count > 1 Then Exit Sub '假设改变的单元格大于1个,则退出程序(复制数据的时候就是多个单元格值变化)
If Target.Column = 2 Or Target.Column > 5 Then Exit  '假设单元格的列为B列或E列时,则退出程序

我知道这段代码很简单,但我却看不懂,请老师帮忙翻译!

Target为你在工作表里选择的区域,可以为一个单元格,也可以为多个区域

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:29 | 显示全部楼层
QUOTE:
以下是引用rock1983823在2006-10-24 10:41:51的发言:

Private Sub CommandButton1_Click()
   '从第五行开始查找,找到空白行,以定位从这里输入
       rownum = 1
       Do
       if (Cells(rownum, 1) = TextBox1.Text)
            {rownum=rownum+1;
             Cells(rownum, 1) = Cells(rownum - 1, 1)
             }
      
       rownum = rownum + 1
       Loop Until Cells(rownum, 1) = ""
End Sub

我这段代码在实现查询时 出现错误 请大家帮我看下

本段代码不知兄台是否在excel VBE中执行?很显然,这些代码在excel里会出现问题,因为它不符合excel代码的书写规范,if需要then来对应,{}在里面是不允许的

建议兄台单独发贴提问!

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:32 | 显示全部楼层
QUOTE:
以下是引用SYH在2006-10-29 11:14:41的发言:

请问兰老师一个问题

最近我在学习VB时,看到一段"文件操作"的简单代码,我把它移植到excelVBA中,但是不能在VBA在运行,代码如下:

Private Sub CommandButton1_Click()
Open "c:\a.txt" For Output As #2
Write #2, "123", "12345458", "one", one
Close #2
End Sub

这段代码是山东石油VB视频教学中列示的代码,在VB环境中能运行起来,但是在VBA中老是显示错误'53',请问老师解答.

最后一个One需要加个括号(不加括号表示变量,但是你还没有定义这个变量),如下我试验的可以

Sub hjs1()
Open "d:\a.txt" For Output As #2
Write #2, "123", "12345458", "one", "one"
Close #2
End Sub

运行完之后,你在d盘可以看到一个文件,打开自己看看

TA的精华主题

TA的得分主题

发表于 2006-11-9 15:45 | 显示全部楼层
QUOTE:
以下是引用fanzheyu在2006-10-30 16:24:23的发言:

Public Function gongzi(m As Double)
      Dim k As Integer
     If m = 0 Then
        gongzi = 0
        End If
     If 0 < m And m < 2.4 Then
        gongzi = 600
        End If
     If 2.4 <= m Then
        gongzi = 600
         k = 10 * (Application.WorksheetFunction.RoundDown((m - 2.3), 1))
            For i = 1 To k
              gongzi = gongzi + (10 * i + 20)
              Next
         If (m - 2.3) * 10 - k = 0 Then
              gongzi = gongzi
             Else
                gongzi = gongzi + CInt(Right(CStr((m - 2.3)), 1)) * (30 + 10 * k) / 10
              End If
              End If
    
End Function

帮我看看,为什么没m=2.4时结果是634而不是630,如果要为630要怎么改,郁闷!

好像没有做If (m - 2.3) * 10 - k = 0 Then这个判断


请在代码里增加一个调试语句,Debug.Print (m - 2.3) * 10 - k,你运行试试,结果不等于0哦,其结果为

8.88178419700125E-16,这是一个很小很小的数,0.0000000000000088817...,由于你的定义上说明m为double,所以系统计算时就会出现这样的浮点问题(系统问题,与代码无关),这样只能改代码,可以改成这样

If Round((m - 2.3) * 10 - k, 8) = 0 Then '表示结果取8位小数,如果还等于0,认为两者一样

TA的精华主题

TA的得分主题

发表于 2006-11-12 19:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢兰老师的指导.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 02:27 , Processed in 0.037500 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表