分享

[转贴]VBA自学收集资料(三)

 飞往天际 2011-05-10
75、我们日常上送、下发的报表材料、通知等都要加盖公章,如果把这项工作交给Excel或Word来完成,我们的工作就轻松多了。
第一步:制作公章图案
首先我们要做出一个公章的图案,最简单的办法是把公章图案扫描到电脑中,然后处理成透明的GIF图像。我们也可以直接用Excel来制作:把绘图工具打开,选中“椭圆”工具,在按下“Shift”键的同时拖开鼠标,就可以得到一个正圆了。双击这个正圆打开“设置自选图形格式”对话框,在“颜色与线条”标签中,填充颜色选“无填充颜色”,线条颜色设为红色,选3磅粗的单线形(图)。公章的文字用艺术字来制作,填充颜色和线条颜色都用红色,并设成无阴影产。弧形文字和水平文字要分开来做,在做弧形文字时,把艺术字拖到圆形的上方,在艺术字工具中选“艺术字形状-细上弯弧”,按住黄色的四方块往下拉,再作适当的调整,就可以做出公章里的圆弧形的文字了。公章中间还有一个红五星,用“自选图形”的星形就可以做出来了,填充颜色和线条颜色用红色。最后,按住“Shift”键把组成公章的文字、图形全部选上,执行右键菜单中的“组合”命令,一个公章就做好了。
如何把做好的公章保存出来?这里有一方法:把工作表另存为Web页,然后到保存目录中找到*.files的文件夹,里面有一个GIF图片,这就是刚才做好的公章图案了,它的背景是透明的,我们把它改名为gongzhang.gif保存下来即可。
第二步:添加“盖章”按钮
接下来我们给Excel添加一个盖章按钮,当一个工作表做好后,点击这个盖章按钮,就可以为我们盖上公章了。
先把公章图形复制出来(用来粘贴作为按钮的图标),然后打开“工具-自定义”对话框,选中“命令”标签,在“类别”栏中找到“宏”,在右边的“命令”栏里就会出现一项“自定义按钮”。用鼠标把这个笑脸图标拖出到菜单栏或工具栏上放下,在笑脸图标上击右键,在弹出的菜单中把“命名”处的文字改为“加盖公章”。接下来点击“粘贴按钮图标”这个命令,就可以用刚和复制的公章图形来代替笑脸图标了。把鼠标移下来选中“分配超级链接-插入图片”,然后在“请键入文件名称或Web页名称”栏里输入公章图片gongzhang.gif的文件名及路径,然后按“确定”返回。
好了,看到“加盖公章”这个按钮了吧,点击一下看看,呵呵,页面上就盖上一个鲜红的公章了,用鼠标可以把它拖到任意的地方。在Word文档中加盖公章的方法与此大同小异,大家可以自己试一试。
76、如何使某一个固定的菜单项无效
Application.CommandBars("File").Controls(6).Enabled = False
Controls(6)中的6就是所在菜单栏的行数
我觉得这样可能更可靠:
  Dim i As Integer
    For i = 1 To Application.CommandBars("File").Controls.Count
    If Application.CommandBars("File").Controls(i).Caption = "另存为(&A)..." Then
      Application.CommandBars("File").Controls(i).Enabled = False
    End If
Next i
77、请教大家,我想在EXCEL文件退出时,另存为当前目录下的子目录BAK中,比如EXCEL文件在C盘,就另存为C:\BAK子目录下,但EXCEL文件的位置不确定,不知如何写语句?
注意先引用"Microsoft Scripting Runtime"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' 在本文件要關閉前,執行備份動作。
    If Not ActiveWorkbook.Saved Then Exit Sub    ' 若原文件未存檔,備份檔也不存。
    ThisPath = ThisWorkbook.Path
    ' 假定備份文件夾之名稱為"BAK",若本文件是備份檔,則不需再備份。
    If Len(Application.WorksheetFunction.Substitute(ThisPath, "BAK", "")) < Len(ThisPath) Then Exit Sub
    Bak = ThisPath & "" & "BAK"
    '檢查備份文件夾是否存在,若不存在,就建立一個。
    If Len(Dir(Bak, vbDirectory)) > 0 Then
        If (GetAttr(Bak) And vbDirectory) = vbDirectory Then GoTo 3    ' 若已存在,跳到下一步。
    End If
    MkDir Bak                  ' 建立備份文件夾。
    ' 改變目前路徑到備份文件夾路徑,並備份之。
3  ChDir Bak
    Application.EnableEvents = False            ' 避免執行BeforeSave事件。
    Application.DisplayAlerts = False              ' 避免顯示是否要覆蓋原備份文件之訊息。
    ActiveWorkbook.SaveAs
    ChDir ThisPath                                        ' 改變目前路徑回到原文件夾路徑。
    Application.DisplayAlerts = True
    Application.EnableEvents = True
End Sub
上述程式有個漏洞,就是在本文件做過更動,且存檔過了,但最後一次的更動未存檔,則 If Not ActiveWorkbook.Saved Then Exit Sub 這個判斷會造成不存備份檔之錯誤決定。
若想彌補上述錯誤,將觸發的事件改成Workbook_BeforeSave,卻會造成Excel關閉的錯誤。
78、文件保存为以某一单元格中的值为文件名的宏怎么写
用命令: ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"
79、Offset 属性
参阅应用于示例特性应用于 Range 对象的 Offset 属性。
返回一个 Range 对象,该对象代表某个指定区域以外的区域。只读。
expression.Offset(RowOffset, ColumnOffset)
expression      必需。该表达式返回一个 Range 对象。
RowOffset      Variant 类型,可选。区域偏移的行数(正值、负值或 0(零))。正值表示向下偏移,负值表示向上偏移,默认值为 0。
ColumnOffset      Variant 类型,可选。区域偏移的列数(正值、负值或 0(零))。正值表示向右偏移,负值表示向左偏移,默认值为 0。
应用于 TickLabels 对象的 Offset 属性。
返回或设置各级别标签之间的距离以及第一级标签与坐标轴之间的距离。其默认距离为百分之百,代表坐标轴标签与坐标轴之间的默认距离。其值可以为从 0 到 1000 之间的一个整数百分比,表示相对于坐标轴标签的字体大小。Long 类型,可读写。
expression.Offset
expression      必需。该表达式返回一个 TickLabels 对象。
示例
应用于 Range 对象。
本示例激活 Sheet1 上活动单元格向右偏移三列、向下偏移三行处的单元格。
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate
本示例假定 Sheet1 中包含一个具有标题行的表格。本示例先选定该表格,但并不选择标题行。运行本示例之前,活动单元格必须位于表格中。
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
    tbl.Columns.Count).Select
