ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[转帖] excelhome在股票中的应用摘录集中营(每次记录一点,学一点)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 07:53 | 显示全部楼层
深入理解HTTP协议(转)

深入理解HTTP协议(转) - 苏勇的blog - BlogJava.rar

536.27 KB, 下载次数: 100

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 08:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
JS操作JSON总结


JS操作JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

    本文主要是对JS操作JSON的要领做下总结。

    在JSON中,有两种结构:对象和数组。

    1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

    var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};

    2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

    例如:

    var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];

    为了方便地处理JSON数据,JSON提供了json.js包,下载地址:http://www.json.org/json.js

    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

    JSON字符串:

    var str1 = '{ "name": "cxh", "sex": "man" }';

    JSON对象:

    var str2 = { "name": "cxh", "sex": "man" };

    一、JSON字符串转换为JSON对象

    要运用上面的str1,必须运用下面的要领先转化为JSON对象:

    //由JSON字符串转换为JSON对象

    var obj = eval('(' + str + ')');

或者

    var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

    或者

    var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

    然后,就可以这样读取:

    Alert(obj.name);

    Alert(obj.sex);

    特别留心:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

    二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

    例如:

    var last=obj.toJSONString(); //将JSON对象转化为JSON字符

    或者

    var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

    alert(last);

    留心:

    上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。

JS操作JSON总结 - 代岳强 - 博客园.rar

113.1 KB, 下载次数: 69

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 08:52 | 显示全部楼层
      '撰写:老朽      '网址:http://Club.ExcelHome.net
      '日期:2009-7-24 下午 03:48:03
Option Explicit
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-7-24 下午 03:48:03

Private Sub sht_Change(ByVal Target As Range )
    Dim
s As New ScriptControl
    On
Error GoTo ren
    Set
myc.sht = Nothing
    Set myc = Nothing
    Set s = CreateObject("MSScriptControl.ScriptControl")
    '  Set s = CreateObject ("ScriptControl"):前面的可以省略,'创建一个ScriptControl对象

    s.Language = "VBScript"    '通知系统,脚本语言为VBScript
    s.AddObject "ActiveWorkbook", ActiveWorkbook    '由于VBS无法直接识别出EXCEL对象保留字ActiveSheet,
    '所以必须这样来处理,通知VBS, ActiveSheet就是ThisWorkbook.ActiveSheet,也就是本工作簿中活动的工作表对象
    '    同样,如果在脚本中将要引用Thisworkbook对象,也必须事先设定.AddObject "Thisworkbook", ThisWorkbook  通知VBS,代码中的ThisWorkbook就是本工作簿对象
    s.AddObject "Application", Application
    s.AddObject "Activesheet", ActiveSheet
    s.AddObject "sheets", Sheets
    s.AddObject "cells", Cells
    s.addcode mycc    '往脚本中添加代码

    s.Run "xi"    '运行刚才添加的代码,从这可以看出,你刚刚添加的代码,肯定是 类似 Sub xi()的一段代码
    s.Reset  '这个应该是复位吧,没有怎么用过,老朽一般是这样用    Set s = Nothing
ren:
End Sub
编号:463227

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 09:03 | 显示全部楼层
JS控件的方法和属性

