热门关键字:  总结  实习  工作  报告  打印机
当前位置 :| 首页>设备维护>

EXCEL问题:十八问十八答

来源: 作者: 时间:2006-10-15 点击:

EXCEL问题:十八问十八答

1. EXCEL的单元格有自动换行功能,那么它是如何知道一行已写满的??我在程序中能不能知道?我能不能在程序中获得单元格一行写满的消息?
解答:第一种方法,alt+enter。第二种方法,看你打算一行多长,如20个字符,那在程序里设定到这么长就加Chr(13)&Chr(10),即加硬回车
2. indirect 取数组的问题?
INDIRECT("sheet"&ROW(B2)&"!a:a") 取数组时出错,而INDIRECT("sheet"&ROW(B2)&"!a1")却可行。能解答一下吗?
解答:Q、sheet & row(b2)不就是sheet2吗?,直接用sheet2!A:A就可以了。
A、我只是想弄清楚这个问题,这样做法问题出在哪里?
Q、引号中的是字符串,A1是字符串没关系,A:A恐怕就不行了。:应该是一个运算符号。
Q、indirect(.....)结果是一个区域时必须只能用数组输入(CTRL+SHIFT+ENTER),或作为另一个函数的参数,或在定义-名称中使用。我也曾遇到过在用有的函数时(),用A:A不行,而必须改为A1:A65535才能通过(就是要比工作表最大行数少1)
Q、这样 =INDIRECT("sheet"&ROW(B2)&"!a1:a1")
3. 以下公式中,我还不太理解用LEN-ROW的用意,还有MID的作用是什么呢,能介绍一下么?谢谢。
wait duilet dhgsl 8
=RIGHT(A1,MATCH("",MID(A1,LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))),1),0))
Q、不明白你公式求什么
LEN(A1) = 19
ROW(INDIRECT("1:"& LEN(A1))) = 1
其实是 {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19} 但储存格只显示第一个数字
MID(A1,LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))),1) = " "
其实是 {" ";"l";"s";"g";"h";"d";" ";"t";"e";"l";"i";"u";"d";" ";"t";"i";"a";"w";#value!}
这公式会出错:19 - 19 = 0 i.e. MID(A1,0,1)
可改成 =MID(A1,LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))) +1,1)
实在= {"8";" ";"l";"s";"g";"h";"d";" ";"t";"e";"l";"i";"u";"d";" ";"t";"i";"a";"w"}
至于 Match 不是用于单一储存格
Lookup_array   是个连续的储存格范围,其中含有被比对值的数据。 Lookup_array 必须是个数组或数组参照地址。
MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes)
文字是含有您想选录的部分字符串之文字字符串。
Start_num   为用以指定您要由 text 的第若干个字节开始抽选。text 中的第一个字符为 start_num 1,依此类推。
Num_chars  指定您要 MID 从字符串传回的字符组。
Num_bytes  指定您要 MIDB 从字符串传回的字符组 (以字节)。
批注
如果 start_num 大于 text 的长度,MID 将传回 " " (空字符串)。
如果 start_num 小于 text,但 start_num 加上 num_chars 的长度超过 text 的长度,MID 将传回由 start_num 到 text 结尾的所有字符。
如果 start_num 小于 1,MID 将传回 #value ! 的错误值。
如果 num_chars 为负值,MID 将传回 #value ! 的错误值。
如果 num_bytes 为负值,MIDB 将传回 #value ! 的错误值。
4. ListBox如何取得横向数据
请问:ListBox如何取得横向数据, ListBox1.RowSource = "a1:a4"是取得纵向的值,但我希望是取得a1:d1横向的值,然后在ListBox1内纵向列出,请高手告知方法谢谢
Q、由于EXCEL的局限性,很多时候需要进行过渡性操作。楼主也可以取出源数据,转置后再赋值给 listbox ,反之亦然。
1. 我目前正是用此方式,我只是想应该有更好的方式,或是应该说有正确的属性
Q、方式如下:ListBox1.List = Application.WorksheetFunction.Transpose(Range("A1:D1"))
5、VBA疑难问题两条
我想请教以下两个困扰着我的有关EXCEL中VBA的问题:
 1,如何在程序中动态地创建一个新的控件?
 2,如果去定义一个控件数组?  (如要创建一个总共有十个标签的标签组)
Q、Sub AddControls()
    Dim ctrl(1 To 10) As OLEObject '定义变量
    With Worksheets("sheet1").OLEObjects.Add(classtype:="Forms.CommandButton.1", Left:=288, Top:=201, Width:=72, Height:=24)
        .Name = "MyCmd"
    End With
    'Worksheets("sheet1").OLEObjects.Add classtype:="Forms.CommandButton.1", Left:=288, Top:=401, Width:=72, Height:=24
    Set ctrl(1) = Worksheets("sheet1").OLEObjects.Add(classtype:="Forms.TextBox.1", Link:=False,  Top:=201, Width:=72, Height:=18)
    ctrl(1).Left = 100
    ctrl(1).Name = "MyText"
    End Sub
Q2、根据你的问题:
Sub AddLabels()
    Dim i As Integer
    Dim ws As Worksheet
    Set ws = Worksheets("sheet1")
    Dim ctrl(1 To 10) As OLEObject '定义变量
    For i = 1 To 10
        Set ctrl(i) = ws.OLEObjects.Add(classtype:="Forms.label.1", Left:=100, Width:=72, Height:=18)
        With ctrl(i)
        .Name = "MyLabel" & i
        .Top = 60 + 30 * i
        .Object.BackColor = vbGreen
        .Object.Caption = "MyLabel" & i
        End With
    Next i
End Sub
(注:EdgeofCity的控件数组引用方式不错,可以在创建控件或启动时把控件对象指派给数组元素,但是我感觉和vb中的控件数组相比还是有些不足,比如说不能共享事件过程)

上一页12 3 4 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商链接