应用于 TickLabels 对象。
如果偏移量小于 500,则本示例将 Chart1 中数值轴上标签之间的距离设置为当前距离的两倍。
With Charts("Chart1").Axes(xlValue).TickLabels
    If .Offset < 500 then
        .Offset = .Offset * 2
    End If
End With
80、新建工作簿
参阅特性若要在 Visual Basic 中创建新的工作簿,请使用 Add 方法。下述过程创建了新的工作簿。Microsoft Excel 自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。
Sub AddOne()
    Workbooks.Add
End Sub
        创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由 Add 方法返回的 Workbook 对象分配给了对象变量 newBook。然后,又设置了 newBook 的若干属性。使用对象变量可以很容易地控制新工作簿。
Sub AddNew()
Set NewBook = Workbooks.Add
    With NewBook
        .Title = "All Sales"
        .Subject = "Sales"
        .SaveAs Filename:="Allsales.xls"
    End With
End Sub
81、Rem:将活动单元格从A5移到A6,并将A6单元格的数值保存到x变量中
range("A5 ").select此命令就是选择A5单元格
Activecell.offset(1,0).select
X=activecell.value
82、用代码窗口中可用F8运行宏,Alt+F8显示宏对话框,Alt+F11可以打开VBE编辑器
83、Option Explicit  在程序代码前使用该命令,则变量要在声明后才能使用,否则编译程序无法识别该变量,从而产生错误信息
84、Load语句用于加载窗体,加载后将占用内存,Hide方法使窗体隐藏,但仍在内存中,故不再使用窗体时应使用Uuload语句及时卸载,将内存交还系统,Show方法用来显示一个窗体,格式: 窗体名称.show 模式,模式可取0或1,为1时,不能到其他窗体操作,只有关闭该窗体后才能对其他窗体操作
85、控件的命名规则,通常使用3个字母的前缀命名控件,如Label的前缀为lbl,初学者最好养成良好的命名习惯
86、按下Ctrl+Enter键单元格不移动。
87、按下F2键直接在单元格内编辑,不需动鼠标
88、命令按钮不支持双击(Dbclick)事件
89、Private Sub CheckBox1_Click()
If CheckBox1.Value Then
MsgBox "333"
Else
MsgBox "666"
End If
End Sub
本段的主要用意在于明白了If CheckBox1.Value Then与If CheckBox1.Value=True Then
90、Timer是计时器,功能是按指定时间间隔产生定时事件
91、在一个语句要分行显示的地方加一个或多个空格,加一个下划线_然后回车转入下一物理行,作用在于代码一行写不下时续行,程序代码中一行较短时可加:把多行连成一行显示
92、if a>15 then
b=10
else
b=100
end if
可改为如下if语句
b=iif(a.15,10,100)
93、F12用于启动另存为对话框
94、x=shell(calc.exe,1)可打开计算器程序
95、call语句格式:Call<子过程名>[(<实际参数表>)]如果过程本身没有参数,则实参和括号可省略,并报参数放在括号中,另一个调用Sub过程的方法是: <子过程名>[<实际参数表>]比前一个少了Call和括号,子过程调用语句的实参在数目、类型、排列上与子过程定义语句的形式参数表一致
96、自定义函数一例,求abc三个数的平均
Private Function Passed(By Val a As integer, By Val b As integer, By Val c As integer)
ave=(a+b+c)/3
End Sub
在定义时必须向函数过程名赋值,而子程序名不能赋值
97、在工作表任意单元格输入=Cell("filename")可获得文件的完整路径、文件名和工作表名
98、在打开Excel文件时按住Shift键,将不运行VBA过程,可防止宏病毒,单击文件 关闭命令,在点关闭时按住Shift键将在不运行VBA过程的情况下关闭工作簿,可防止关闭时自动运行的宏病毒。
99、让一个变量得到单元格A1到A5的总和(变量设为X),
X=Sum(Range(“A1:A5”)) 错
X=Application.WorksheetFunction.Sum(Range(“A1:A5”))正确
也就是说必须通过Application的WorksheetFunction属性间接调用工作表函数
100、Rem和'是注释符,注释语句是非执行语句,要养成对代码注释的习惯。