http://blog.csdn.net/klarclm/article/details/7629880
随着动态网页的出现,脚本语言已经被越来越多的人认识、接受并撑握。在程序中加入对脚本的支持一方面可以最大限度的扩展程序的应用范围,另一方面也方便程序员利用现有脚本提供的一些特别的功能(如正则表达式等)。下面结合我个人的一点经验谈一谈这方面的应用。
很显然要自己去实现一个脚本解释器是不现实的。好在已经有了可以复用的组件,那就是Microsoft ScriptControl。这是一个ActiveX控件,随Windows2000一起发布,如果要在2000以前的Windows中使用则需要安装该控件(可以到MS的网站上找到)。
ScriptControl接口
属性名称
类型
备注
AllowUI
BOOL
检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面元素不可见。
CodeObject
Object
脚本暴露给宿主调用的对象。只读。
Modules
Modules
宿主提供给脚本的组件库模块。只读。(COM组件通常都是以对象收集的形式向用户提供可以留给用户二次开发的对象集合,每一个收集即一个Modules)
Language
String
设置或获取脚本引擎解释的语言,例如:VBScript、JScript。
Name
String
脚本引擎的名称。只读。
Procedures
Procedures
返回模块中定义的过程的集合
SitehWnd
HWND
在脚本中显示UI的父窗口句柄
State
Enum
设置或返回控件的状态,如果为0,控件只执行语句但不转发事件,为1则为加入的本控件接受的对象转发事件。
Timeout
Long
控件的执行脚本的超时值,-1表示不超时
UseSafeSubset
BOOL
设置或返回宿主程序是否关心安全。宿主程序的安全级别可以从此属性设置
Error
Error
错误对象,发生错误时,此属性返回一个错误对象

方法名称
参数
功能
AddCode
Code As String
往脚本引擎中加入要执行的脚本
AddObject
Name As String, Object As Object, [AddMembers As Boolean = False]
往脚本引擎加入一个对象,以便在脚本中可以使用该对象提供的方法等。
Eval
Expression As String
表达式求值
ExecuteStatement
Statement As String
解释并执行脚本语句
Reset

丢弃所有的对象和代码,将State属性置0。
Run
ProcedureName As String, ParamArray Parameters() As Variant
运行一个指定的过程

事件名称
功能
Error
有错误发生时激发该事件
TimeOut
执行过程超时时发生

一般使用方法
1、在程序中加入ScriptControl
2、定义一个ScriptControl的实例
3、调用AddCode等方法向脚本引擎中加入要执行的脚本。
4、调用Run执行要执行的脚本函数。
宿主与脚本的通讯
1、  宿主调用脚本:这个过程比较简单,只要调用Run就可以将参数传递到脚本。
2、  脚本调用宿主:在初始化过程中调用AddObject接口,将宿主的一个或多个对象暴露给脚本,这时就可以在脚本中调用宿主对象的方法。在VC++中这个对象不是普通的C++类,它必须支持自动化,在脚本中也只能调用对象中自动化接口(在VB中这个个程相对比较简单)。
脚本调试
任何人写的代码都不可能一次就很完美,但是脚本由于执行的位置特殊,调试方法也不一样。首先下载一个脚本调试器(我用的是Microsoft Script Debugger, 在MS网站有下载,另据说其它的如VJ++也可以),安装以后在菜单上没有启动菜单。
调试器的启动
在一般的高级语言中都可以方便的设置断点,但是在启动脚本调试器以前如何开始调试呢?在IE中脚本出错会自动提示是否调试,还可以在脚本中加入中断代码(VBScript: Stop JavaScript: debugger),但是在ScriptControl还需要修改一下注册表才可以,你需要将HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings下的JITDebug的值改为1(默认为0)
示例代码下载在VC中使用ScriptControl例子:  ScriptDemo.rar



TA的精华主题

TA的得分主题

发表于 2013-8-21 09:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 17:43 | 显示全部楼层
自定义右键菜单


      前面说过了自定义菜单与工具栏,如果大家利用好了,就可以很方便地让别人使用你编辑好的,功能了。而这一贴要讲的,利用右键的菜单,让调用功能更为方便。
      当我们使用右键时,Excel相对应都会有一些功能在右键的菜单中出现,比如右击单元格时有设定单元格的功能,右击行号与列标时,有设定行高与列宽的功能,那么,我们也可以相应在我们需要的时候,将功能将入右键的菜单中,方便调用,比如下面说的自定义宏——合并复制选择单元格的内容,即可以加入到在右击单元格时产生的右键菜单中。
      其实这些菜单的使用方法和前面将的菜单与工具栏是类似的,工具栏对应的是CommandBars对象,菜单对应的是CommandBarControl对象,
