返回列表 回复 发帖

陆续推出办公自动化系列(1):

1、判定一个工作表是否存在工作簿中:
Sub 判定一个工作表是否存在工作簿中()
Dim hhll As Worksheet
    For Each hhll In Worksheets
      If hhll.Name = "Sheet3" Then
      MsgBox "Sheet3 存在工作簿中"
      Exit Sub
      End If
    Next
     MsgBox "Sheet3 不存在工作簿中"
End Sub

如何禁止用户私自更改你的EXCEL表格数据!

EXCEL工作表内不可(无法)删除的数据代码:
Private Sub Worksheet_Change(ByVal Target As Range)
r = Target.Row
If Cells(r, 1) <> "" Then
Application.EnableEvents = False
   Cells(r, 2) = Left(Cells(r, 1), 10)
   Cells(r, 3) = IIf(Application.CountIf(Sheet3.[A:A], Cells(r, 1)), "有数据", "无数据")
   Cells(r, "f") = IIf(Cells(r, "E") = "", Cells(r, "D"), Cells(r, "E"))
Application.EnableEvents = True
End If
End Sub
说明:以上代码添加到工作表改变(变动)的事件中,也就是程序上面的声名(加粗变红部分)详情请看事例:

[ 本帖最后由 js000 于 2008-1-16 12:06 编辑 ]
附件: 您所在的用户组无法下载或查看附件
顶,支持一下
办公自动化??
你用的是VB哦??
呵呵!
做电子商务的不??
做过成熟的多用户商城系统的话我介绍笔业务你做
哦?说来看看!试试也行呀!

从身份证号码中提取性别

要求:A1单元格中是15位的身份证号码,要在B1中显示性别:
提取性别(无论是15位还是18位)
=IF(LEN(A1)=15,IF(MOD(MID(A1,15,1),2)=1,"男","女"),IF(MOD(MID(A1,17,1),2)=1,"男","女"

如果身份证号的输入已是15或18位,用公式
=IF(MOD(LEFT(RIGHT(A1,(LEN(A1)=18)+1)),2),"男","女"

将文件保存为以某一单元格中的值为文件名:

如果:你要以Sheet1的A1单元格中的值为文件名保存,则应用命令:
ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"

隐藏、取消隐藏EXCEL

Public Sub hidd()
    Application.Visible = False'(EXCEL表格不可见!)
    MsgBox "Excel已经被隐藏! 下面将重新显示Excel!"
    Application.Visible = True'(EXCEL表格不可见!)
End Sub

显示活动工作表的名称

MsgBox "The name of the active sheet is " & ActiveSheet.Name

显示活动工作簿中工作表 sheet1 上单元格 A1 中的值

MsgBox Worksheets("Sheet1").Range("A1").Value

删除工作表

Public Sub era()
    On Error Resume Next
    Dim ws As Worksheet
    Set ws = Worksheets(2)    '指定要删除的工作表
    If Worksheets.Count > 1 Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    Else
        MsgBox "这是最后一张工作表,无法删除!"
    End If
    Set ws = Nothing
End Sub

认识引用

(1)引用样式:

A1——用列标字母与行标数字表示,A1表示第1行第1列:

R1C1——用R与行标数字、C与列标数字表示,R1C3表示第1行第3列,就是C1单元格。

(2)绝对引用与相对引用:

A1样式:A1——相对引用,横竖拉动公式都会变;A$1——列相对行绝对引用,横拉列标变而竖拉行标不会变

$A1——列绝对行相对引用,横拉列标不会变而竖拉行标会变。$A$1——横竖拉都不变。

R1C1引用样式——R[-1]C[3]——当前单元格的往上1行往右3列的位置,比如当前单元格是B2,则R[-1]C[3]表示E1单元格。

SUMif三维引用的经典用法

=SUM(SUMIF(INDIRECT({"A","B","C","D"}&"!L4:L100"),$A4&$B4,INDIRECT({"A","B","C","D"}&"!R4C"&COLUMN()&":R100C"&COLUMN(),)))

我们知道=Sumif(A4:A100,B4,C4:C100)——这么一个最常见的Sumif的基本用法,表示对“A列中项目和B4单元格相同所对应的C列的数值”进行条件求和。

第一参数:Indirect("A!L4:L100")——引用的是A表的L4:L100区域,Indirect({"A","B","C","D"}&"!L4:L100")引用的是A、B、C、D表的L4:L100区域,是4个区域。注意:我在ABCD这4个表的L列设置了辅助列,将序号和颜色合并文本。

第二参数:A4&B4——序号和颜色合并文本。

第三参数:还是Inidrect引用,只不过引用样式改成了R1C1引用样式。比如Indirect("A!R4C3:R100C3",0)——表示引用A表的“第4行第3列到第100行第3列”即C4:C100区域。为了右拖复制的时候,第3列能够自动变为第4列、第5列……,则把R4C3改为"R4C"&column()——column()取得当前单元格所在列号。所以:第三参数引用的是A、B、C、D表的C4:C100,并且可以随着向右拖动复制变为D4:D100、E4:E100等区域。

这么一来,Sumif得到的就是4个表中每个表分别对应序号和颜色的数量总数,然后再用SUM对这4个表的总数(相当于每个表的小计)求和,就是4个表——满足序号和颜色与A4、B4单元格一致的数量汇总。

合理使用For Each…Next循环

For Each…Next循环来保证程序代码更快地执行。在使用For Each…Next循环时,对于存储在集合或数组中的每个对象执行一组语句,程序更简洁,也更容易阅读、调试和维护。当For Each…Next语句迭代集合时,自动指定一个对集合当前成员的引用,然后在到达集合的尾部时跳出循环语句。

使用With…End With语句

使用With…End With语句来尽量减少对象引用。使用With语句对指定的对象完成一系列的任务,而不用重复引用对象。也可以使用嵌套的With语句进一步提高程序代码的效率。例如,下面的使用With…End With语句是在同一个单元格中执行多个操作。
With Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”)
.Formula=”=SQRT(20)”
With .Font
  .Name=”Arial”
  .Bold=True
  .Size=10
End With
End With
同理,可使用With…End With语句在同一个单元格区域中执行多个操作。
返回列表