101、ActiveSheet.Next.Select选择活动工作表下一张工作表,
ActiveSheet.Previous.Select选上一张
102、单元格B2:B10数值不全为空用IF语句表达
For Each cl in ActiveSheet.Range("B2:B10")
If cl.Value <> "" then
msgbox "有非空单元格"
Exit For
endif
next
103、用Range引用单元格和单元格区域
Range("A1") 单元格A1
Range("A1:B5") 从单元格A1到B5区域
Range("A1:B5 ,B1:B7") 多块的选定区域
Range("A:A") A列
Range("1:1") 第一行
Range("A:C") A列到C列的区域
Range("1:5") 第1行到第5行的区域
Range("1:1,3:3") 第1、行
Range("A:A,C:C") A列、C列
104、用Cells及编号引用单元格
Cells(6,1)A6单元格
如果对工作表用Cells属性时不指定索引,表示引用工作表上的所有单元格,下例清除活动工作簿中工作表Sheet1上所有单元格的内容
Worksheets(“sheet1”).Cells.ClearContents
105、可用变量代入单元格索引值,故Cells属性非常适用于在单元格区域中循环,如:
For counter=1 To 20
Worksheets(“sheet1”).Cells(counter,3).value=counter
Next counter
106、引用行或列
Rows(1) 第1行
Rows 所有行
Columns(1)  第1列
Columns(“C”) 第3列
Columns 工作表上所有列
106、可用方括号将A1样式的引用或命名区域的名称括起来,作为Range属性的快捷方式,这样就不必键入Range 和引号,如
Worksheets(“sheet1”).[A1:B2].clearContents
.Value=30
107、用Offset处理按相对于其他单元格的某一位置的常用办法是使用Offset属性,本例将活动工作表上活动单元格下一行和右边三列的单元格的内容设置为下划线,如:
ActiveCell.Offset(1,3).font.Underline=XlDouble
108、把别的工作表Sheet2数据,读到当前工作表的方法列举
1)[A1]=Sheet2.[A1]    把Sheet2A1单元格的数据,读到A1单元格
2)[A2:A4]=Sheet2.[B1]  把Sheet2单元格B1的数据读到A2:到A4单元格
3)Range(B1”)=Sheet2.Range(“B1”)  把Sheet2工作表单元格B1数据,读到B1单元格
4)Range(“C1:C3”)=Sheet2.Range(“C1”)  把Sheet2工作表单元格C1数据,读到C1:C3
5)Cells(1,4)=Sheet2Cells(1,4)  把Sheet2工作表单元格D1数据,读到D1 单元格
6)Range(Cells(1,5),Cells(5,5)=Sheet2.Cells(1,5)  把sheet2工作表单元格E1数据,读到E1:E5单元格
7)Selection.Value=Sheet2.[F1]  把Sheet2 工作表单元格[F1]数据,读到任何你点选的单元格
109、Sub前有个Private表示是私有子程序,这个子程序不会出现在“宏”对话框中
110、Sub test()
ActiveSheet.Calculate
End Sub重算活动工作表
111、编程前应该尽可能地多了解Excel对象的属性、方法
112、每一个Excel对象的属性、方法的调用都要通过OLE连接的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行
113、使用With语句
Workbooks(1).Sheets(1).Range(“A1:A1000”).font.Name=”Pay”
Workbooks(1).Sheets(1).Range(“A1:A1000”).Font.Fontstyle=”Bold”…
改用With语句则运行速度加快
例:With Workbooks(1).Sheets(1).Range(“A1:A1000”).font
.Name=”Pay”
.Fontstyle= Bold”