CommandBarControl 对象中又分有三种
     1).ComandBarButton(按钮控件)
     2).CommandBarComboBox(组合框控件)
     3).CommandBarPopup(弹出式控件)
下面给出一段程序,在表格中列出全部的弹出式控件的名称及项目等内容。
      Sub ListPopups()
            Dim ctl As CommandBarControl
           Dim cb As CommandBar
           Dim intRow As Integer 'Tracks row in worksheet
           '下面一行是检查当前工作表是否没有内容
           If Not IsEmptyWorksheet(ActiveSheet) Then Exit Sub
           On Error Resume Next
           Application.ScreenUpdating = False
           Cells(1, 1).Value = "CommandBar"
           Cells(1, 2).Value = "Control"
           Cells(1, 3).Value = "FaceID"
           Cells(1, 4).Value = "ID"
           Range("A1:D1").Font.Bold = True
           intRow = 2
           For Each cb In CommandBars
               Application.StatusBar = "正在处理控制... " & cb.Name
               'Only list command bar if type is Popup
               If cb.Type = msoBarTypePopup Then
                       Cells(intRow, 1).Value = cb.Name
                       intRow = intRow + 1
                      'List controls on command bar
                     For Each ctl In cb.Controls
                           Cells(intRow, 2).Value = ctl.Caption
                           ctl.CopyFace
                           If Err.Number = 0 Then
                                 ActiveSheet.Paste Cells(intRow, 3)
                                Cells(intRow, 3).Value = ctl.FaceId
                           End If
                          Cells(intRow, 4).Value = ctl.Id
                          Err.Clear
                          intRow = intRow + 1
                     Next ctl
               End If
          Next cb
               Range("A:B").EntireColumn.AutoFit
               Application.StatusBar = False
      End Sub
'检查当前工作表是否有内容的函数
Function IsEmptyWorksheet(sht As Object) As Boolean
If TypeName(sht) = "Worksheet" Then
If WorksheetFunction.CountA(sht.UsedRange) = 0 Then
IsEmptyWorksheet = True
Exit Function
End If
End If
MsgBox "请生成一个空的工作表!", vbCritical, _
"Warning"
End Function
从上面的程序可以让我们了解各种情况下的弹出菜单,只要通过名称及其相应的功能,我们就可以和现实中的操作对比,来获得需要的弹出菜单名称,比如单元格——Cell,行——Row等。之后我们就可以将自定义的项目加入对应的菜单中了。以下是我现实合并复复增减菜单项目的代码,其余代码略过:
Sub Menu_Del()
Dim N
N = Application.CommandBars("Cell").Controls.Count
For I = 1 To N
'当发现右键菜单中有"合并复制(&A)"项时将其删除
If Application.CommandBars("Cell").Controls(I).Caption = "合并复制(&A)" Then
Application.CommandBars("Cell").Controls(I).Delete
'下面这句是重置菜单,但个人认为还是用上面的方法比较好
'Application.CommandBars("cell").Reset
End If
Next
End Sub
Sub Menu_Add()
Dim N, I, Cmb As CommandBarControl
N = Application.CommandBars("Cell").Controls.Count
For I = 1 To N
If Application.CommandBars("Cell").Controls(I).Caption = "合并复制(&A)" Then
Exit Sub
End If
Next
Set Cmb = Application.CommandBars("cell").Controls.Add(Type:=msoControlButton)
With Cmb
.BeginGroup = True
.Caption = "合并复制(&A)"
.OnAction = "UnionCopy"
.FaceId = 159
End With
End Sub
以上两个程序的实例,请到我本站中的自定义宏项里下载——内置菜单与合并复制。
到此贴,自定义的内容已基本完成,而下面的自定义功能只是让大家多感受一些编程的魅力——只有想不到,没有做不到,而下面的功能的具体实现方法我也不是能给大家解释得很清楚,因为大多是基于类模块与API的应用,我也只能将相关的原代码贴出来,与大家分享!
自定义快捷键

     前面我们已说明的怎么我们的加载宏自动生成一些菜单来调用我们编辑的功能,而接下来,我们还要进一步添加一个功能,即用快捷键来调用宏。
用来Excel的朋友都或多或少使用过快捷键吧,比如保存Ctrl+S,那怎么给我们的宏也加上快捷键呢,其实也很简单,只要在文件打开是用Application.OnKey定义我们的快捷键即可,下面是OnKey方法在Excel帮助中的内容:
当按特定键或特定的组合键时运行指定的过程。
expression.OnKey(Key, Procedure)
expression 必需。该表达式返回一个 Application 对象。
Key String 类型,必需。用于表示要按的键的字符串。
Procedure Variant 类型,可选。表示要运行的过程名称的字符串。如果 Procedure 参数为空文本 (""),则按 Key 时不发生任何操作。OnKey 方式将更改击键在 Microsoft Excel 中产生的正常结果。如果省略 Procedure 参数,则 Key 产生 Microsoft Excel 中的正常结果,同时清除先前使用 OnKey 方法所做的特殊击键设置。
说明
Key 参数可指定任何与 Alt、Ctrl 或 Shift 组合使用的键,还可以指定这些键的任何组合。每一个键可由一个或多个字符表示,比如 "a" 表示字符 a,或者 "{ENTER}" 表示 Enter。
若要指定按对应的键(例如 Enter 或 Tab)时的非显示字符,请使用下表所列出的代码。表中的每一代码代表键盘上的一个对应键。
键 代码  
{BACKSPACE} or {BS}——Backspace  
{BREAK}——Break  
Caps Lock——{CAPSLOCK}  
{CLEAR}——Clear  
Delete 或 Del——{DELETE} 或 {DEL}  
End——{END}  
~(波形符)——Enter  
Enter(数字小键盘)——{ENTER}  
{ESCAPE} 或 {ESC}——Esc  
{F1} 到 {F15}——F1 到 F15  
{HELP}——Help  
Home——{HOME}  
{INSERT}——Ins  
Num Lock——{NUMLOCK}  
Page Down——{PGDN}  
{PGUP}——Page Up  
{RETURN}——Return  
{SCROLLLOCK}——Scroll Lock  
Tab——{TAB}  
向上键——{UP}  
{DOWN}——向下键  
{RIGHT}——向右键  
向左键——{LEFT}  
还可指定与 Shift 和/或 Ctrl 和/或 Alt 组合使用的键。若要指定与其他键组合使用的键,可使用下表。
要组合的键 在键代码之前添加  
Shift——+(加号)  
Ctrl——^(插入符号)  
Alt——%(百分号)  
若为特定字符指定处理过程(如 +、^、% 等等),可将此字符用圆括号括起。有关详细信息,请参阅示例。
示例
本示例为 Ctrl+ 加号分配“InsertProc”过程,并为 Shift+Ctrl+ 向右键分配“SpecialPrintProc”过程。
Application.OnKey "^{+}", "InsertProc"
Application.OnKey "+^{RIGHT}", "SpecialPrintProc"
本示例将 Shift+Ctrl+ 向右键重新设为正常的含义。
Application.OnKey "+^{RIGHT}"
本示例将 Shift+Ctrl+ 向右键设为不发生任何操作。
Application.OnKey "+^{RIGHT}", ""
        这样,我们调用宏是不是又方便了不少,还有,要注意的一点是,在关闭加载宏时,要记得将快捷键还原哦。
VBA之类模块

      说真的,类和类模块我也是接触得不多,不久,应用也很少,对这方面的了解也很少,这里只能将我所理解的这一点点,和大家一请交流:
      什么是类:将用户定义类型和过程组织在一起即是类,类是一个模板,对象是由它而创建的。
      什么是类模块:含有类定义的模块,包括其属性和方法的定义。