End With
114、用set设置对象变量,以减少对象的访问,如:
Set MyRange=Workbooks(1).Sheets(1)
Mysheet.Range(“A1”).Value=100
Mysheet.Range(“A2”).Value=200
比直接用Workbooks(1).Sheets(1). Range(“A1”).Value=100
Workbooks(1).Sheets(1). Range(“A2”).Value=200运行快
115、在循环中要尽是减少对象的访问
For k=1 To 100
Sheets(“sheet1”).select
Cells(k,1).value=Cells(1,1).Value
Next k
更快的代码是
set TheValue=Cells(1,1).Value
Sheets(“sheet1”).select
For k=1 To 100
Cells(k,1).value=TheValue
116、减少对象的激活和选择
如果你是通过录制宏的来学习VBA的程序里一定充满了对象的激活和选择,如Workbooks(XXX).active 、Sheets(XXX).Select  、Range(XXX).Select等,但事实上大多数情况下这些操作不是必须的,如
Sheets(“sheet1”).Select
Range(“A1”).Value=100
Range(“A2”).Value=200
可改为With sheets(“Sheet3”)
.Range (“A1”)=100
.Range (“A2”)=200
117、关闭屏幕更新是提高运行速度的最有效的办法,推荐使用
Application.ScreenUpdate=False
程序运行后再改回来
118、VBA中默认的数据类型是Variant,你必须选择使用何种数据类型,因为Variant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能,Vba必须识别Variant类型的变量中存储了何种数据类型。
119、再列一个自定义函数计算价格为10%为运费的简单函数例子
Public Function Shipping(Price)
Shipping=Price*0.1
End Function
如还是不懂的话,将上述过程复制到模块中,然后在工作表任意单元格中输入=Shipping(C1)你就会明白
120、ActiveWindow.DisplyGridlines=False  此句用来关闭网格线。
122、Private Sub Calendar1_Click()
ActiveCell = Me.Calendar1.Value
End Sub
123、设置日历控件字号
Private Sub UserForm_Initialize()
Me.Calendar1.GridFont.Size = 14
End Sub
124、以下是从金刚金作品里提出来的部份事件代码,做得很好,值得借鉴学习:
Private Sub Workbook_Activate()
MsgBox "工作簿被切换为作用工作簿", vbInformation, "Workbook_Activate"
End Sub
Private Sub Workbook_AddinInstall()
MsgBox "激活新的加载宏时", vbInformation, "Workbook_AddinInstall"
End Sub
Private Sub Workbook_AddinUninstall()
MsgBox "取消以前选取的加载宏时", vbInformation, "Workbook_AddinUninstall"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "工作簿被关闭之前", vbInformation, "Workbook_BeforeClose"
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
MsgBox "工作簿打印之前", vbInformation, "Workbook_BeforePrint"
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "工作簿进行保存之前", vbInformation, "Workbook_BeforeSave"
End Sub
Private Sub Workbook_Deactivate()
MsgBox "工作簿切换为非作用工作簿", vbInformation, "Workbook_Deactivate"
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
MsgBox "新建工作表", vbInformation, "Workbook_NewSheet"
End Sub
Private Sub Workbook_Open()
MsgBox "打开工作簿", vbInformation, "Workbook_Open"
End Sub
Private Sub Workbook_PivotTableCloseConnection(ByVal Target As PivotTable)
MsgBox "数据透视表关闭与其数据源的连接之后", vbInformation, "Workbook_PivotTableCloseConnection"
End Sub
Private Sub Workbook_PivotTableOpenConnection(ByVal Target As PivotTable)
MsgBox "数据透视表打开与其数据源的连接之后", vbInformation, "Workbook_PivotTableOpenConnection"
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox "工作表" & Sh.Name & "切换为作用工作表", vbInformation, "Workbook_SheetActivate"
End Sub
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox "任一单元格双击鼠标之后", vbInformation, "Workbook_SheetBeforeDoubleClick"
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
MsgBox "任一单元格单击鼠标右键之后", vbInformation, "Workbook_SheetBeforeRightClick"
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
MsgBox "工作表内容进行重算之后", vbInformation, "Workbook_SheetCalculate"
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "在工作表内进行不同的操作", vbInformation, "Workbook_SheetChange"
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
MsgBox "工作表" & Sh.Name & "切换为非作用工作表", vbInformation, "Workbook_SheetDeactivate"
End Sub
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
MsgBox "按下Excel超链接之后", vbInformation, "Workbook_SheetFollowHyperlink"
End Sub
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
MsgBox "数据透视表更新之后", vbInformation, "Workbook_SheetPivotTableUpdate"
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "工作表里选取不同单元格范围时", vbInformation, "Workbook_SheetSelectionChange"
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
MsgBox "工作簿切换为作用工作簿", vbInformation, "Workbook_WindowActivate"
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
MsgBox "工作簿切换为非作用工作簿", vbInformation, "Workbook_WindowDeactivate"
End Sub
Private Sub Workbook_WindowResize(ByVal Wn As Window)
MsgBox "工作簿被打开或窗口最大化、最小化之后", vbInformation, "Workbook_WindowResize"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "选取不同单元格范围时", vbInformation, "Worksheet_SelectionChange"
End Sub
125、Rem 选定单元格的个数
Sub t()
MsgBox Selection.Cells.Count
End Sub
126、Application.OnKey "{F11}", "ccc"禁用F11
127、'选中A列除A1外的第一个非空单元格
[a65536].End(xlUp).Offset(1, 0).Select
128、Private Sub CommandButton1_Click()
On Error GoTo ad '注意后面的ad,这是错误处理的用法
i = Range("a1").Value
Sheets(CStr(i)).Select
ret = MsgBox("是否覆盖", vbYesNo, "")
If ret = vbYes Then
Range("A5:C7").Copy Sheets(CStr(i)).Range("A1") '重点在copy之后
Else
Sheets.Add.Name = i & ".2"
Range("A5:C7").Copy Sheets(CStr(i & ".2")).Range("A1")
End If
End
ad:
Sheets.Add.Name = i '工作表名的变化是可见的
Range("A5:C7").Copy Sheets(CStr(i)).Range("A1")
End Sub
129、用变量取代Sheet1中的“1”
For i = 1 To 3
Sheets("sheet" & i).Range("A2") = "1234"
Next
下面两组程序摘自杨开科的“我的自学收集资料”。我都分别进行了试用,“14、将工作薄中的全部n张工作表都在sheet1中建上链接”这段程序试用成功,但有个建议:当工作表超过一定数量时(例如超过30张),第31张则在B列反映,如此类推。
  第二组程序我则没有那么幸运了,试用不成功,不知是什么原因。请指教!
14、将工作薄中的全部n张工作表都在sheet1中建上链接
Sub test2()
Dim Pt As Range
Dim i As Integer
With Sheet1
    Set Pt = .Range("a1")
    For i = 2 To ThisWorkbook.Worksheets.Count
        .Hyperlinks.Add Anchor:=Pt, Address:="", SubAddress:=Worksheets(i).Name & "!A1"
        Set Pt = Pt.Offset(1, 0)
    Next i
End With
End Sub
32、平时只能看到表1,如要看表2和表3,只能通过表1的链接打开,且表2和表3回到表1后,又不可见。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$A$3" Then  '当点击"$A$3"单元格时...
    Sheet2.Visible = 1  '取消隐藏
  Sheet2.Activate '激活
  ActiveSheet.Range("A1").Select
End If
If Target.Address = "$A$6" Then
Sheet3.Visible = 1  '取消隐藏
Sheet3.Activate
ActiveSheet.Range("A1").Select
End If
End Sub
[ Last edited by 吾识野 on 2004-9-4 at 12:08 ]
55楼说 
吾识野:将下列代码加入sheet2,sheet3
Private Sub Worksheet_Deactivate()
Me.Visible = False
End Sub
56楼说  向EXE文件里导入数据时出错??? 请帮助解决!!改日请你吃小酒!
向EXE文件里导入数据时出错(文件是xls文件编译的EXE文件)!
Sub 导入()
    Dim Filename
    Filename = Application.GetOpenFilename(FileFilter:="Excel文件(*.xla; *.xls),*.xla;*.xls", Title:="选择Excel文档")  '选择要导入的xls文件
    If Filename = False Then Exit Sub   
    Workbooks.Open Filename, Password:=sy  '文件名有口令 */可能有错/*
    Rows("1:350").Select                    '导入行
    Application.CutCopyMode = False
    Selection.Copy
Windows("基层版V2.0").Activate          '导入的目标文件  *正确
    Sheets("SJ").Select                    '表有
    Range("A1").Select
    ActiveSheet.Paste 
Range("A1").Select
    Application.CutCopyMode = False