怎么建立类模块:建立类模块的方法和建立模块的方法是一样的,只是选择建立的项目是类模块。
上面就是现在我对类模块的了解,不多,甚至自己也有很多不理解的地方,在类模块的使用方面,记忆里曾经在学VB时编一个贪吃小蛇时,用过类来实现队列(先进先出的一种数据结构),之后就仅仅用类创建一个Application 对象来即时监控Excel,下面就将这个应用的代码列给大家。
还记得在自定义菜单中定义的名为“Excel各页名”的宏吧,当没有可见的工作簿时,如果运行此宏就会出错,因为无法写入内容。上贴我们已给这个宏加入了快捷键的功能,使它更方便的使用,而这一贴我们就要利用类模块,让它更完美。
其实只要在这个宏的代码里加入检验的代码,即可以不会出错,但实际,我们还是运行了这个宏。细心的朋友有没有发现,当Excel无可见工作簿时,一些工具栏和菜单里的项目是不可使用的,那我们今天也来实现这个功能。
       首先要建立一个类模块,名为MenuClass,注意,这个名称对应着后面的代码,如果改动的话,后面也需要进行相应的修改,类模块的代码如下:
'定义一个 Application 对象
Public WithEvents xlApp As Excel.Application
'定义一个按钮控件属性,用来对应相应的菜单项
Public XMenu As CommandBarButton
'定义一个字符串,用来保存相应的快捷键
Public XOnkey As String
'定义一个字符串,用来保存相应的宏名称
Public XSubName As String
'当文件新建打开关闭隐藏时都有可能[size=+0]使可见的工作簿数量变动
'但我们只要监控WorkbookActivate(激活任一工作簿)事件与
'WorkbookDeactivate(工作簿由活动转为非活动状态)事件即可。
'下面即是相对应的代码:
Private Sub xlApp_WorkbookActivate(ByVal Wb As Workbook)
If XMenu Is Nothing Then
Exit Sub
End If
If Wb.Windows(1).Visible Then
XMenu.Enabled = True
Application.Onkey XOnkey, XSubName
End If
End Sub
Private Sub xlApp_WorkbookDeactivate(ByVal Wb As Workbook)
Dim XWindow As Window
If XMenu Is Nothing Then
Exit Sub
End If
For Each XWindow In xlApp.Windows
If XWindow.Caption <> Wb.Name And XWindow.Visible Then
XMenu.Enabled = True
Application.Onkey XOnkey, XSubName
Exit Sub
End If
Next
XMenu.Enabled = False
Application.Onkey XOnkey
End Sub
完成类模块的代码后,我们即可以使用这个类。下面是在mian模块中的一些相应的代码:
'定义一个我们自定义的类
Dim EMenu As New MenuClass
Dim AName, MName(2, 1), DelMenu(2) As Boolean
Sub auto_close()
Dim MyMenu As CommandBarPopup
Dim MyBtn As CommandBarButton
Dim i As Byte
Application.Onkey "^%a"
Set EMenu.XMenu = Nothing
Set MyMenu = CommandBars("Worksheet Menu Bar").Controls(AName)
For i = 0 To UBound(MName)
If DelMenu(i) Then
Set MyBtn = MyMenu.CommandBar.Controls(MName(i, 0))
If MyBtn Is Nothing Then
Error = True
Else
MyBtn.Delete
End If
End If
Next
If MyMenu.CommandBar.Controls.Count = 0 Then
MyMenu.Delete
Else
For i = 1 To MyMenu.CommandBar.Controls.Count
Set MyBtn = MyMenu.Controls(i)
MyBtn.FaceId = MyBtn.Index + 79
Next
End If
If Err.Number > 0 Then
MsgBox "文件关闭时卸载菜单发生异常!" & vbCrLf & _
"自动生成的菜单可能已被卸载!" & vbCrLf & _
"或生成的菜单没有完全被卸载!", vbExclamation, "错误"
End If
End Sub
Sub auto_Open()
Dim MyMenu As CommandBarPopup
Dim MyBtn As CommandBarButton
Dim i As Byte
Dim XT As String
On Error Resume Next
AName = "自定义(&Z)" '菜单名称
MName(0, 0) = "百度Excel吧(&A)" '菜单项名称
MName(0, 1) = "BaiDuExcelBa" '指定宏名称
MName(1, 0) = "Excel吧主页(&B)" '菜单项名称
MName(1, 1) = "ExcelBaZy" '指定宏名称
MName(2, 0) = "Excel各页名(&C)" '菜单项名称
MName(2, 1) = "Excel各页名" '指定宏名称
Set MyMenu = CommandBars("Worksheet Menu Bar").Controls(AName)
If MyMenu Is Nothing Then
Set MyMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup)
MyMenu.Caption = AName
End If
For i = 0 To UBound(MName)
Set MyBtn = MyMenu.CommandBar.Controls(MName(i, 0))
If MyBtn Is Nothing Then
DelMenu(i) = True
Set MyBtn = MyMenu.CommandBar.Controls.Add(Type:=msoControlButton)
With MyBtn
.Style = msoButtonIconAndCaption
.FaceId = 79 + MyBtn.Index
.Caption = MName(i, 0)
.OnAction = MName(i, 1)
End With
Else
DelMenu(i) = False
XT = XT & vbCrLf & MName(i, 0)
End If
Set MyBtn = Nothing
Next
'初始化相关的属性
Set EMenu.XMenu = MyMenu.CommandBar.Controls(3)
EMenu.XMenu.Enabled = False
For Each XWindow In Application.Windows
If XWindow.Visible Then
EMenu.XMenu.Enabled = True
Exit For
End If
Next
Set EMenu.xlApp = Application
EMenu.XOnkey = "^%a"
EMenu.XSubName = "Excel各页名"
Application.Onkey EMenu.XOnkey, EMenu.XSubName
If Len(XT) > 0 Then
MsgBox "已存在菜单名:" & XT & vbCrLf & "不能再被加载!", vbExclamation, "错误"
End If
End Sub
     也许大家看完了之后还不是很了解,但我能力也有限,目前只能给大家解释到此,等以后对此有更深的理解之后,还会和大家一起分享。大家可以从本站里下载完整的代码——自定义宏/Excel各页名。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-21 18:50 | 显示全部楼层