'    Workbooks("10401.xls").Close SaveChanges:=False  '***要关闭上面选择的文件(文件名很多都不同样)////如何解决???
End Sub
Excel基础应用实例教程
杨开科整理
1、我在单元格中填上“="现在是"&NOW()”,想显示目前的时间,为什么会变成“今天是38645.6480”,有什么办法解决吗?
方法1=now()单元格设置为你想显示的方式,如:现在是yyyy年m月d日h点m分。
方法2、直接用TEXT()函数:=TEXT(NOW(),"现在是yyyy年m月d日h点m分")
第一种方法较好,可以参与计算。
=TEXT(NOW(),"现在是 yyyy/mm/dd h:mm AM/PM")
显示现在是 2005/04/14 4:42 PM
2、自定义单元格格式    [=0]"男";[=1]"女";  则可实现输入0显示为“男”。输入1显示为“女”。
3、excel里面如何添加自定函数帮助信息呢
在VBE打开对象浏览器,找到自定函数,右键——属性中添加
4、怎么解决Excel自动将0开头的数字自动删除0?
是从“获取外部数据”导入的吗?在第3步可以选择“列数据格式”为文本,这样零就不会被删除了。
5、打开多个EXCEL文档,照理应该在状态栏显示多个打开的文档,以便各文档互相切换,但现在只能显示一个文档,必须关掉一个才能显示另一个,关掉一个再显示另一个,不知何故?
可以从“窗口”菜单中切换窗口。
或者改回你原来的样子:工具/选项/视图,选中任务栏中的窗格。
6、目的:表中>50000的单元格红色显示。做法:选择整张表,在条件格式命令中,设置了“>50000以红色填充单元格“的条件,出现的问题:表头(数值为文本)的单元格也呈红色显示。我知道,原因是因为区域选择得不对,如果只选择数字区域不会出现这种情况,如果表结构简单,则好处理,如果表格结构复杂,这样选择就很麻烦。有没有办法选择整张表,但是表头(数值为文本)的单元格不被条件格式。
答:条件格式设置公式=--A1>50000
问=--A1>50000中的--代表什么意思,
答:转变为数值.与+0,*1,是一样的效果。
7、、如何打印行号列标?
  答:文件菜单-----页面设置---工作表----在打印选项中的行号列标前打勾。
8、如何打印不连续区域?
    答:按CTRL键不松,选取区域,再点文件菜单中的打印区域--设置打印区域。
9、打印时怎样自动隐去被0除的错误提示值?
  答:页面设置—工作表,错误值打印为空白
10、如何设置A1当工作表打印页数为1页时,A1=1,打印页数为2页时,A2=2,...?
    答:插入名称a=GET.DOCUMENT(50, "Sheet1")&T(NOW()),在A1输入=a
11、Add More Levels of Undo to Excel for Windows
增加excel的后悔次数!!!excel默认的是16次,不信你试试!!!
现在我改成30次。
到注册表(不知道,在开始运行里输入regedit回车即可)
到以下位置!!!!我的是office2003!!!!在11.0处可能有所不同!
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options]
新建dword值  键名为UndoHistory  (双击名称)值为10进制,输入数值为30。即可
12、我想在几千个数据中列出没有重复的数据
答:数据_筛选_高级筛选_选择不重复记录。
13、我需要保留一位小数,不管后面是什么数字,超过5或不超过5,都向前进一位.
例如:329.99----->330.00
329.84------------>329.90
329.86------------>329.90
答:=roundup(*,2)或=round(a1+0.04,1)
14、D列为字符型值,转换为数型的的值。如何进行操作
答: 复制任一空单元格。选中D列,选择性粘贴,加。
15、在Excel中如何输入带有上、下标的符号
答:选中,设置单元格格式,上标或下标。
16、怎样使一个单元格里的数据,变成每个数字占一个单元格啊?
答:《数据》->分列->选中固定宽度,点击《下一步》,在预览分列效果中的数字中间依次点击,点击《完成》按钮,OK!
17、将一列文本格式的数据转换为常规
答:数据—分列,一直点下一步,最后一步选常规就行了。
复制(空单元格)或1,选择性粘贴加或乘除。
18、小于10以下用红色,以上用蓝色标识单元格
答:自定义格式 [红色][<=10];[蓝色][>10]
也可设定两组条件格式。
19、如何用函数来获取单元格地址
答:=ADDRESS(ROW(),COLUMN())
20、求A1:B10中A列等于1的对应B列中的最小值
答:=min(if(a1:a10=1,b1:b10))
输入后按ctrl+shift+enter完成。
21、怎样定义格式表示如00062920020001、00062920020002只输入001、002
答:格式----单元格----自定义----"00062920020"@----确定
22、如何统计A1:A10,D1:D10中的人数?
答:=COUNTA(A1:A10,D1:D10)
23、A2单元格为 2005-3-24 10:00:00 想在B2单元格通过公式转换成 2005-3-24 23:59:59 如何转?
①=(TEXT(A2,"yyyy-m-d")&" 23:59:59")*1
然后设置为日期格式
②=INT(A2)+"23:59:59"
再把单元格格式设置一下。
③=INT(A2+1)-"0:0:1"
24、我用方向键上下左右怎么不是移动一个单元格,而是向左或向下滚动一屏,好奇怪啊,平时都好好的,有没有解决的办法?
答:是不是按下了ScrollLock键。
25、复制粘贴中回车键的妙用
1、  先选要复制的目标单元格,复制后,直接选要粘贴的单元格,回车OK;
2、先选要复制的目标单元格,复制后,选定要粘贴的区域,回车OK;
3、先选要复制的目标单元格,复制后,选定要粘贴的不连续单元格,回车OK。
26、摄影功能
用摄影功能可以使影像与原区域保持一样的内容,也就是说,原单元格区域内容改变时,影像也会跟着改变,是个很好用的功能。
27、定义名称的妙处
名称的定义是EXCEL的一基础的技能,可是,如果你掌握了,它将给你带来非常实惠的妙处!
1. 如何定义名称
插入 – 名称 – 定义
2. 定义名称
建议使用简单易记的名称,不可使用类似A1…的名称,因为它会和单元格的引用混淆。还有很多无效的名称,系统会自动提示你。
引用位置:可以是工作表中的任意单元格,可以是公式,也可以是文本。
在引用工作表单元格或者公式的时候,绝对引用和相对引用是有很大区别的,注意体会他们的区别 – 和在工作表中直接使用公式时的引用道理是一样的。
3. 定义名称的妙处1 – 减少输入的工作量
如果你在一个文档中要输入很多相同的文本,建议使用名称。例如:定义DATA = “I LOVE YOU, EXCEL!”,你在任何单元格中输入“=DATA”,都会显示“I LOVE YOU, EXCEL!”
4. 定义名称的妙处2 – 在一个公式中出现多次相同的字段
例如公式=IF(ISERROR(IF(A1>B1,A1/B1,A1)),””, IF(A1>B1,A1/B1,A1)),这里你就可以将IF(A1>B1,A1/B1,A1)定义成名称“A_B”,你的公式便简化为=IF(ISERROR(A_B),””,A_B)
5. 定义名称的妙处3 – 超出某些公式的嵌套
例如IF函数的嵌套最多为七重,这时定义为多个名称就可以解决问题了。也许有人要说,使用辅助单元格也可以。当然可以,不过辅助单元格要防止被无意间被删除。
6. 定义名称的妙处4 – 字符数超过一个单元格允许的最大量
名称的引用位置中的字符最大允许量也是有限制的,你可以分割为两个或多个名称。同上所述,辅助单元格也可以解决此问题,不过不如名称方便。
7. 定义名称的妙处5 – 某些EXCEL函数只能在名称中使用
例如由公式计算结果的函数,在A1中输入’=1+2+3,然后定义名称 RESULT = EVALUATE(Sheet1!$A1),最后你在B1中写入=RESULT,B1就会显示6了。
还有GET.CELL函数也只能在名称中使用,请参考相关资料。
8. 定义名称的妙处6 – 图片的自动更新连接
例如你想要在一周内每天有不同的图片出现在你的文档中,具体做法是:
8.1 找7张图片分别放在SHEET1 A1至A7单元格中,调整单元格和图片大小,使之恰好合适
8.2 定义名称MYPIC = OFFSET(SHEET1!$A$1,WEEKDAY(TODAY(),1)-1,0,1,1)
8.3 控件工具箱 – 文字框,在编辑栏中将EMBED("Forms.TextBox.1","")改成MYPIC就大功告成了。
这里如果不使用名称,应该是不行的。
此外,名称和其他,例如数据有效性的联合使用,会有更多意想不到的结果。
28、
29、第一列每个单元格的开头都包括4个空格,如何才能快速删除呢?
查找替换最方便
30、如何快速地将表格中的所有空格用0填充?其中空格的分布无规律!
选中数据所在区域 》定位》空值》输入0》ctrl+enter
31、我在1行~10行中间有5个隐藏的行,现在选择1行~10行-复制,然后到另一张表格,右键单击一单元格,粘贴,那5个隐藏的行也出现了,请问怎样不让这5个隐藏的行出现呢?
答:Ctrl+*
工具、自定义_编辑_选定可见单元格。
32、在某个单元格中(如A1)输入一个四则运算表达式"3*(2+5)+6/3",要求函数格式 MyFun(A1)返回计算结果
Function MyFun(X As Range)
    MyFun = Evaluate(X.Formula)