'在单元格右键菜单中添加二级菜单
Sub addMenuItem()
    Dim oSubMenu As CommandBarPopup
    Dim oMenuItem As CommandBarButton
    Set oSubMenu = Application.CommandBars("cell").Controls.Add(msoControlPopup)
    oSubMenu.Caption = "导出选定区域..."
    oSubMenu.Tag = "Custom"
    Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
    oMenuItem.Caption = "文本文件"
    oMenuItem.OnAction = "ExportTxt"
    Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
    oMenuItem.Caption = "CSV文件"
    oMenuItem.OnAction = "ExportCSV"
End Sub

'去除单元格右键菜单中添加的二级菜单
'注:这里没有使用CommandBars("cell").Reset来恢复单元格右键菜单,是为了避免误删其他加载宏向菜单中添加的项目
Sub removeMenuItem()
    Dim oMenuItem As CommandBarControl
    For Each oMenuItem In CommandBars("cell").Controls
        If oMenuItem.Tag = "Custom" Then
            oMenuItem.Delete
        End If
    Next
End Sub


问:“何将右键菜单中其他内容删除 只保留自定义的菜单”?
答:这个可以实现,但不建议修改系统内置菜单,因为这样会影响到整个程序进程内的所有工作表,建议在工作表代码模块中使用以下代码屏蔽默认的单元格右键菜单,弹出自定义菜单,这样做的好处是菜单变动是局部性、临时性的,不会影响其他工作簿、工作表和整个工作环境:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim oPopup As CommandBar
Dim oSubMenu As CommandBarPopup
Dim oMenuItem As CommandBarControl
Cancel = True
On Error Resume Next
CommandBars("myRightMenu").Delete
On Error GoTo 0

Set oPopup = CommandBars.Add("myRightMenu", msoBarPopup)
Set oSubMenu = oPopup.Controls.Add(msoControlPopup)
oSubMenu.Caption = "一级子菜单1"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项1-1"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项1-2"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项1-3"

Set oSubMenu = oPopup.Controls.Add(msoControlPopup)

oSubMenu.Caption = "一级子菜单2"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项2-1"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项2-2"
Set oMenuItem = oSubMenu.Controls.Add(msoControlButton)
oMenuItem.Caption = "菜单项2-3"
oPopup.ShowPopup

oPopup.Delete

End Sub


编号: 582841

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-23 16:47 | 显示全部楼层
AdvancedFilte 帮助文件中的介绍

       基于给定的条件区域从数据清单中筛选或复制数据。如果初始选定区域为单个单元格,则使用单元格所在的当前区域。Variant 类型。

expression.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)
expression      必需。该表达式返回“应用于”列表中的对象之一。

Action     XlFilterAction 类型,必需。

XlFilterAction 可为以下 XlFilterAction 常量之一。
xlFilterCopy
xlFilterInPlace

CriteriaRange      Variant 类型,可选。条件区域。如果省略本参数,则没有条件限制。

CopyToRange      Variant 类型,可选。如果 Action 为 xlFilterCopy,则本参数指定被复制行的目标区域。否则忽略本参数。

Unique      Variant 类型,可选。如果为 True,则重复出现的记录仅保留一条;如果为 False,则筛选出所有符合条件的记录。默认值为 False。

示例
本示例筛选基于条件区域“Criteria”的数据库区域“Database”。

Range("Database").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("Criteria")

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-23 17:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
高级筛选概述“高级”命令的工作方式在几个重要的方面与“筛选”命令有所不同。
  • 它显示了“高级筛选”对话框,而不是“自动筛选”菜单。
  • 您可以在工作表以及要筛选的单元格区域或表上的单独条件区域中键入高级条件。Microsoft Office Excel 将“高级筛选”对话框中的单独条件区域用作高级条件的源。
示例:以下过程使用的条件区域 (A1:C4) 和数据区域 (A6:C10)   
如果将示例复制到一个空白工作表中,可能会更易于理解。
如何复制示例
  • 创建一个空白工作簿或工作表。
  • 选择“帮助”主题中的示例。
注释   请勿选择行标题或列标题。
从“帮助”中选择示例
  • 按 Ctrl+C。
  • 在工作表中,选择单元格 A1,然后按 Ctrl+V。
  • 若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“公式”选项卡的“公式审核”组中,单击“显示公式”按钮。


  
1
2
3
4
5
6
7
8
9
10

ABC
类型销售人员销售额
类型销售人员销售额
饮料苏术平¥5122
肉类李小明¥450
农产品林丹¥6328
农产品李小明¥6544

使用等号键入文本或值由于在单元格中键入文本或值时等号 (=) 用来表示一个公式,因此 Excel 会评估您键入的内容;不过,这可能会产生意外的筛选结果。为了表示文本或值的相等比较运算符,应在条件区域的相应单元格中键入作为字符串表达式的条件:
=''=条目''
其中条目是要查找的文本或值。例如:
单元格中键入的内容Excel 计算和显示的内容
="=李小明"=李小明
="=3000"=3000