End Function
33、MATCH

返回在指定方式下与指定数值匹配的数组(数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。)中元素的相应位置。如果需要找出匹配元素的位置而不是匹配元素本身,则应该使用 MATCH 函数而不是 LOOKUP 函数。
语法

34、显示比例小于40%即出现了“名称”
35、如何求出一个人到某指定日期的周岁?
=DATEDIF(起始日期,结束日期,"Y")
36、假如A栏里有任一单元格有"$"字符串,则等于1,否则等于0 公式如何写?
=IF(COUNTIF(A:A,"*$*")>0,1,0)
=(countif((A:A,*$*)>0)+0
37、如何限制单元数值上限(有公式的情况下)?
规定上限数值后,公式中任何数值改变都不会让此数值变化更大,超过限制数值?
=Min(公式,10),不超过10
38、在A1单元格中输入AA,  B1中要得到第几列.
=COLUMN(INDIRECT(A1&"1"))
39、"++"以及"--"分别代表什么意思?
"++" = "=+"
"--" = "="
40、【选择性粘贴】里的【跳过空单元】到底有什么用啊?
跳过空格是指:  跳过剪切板上的空格,只复制,并保持他们的位置,粘贴到其他地方.    而不是指被粘贴的单元格.
这个功能非常有用,可以防止空白单元格替换原来的数据
40、DATEDIF计算两个日期之间的天数、月数或年数。提供此函数是为了与 Lotus 1-2-3 兼容。
语法
DATEDIF(start_date,end_date,unit)
Start_date  为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅 NOW。
End_date  为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit  为所需信息的返回类型。
Unit返回"Y"时间段中的整年数。"M"时间段中的整月数。"D"时间段中的天数。"MD"start_date 与 end_date 日期中天数的差。忽略日期中的月和年。"YM"start_date 与 end_date 日期中月数的差。忽略日期中的日和年。"YD"start_date 与 end_date 日期中天数的差。忽略日期中的年。
说明
Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日期系统,则 Excel 会将 1904 年 1 月 1 日保存为系列数 0,(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中 Excel 将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795 天。请查阅 Microsoft Excel 如何存储日期和时间。
Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅 NOW。 示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1 日和 2002 年 8 月 15 日之间有 440 天。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中的年和月。
41、如何在EXCEL表格的一个单元格中设定校验。比如,单元格均为手工输入,某单元格必须等于其他几个单元格之和,如不等,则该单元格显示为红色。
用条件格式公式=D1<>SUM($A1:$C1)
42、A1]=abcabca
求a在单元格[A1]内出现次数?
=LEN(A1)-LEN(SUBSTITUTE(A1, "a", ""))
43、20040404如何转为2004-4-4
=text(a1,"0000-00-00")
TEXT(Z12,"????-??-??")
=LEFT("20040404",4)&SUBSTITUTE(RIGHT("20040404",4),0,"-")
使用分列最好
44、假如A2单元格有内容,就在E2单元格里面填上今天的日期."2005-5-30",如果明天,就填明天的日期.2005-5-31,但昨天的日期."2005-5-30",不改变.
建议使用VBA,用循环引用也可以:
工具—选项—重新计算—迭代计算—最多迭代次数1
=if(a2="","",if(e2="",now(),e2))
45、当你的领导或者同事要使用你的机器发现面目全非,自定义太多弄的自己都头大了,这时你想恢复EXcel的本色却急的满头大汗?
这时最能解决这些问题的就是用户设置保存向导了.(要提前做)
在程序---OFFICE工具中可以找到它,他有保存本机设置和把设置应用到本机两个选项.多保存几个,方便在不同的个性菜单中切换
46、我现在要在一个22位的数值中,提取其中第10,11,12位的数字,不知道可有什么好的方法
=MID(A1,10,3)
我想计算总米数=卷长*卷数, 但由于原数据库中卷长带有单位(如:1000m), 可不可以不需去掉单位直接用函数得出总米数?
=substitute(a2,"m",)*b2
47、在某格中输入一串数字,如何使它能象输入密码一样显示******呢?
如果需要输入负数、文本时,也出现******,则自定义格式为:
**;**;**;**
48、用函数得出带完整路径的文件名
=CELL("filename")
49、“定义名称”的方法解除嵌套函数的限制 
      EXCEL中一个众所周知的限制是你不能嵌套超过7层函数.例如下面的公式是错误的,因为限制被超过.
=IF(Sheet1!$A$4=1,11,IF(Sheet1!$A$4=2,22,IF(Sheet1!$A$4=3,33,
IF(Sheet1!$A$4=4,44,IF(Sheet1!$A$4=5,55,IF(Sheet1!$A$4=4,44,
IF(Sheet1!$A$4=5,55,IF(Sheet1!$A$4=6,66,IF($A$4=7,77,FALSE))))))))
通常的方法,如果你有一个公式超过这个限制,你会考虑用VBA代替.然而,如果你不想使用VBA,你可以通过对公式的一部分”定义名称”来解决这种限制.

我们利用一个IF嵌套公式来测试
IF A4 = 1 Then 11
Else If  A4 = 2 Then 22
Else If  A4 = 3 Then 33
Else If  A4 = 4 Then 44
...
Else If  A4 = 13 Then 130  Else "Not Found"
当然在实践应用中,我们最好利用VLOOKUP这个函数去实现结果,但这里我们的目的是做个演示.首先,我们定义一个名叫”ONE TO SIX”的名称, 里面包括公式:
=IF(Sheet1!$A$4=1,11,IF(Sheet1!$A$4=2,22,IF(Sheet1!$A$4=3,33,
IF(Sheet1!$A$4=4,44,IF(Sheet1!$A$4=5,55,IF(Sheet1!$A$4=4,44,
IF(Sheet1!$A$4=5,55,IF(Sheet1!$A$4=6,66,FALSE))))))))
接着,再定义另一个名叫”SEVERTOTHIRTEEN”的名称,里面包括公式:
=IF(Sheet1!$A$4=7,77,IF(Sheet1!$A$4=8,88,IF(Sheet1!$A$4=9,99,
IF(Sheet1!$A$4=10,100,IF(Sheet1!$A$4=11,110,IF(Sheet1!$A$4=12,120,
IF(Sheet1!$A$4=13,130,"NotFound")))))))
最后,在B4单元格中输入下面的公式:
=IF(OneToSix,OneToSix,SevenToThirteen)
这样就解决了被嵌套函数的限制.因为公式中没有一个单独的部分超过限制,即使是”各个组成部分的集合”也没有超过限制.
当你编制一个超过限制的嵌套函数时可以使用这种方法.————————zhdi
50、A1:A10数字显为文本格式时,如何求和
=SUMPRODUCT(A1:A10+0)
51、工作表名设为变量
=INDIRECT("月份!"&ADDRESS(ROW(),COLUMN()))
此公式放在A1单元格,则是对1月A1单元格的引用,如1月A1单元格为10,则返回10。
=INDIRECT("月份"&E$1&"!"&ADDRESS(ROW(),COLUMN()))
此公式将工作表名设为变量,变量为当前表的E1单元格的值,如E1为2,则引用月份2表中相对应的值。
52、如何把“2005年5月1日”转换成“20050501”?
=YEAR(A1)&TEXT(MONTH(A1),"00")&TEXT(DAY(A1),"00" )
YEAR(A1)&IF(MONTH(A1)<10,"0"&MONTH(A1),MONTH(A1))&IF(DAY(DAY(A1)<10),"0"&DAY(A1),DAY(A1))
=TEXT(A1,"yyyymmdd")
或者自定义格式:yyyymmdd
53、今天是10月31日,我希望一个月后应该是11月30日
工具_加载宏VBA 分析工具库
=edate(today(),1)
54、trim函数的说明是如果是英文字符间有多个空格时会保留一个空格,但为何中文之间的空格也不能全部去掉呢?
要把字符(无论中、英文)之间的空格全部去掉, 公式为 :
=SUBSTITUTE(A1," ","")
但此公式只能消除CHAR32空格, 你附件单元格A1的例子中, 包含有CHAR160空格, 和CHAR32空格
公式要改为 :
=SUBSTITUTE(SUBSTITUTE(A1," ",""),CHAR(160),"")
单元格A1的例子为 :  YES
1] 消除空格, B1输入公式 :
=SUBSTITUTE(SUBSTITUTE(A1," ",""),CHAR(160),"")
返回 YES
2] 查看字符串字数
A2, 输入公式 :  =LEN(A1)          返回 13
B2, 输入公式 :  =LEN(B1)          返回 3
结果证明B1巳没有空格了.
3] 查看单元格数据的空格 :
A3, 输入公式右拖至N3 :  =CODE(MID($A1,COLUMN(A:A),1))
返回 : 160,32,160,160,32,160,160,32,160,89,69,83,160,#VALUE!
A4, 输入公式右拖至D4 :  =CODE(MID($B1,COLUMN(A:A),1))
返回 : 89,69,83,#VALUE!
结果证明B1, CHAR160空格, 和CHAR32空格, 巳消除了.
55、计算B列最后一个有数据(不含‘ 空格)单元格的行号
=MATCH("*",$B:$B,-1)
56、函数创建链接
=HYPERLINK("[Book1.xls]sheet3!A3","点击后链接到表3的A3")
57、把A列后面统一加“-1”,怎样自动加不用手工逐个加?有没有快速方法?
选中A列,点右键选"设置单元格格式","自定义",类型G/通用格式后加"-1"
58、大家知道,通过自定义格式常常可以解决一些显示问题:如需要在单元格中显示为:123人,456.00元、ABCD00789,实际上单元格内容仅仅为:123、456、789,这样的问题我们常常都通过自定义格式来实现,在显示上能够满足要求。
但如果有这样一个需求:需要将显示内容直接转换成单元格实际内容?那又该如何快速转换呢?
1、选择区域ctrl+C连续两次,然后选择office粘贴板中的数据框中的下拉按钮,出现快捷菜单,选粘贴,然后右键点击选择区域,选择性粘贴-〉文本。
不过2000的没有这个选项,,在2000用同样的方法试验发现.选择区域ctrl+C连续两次,然后直接粘贴,再删除,这时再选择性粘贴,选文本,就是了.
2、自定义一个函数如下:
Function abc(myRange As Range)
    abc = myRange.Text
  End Function