考虑大小写区别Excel 在筛选文本数据时不区分大小写。但是,您可以使用公式来执行区分大小写的搜索。有关示例,请参阅使用通配符条件筛选共享某些特定字符而非其他字符的文本值
使用预定义的名称您可以将某个区域命名为“Criteria”,此时“条件区域”框中就会自动出现对该区域的引用。您也可以将要筛选的数据区域命名为“Database”,并将要粘贴行的区域命名为“Extract”,这样,这些区域就会相应地自动出现在“数据区域”“复制到”框中。
使用公式创建条件可以将公式 (公式:单元格中的一系列值、单元格引用、名称或运算符的组合,可生成新的值。公式总是以等号 (=) 开始。)的计算结果作为条件使用。记住下列要点:
  • 公式必须计算为 TRUE 或 FALSE。
  • 因为您正在使用公式,请像您平常那样输入公式,而不要以下列方式键入表达式:
=''=条目''
  • 不要将列标签用作条件标签;请将条件标签保留为空,或者使用区域中并非列标签的标签(在以下示例中,是“计算的平均值”和“精确匹配”)。
如果在公式中使用列标签而不是相对单元格引用或区域名称,Excel 会在包含条件的单元格中显示错误值 #NAME? 或 #VALUE!。您可以忽略此错误,因为它不影响区域的筛选。
  • 用于创建条件的公式必须使用相对引用 (相对引用:在公式中,基于包含公式的单元格与被引用的单元格之间的相对位置的单元格地址。如果复制公式,相对引用将自动调整。相对引用采用 A1 样式。)来引用第一行中的对应单元格。在使用公式筛选数据区域中大于所有值的平均值的数值部分的示例中,您应使用 C7;而在使用公式筛选区分大小写搜索中的文本的示例中,您应使用 A7。
  • 公式中的所有其他引用必须是绝对引用 (绝对单元格引用:公式中单元格的精确地址,与包含公式的单元格的位置无关。绝对引用采用的形式为 $A$1。)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-27 08:40 | 显示全部楼层
本帖最后由 jinsha2002 于 2013-8-27 08:44 编辑

【原帖】  【已解决】在网页上批量查询高考成绩及录取结果,并保存学生录取情况
编号: 1046466

  1. Sub Main()
  2.     Dim objReg As Object
  3.     Dim objMatch As Object
  4.     Dim arrData()
  5.     Dim arrResult()
  6.     Dim i As Long
  7.     Dim j As Integer

  8.     Set objReg = CreateObject("vbscript.regexp")
  9.     objReg.Global = True
  10.     objReg.Pattern = "<b>(.+?)</b>"

  11.     With Sheets("录取情况统计")
  12.         arrData = .Range("c2:d" & .Cells(.Rows.Count, 3).End(xlUp).Row).Value
  13.         .Range("e2:j" & .Rows.Count).Clear
  14.     End With
  15.     ReDim arrResult(1 To UBound(arrData), 1 To 6)

  16.     With CreateObject("MSXML2.XMLHTTP")
  17.         For i = 1 To UBound(arrData)

  18.             .Open "POST", "http://www.lzk.hl.cn/ptgk/default.aspx", False
  19.             .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  20.             .Send "zkzh=" & arrData(i, 1) & "&ksxm=" & arrData(i, 2)

  21.             Set objMatch = objReg.Execute(.responsetext)
  22.             If objMatch.Count > 6 Then
  23.                 For j = 3 To objMatch.Count - 1
  24.                     arrResult(i, j - 2) = Trim(objMatch(j).submatches(0))
  25.                 Next
  26.             End If

  27.         Next
  28.     End With

  29.     Sheets("录取情况统计").Range("e2").Resize(UBound(arrResult), 6).Value = arrResult

  30.     Set objMatch = Nothing
  31.     Set objReg = Nothing
  32. End Sub
复制代码


2010级高考录取情况 - 副本.rar

10.1 KB, 下载次数: 52

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

本版积分规则

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

GMT+8, 2024-3-29 13:38 , Processed in 0.060972 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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