然后调用
3使用Get.Cell(53,A1)也可以
4、先复制到记事本再复制回EXCEL
原理:复制到记事本的是excel中的显示文本。
59、在工作表中点击菜单 文件->发送->邮件收件人->以附件形式发送收件人一栏请填写:邮箱地址,,点击发送可以了.
或新建邮件,收件人一栏请填写: 邮箱地址,然后用鼠标把那个 excel 文件拖到我的名字下面就可以点击发送了.
60、求非空单元格数量
公式计算出来的数据,COUNTA不能用的(否则空字符也计算进去了)
=COUNTIF($E$3:$E$65536,"?*")
强制计数至少1个字符的单元格数。
61、(精)  动态求和公式,自A列A1单元格到当前行前面一行的单元格求和.
=SUM(INDIRECT("A1:A"&ROW()-1))
62、在使用SUM函数在单元格中输入超过30个参数时,你将得到一个"参数太多"的错误提示。
解决办法:在引用参数的两边多加一个括号,这时,SUM把括号内的最多可达254个参数当成一个处理。(主要是受公式长度限制,理论上可以达到无数个)
63如果您觉得公式复杂了,或是不直观
偶给你提供两个捷径:
方法一:选择公式单元格-〉菜单栏-〉[工具]-〉[公式审核]-〉[公式求值]
然后按照导向提示,一步步地观察公式求值的过程。(2003版适用)
方法二:选择公式单元格-〉选取编辑栏或F2-〉用鼠标置亮公式中你想查
看的那段-〉按F9,会显示该段的计算结果。
64请问有没有返回工作表名称的函数?
插入—名称—定义:
sh=replace(get.document(1),1,find("]",get.document(1)),)&t(now())
单元格输入=sh
GET.DOCUMENT是宏表函数,当数据变动时无法自动计算,now()是易失性函数,任何变动都会强制计算,宏表函数所以加上now()就可以自动重算了,T()用来将now()产生的数值转化为空文本。
65、显示当前工作表的表名
=MID(CELL("filename"),FIND("]",CELL("filename"))+1,255)
66、我要自动生成数据在K29+010~K29+600之间的数据(显示为K29+XXX)
=TEXT(INT(RAND()*591)+10,"K29+000")
67、我想把列P1~P60的数据引用到行U1~CB1,本来想用公式=$P1拉动复制,结果不行。
U1=INDIRECT("P"&COLUMN()-20),向右拉
68、
姓名 外语 数学
王 86
李 95
张 80

姓名 外语 数学
李 95 90
张 80 80
王 86 75
将表1的姓名导入自定义序列,在表2按此自定义序列排序
或使用vlookup公式
表1的C2
=vlookup(a2,表2!a:c,3,0)
如何将2个排列顺序不同的表统一一下
69、如果你要在A3的前面插入100行,可以这样:
在名称框输入  3:103----回车-----ctrl+shift+"+"(大键盘)
70、VBA从哪学起
1、录制宏;
2、数据类型(主是整型和字符串型);
3、程序结构(主要是分支,判断,循环);
4、EXCEL对象(单元格,工作表,工作薄)
71、如何实现求平均值时只对不等于零的数求均值?
average(if(a1:a5>0,a1:a5))
72、D1输入姓名,A列中相同的姓名按设定和条件格式显示
=find(D1,$A$1)
73、excel中插入/名称/指定(应用)(标志)的用途是什么?
1、指定的用法
例如:在A1:A3中输入了AAA,BBB,CCC
选中A1:D3》插入》名称》指定》最左列》确定
这样就一次性定义了3个名称
AAA=B1:D1
BBB=B2:D2
CCC=B3:C3
2、应用的用法
在A4输入 =sum(B1:D1,B3:D3)
然后 插入》名称》应用
会将公式中的引用用相应的名称替换。
74、请教如何筛选出特殊颜色的数据。
定义名称.X=GET.CELL(24,单元格),辅助列=X
按辅助列筛选

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多