
其他技巧
northwolves
MS-VB-MVP
MS-EXCEL-MVP
展开
-
如何识别键盘左右的shift,Ctrl或Alt键
用API (GetAsyncKeyState)实现,在WIN 2K,XP 下有效:Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPrivate Const VK_LSHIFT = &HA0Private Const VK_RSHIFT = &HA1Private Con原创 2004-08-03 18:21:00 · 2733 阅读 · 0 评论 -
在VBA中获取“我的文档”的目录路径
方法1. 读取注册表:Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long)原创 2007-09-23 14:31:00 · 3318 阅读 · 0 评论 -
反选EXCEL数据区域已选定的单元格
Sub 反选()Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseDim raddress As String, taddress As Stringraddress = Selection.Addresstaddress = ActiveSheet.UsedRange.AddressWith Sheets.Add原创 2007-09-23 13:57:00 · 6576 阅读 · 0 评论 -
VBA增加sheet,重名时自动命名
VBA增加sheet,如何在出现重名时自动命名?如 Sheets.Add ActiveSheet.Name = "mysheet"如果已经存在名称为“mysheet”的sheet,如何使增加的sheet名称自动加上一个括号变成"mysheet(1)"呢? 即类似在某文件夹内不断复制同一文件的效果,代码如下:Sub addsheets()Dim i As Long, sh As原创 2007-09-23 14:10:00 · 10669 阅读 · 1 评论 -
应用API函数在用户窗体中画圆
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String)原创 2007-09-23 14:23:00 · 3301 阅读 · 0 评论 -
Adding checkbox to mshflexgrid
Private Sub MSHFlexGrid1_Click()If MSHFlexGrid1.Col = 0 Then MSHFlexGrid1.Text = Chr(124 - Asc(MSHFlexGrid1.Text))End SubPrivate Sub Form_Load() Dim i As LongWith MSHFlexGrid1.FixedCols = 0.Cols = 4原创 2007-10-04 02:11:00 · 1863 阅读 · 0 评论 -
Save an userform as an image in EXCEL
When click a commandbutton in an Excel userform,save the entire userform as an image file in harddisk.Method 1Private Declare Sub Keybd_Event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte,原创 2007-10-04 18:17:00 · 4182 阅读 · 0 评论 -
VBA自动登陆163信箱
Sub Goto163()With CreateObject("InternetExplorer.Application").Visible = True.navigate "http://mail.163.com"Do Until .Readystate = 4DoEventsLoop.Document.Forms(0).All(9).Value = "myusername".Document原创 2007-10-01 18:22:00 · 14566 阅读 · 12 评论 -
自动获取美元最新汇率
Sub MACRO1()With CreateObject("Msxml2.XMLHTTP").Open "GET", "http://www.google.cn/search?&q=1usd%3D%3Frmb", False.SendMsgBox Split(Split(.responseText, "1美元 =")(1), "人民币")(0)End WithEnd Sub原创 2007-10-11 23:43:00 · 3206 阅读 · 0 评论 -
一道趣味算术题
题目地址:http://club.excelhome.net/thread-175411-1-1.html 先看几个数:312132,231213,41312432,23421314 可以看到以上字串有以下特点: 2个1 之间有1个数,2个2 之间有2个数,2个3之间有3个数... 试找出由(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,原创 2008-11-26 10:31:00 · 31964 阅读 · 41 评论 -
How Rich Are You in the World?
HOW RICH ARE YOU? Use the codes below ,you can find where you sit in the richest people list in world. Sub Showhowrichyouare()Getit InputBox("Please enter原创 2008-12-08 20:18:00 · 1634 阅读 · 0 评论 -
An UDF to Get LanguageSettings of Office's Application
Use Application.LanguageSettings.LanguageID to to get LanguageSettings of Offices Application The codes:Sub ShowLanguage() Dim Lan(-100 To 25000) As String Init Lan Deb原创 2008-12-29 00:31:00 · 1447 阅读 · 0 评论 -
Get prime numbers nearby a number less than 10^10
For any given number less than 10^10,you can get prime numbers from 10000 numbers nearby it by the following codes: Private Sub Command1_Click()Debug.Print primes10000(987654321)End Sub原创 2008-12-28 20:32:00 · 1160 阅读 · 0 评论 -
Stupid Keyboard
A friend asked me to have a glance at his keybord.When I press some keys to his notepad,something funny appears: When Z button is hit , z`1 appearsWhen X button is hit , x2 appearsWhen C b原创 2009-05-31 17:41:00 · 1252 阅读 · 0 评论 -
VB获取网页下文字的链接地址
题目: 如何获取网页下文字的链接地址 窗口有WebBrowser1,和一个Text1 现在 Private Sub Form_Load() WebBrowser1.Navigate "http://www.baidu.com" End Sub 打开窗体显示百度的首页,要求滑动鼠标到“新闻”时 Text1里显示http://news.baidu.com/ 滑动到“帖吧”时 Text1里显原创 2009-11-24 21:31:00 · 3427 阅读 · 3 评论 -
dir()递归 遍历子目录
dir()递归即可:Private Sub Command1_Click()Listfiles "d:/JAVA", List1End SubSub Listfiles(ByVal mydir As String, ByVal filelist As ListBox)Dim i As Long, dirlevel As Long, fname As String, dirlist() As Str原创 2007-04-10 11:19:00 · 5610 阅读 · 0 评论 -
全硬盘高速查找指定文件
Private Declare Function SearchTreeForFile Lib "ImageHlp.dll" (ByVal lpRoot As String, ByVal lpInPath As String, ByVal lpOutPath As String) As LongPrivate Declare Function GetDriveType Lib "kernel32"原创 2007-04-10 11:03:00 · 3739 阅读 · 0 评论 -
VB计算圆周率(二)
采用普遍的傅立叶级数展开方法pi = 3 + (1 * 1) / (2 * 3 * 4) * [ 3 + (3*3)/(4*5*4) *[ 3 + (5*5)/(6*7*4) * [ 3 + (7*7)/(8*9*4) * [ ... ] ] ] ]输入:需计算的圆周率位数,理论精度约5万位 Add a commandbutton and textbox(multine=true,s原创 2006-06-07 09:15:00 · 5606 阅读 · 1 评论 -
如何随机生成指定数目的国标汉字?
为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准: GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",原创 2004-07-25 14:26:00 · 5370 阅读 · 2 评论 -
MSHFlexGrid1使用技巧(一)[如何让MSHFlexGrid只能被选中一行]
MSHFlexGrid控件点击时可以选中多行,但有时我们需要仅仅选中一行,有一个小技巧: Option ExplicitPrivate Sub Form_Load()Dim i As Integer, j As IntegerWith MSHFlexGrid1.Rows = 10.Cols = 4For i = 1 To 9.TextMatrix(i, 0) = "第 " & i & "原创 2004-09-02 22:35:00 · 3593 阅读 · 0 评论 -
关于秒表
Private Declare Function timeGetTime Lib "winmm.dll" () As LongDim STARTTIME As LongPrivate Sub Command1_Click()STARTTIME = timeGetTimeTimer1.Enabled = TrueEnd SubPrivate Sub Form_Load()Label1.Caption原创 2005-08-29 23:45:00 · 1416 阅读 · 0 评论 -
MSHFlexGrid1使用技巧(二)[如何让MSHFlexGrid实现点击列标题排序]
Dim mysort As IntegerPrivate Sub Form_Load()With MSHFlexGrid1.Cols = 4.Rows = 20 20行4列For i = 0 To 79.TextArray(i) = IIf(i NextEnd Withmysort = 7 升序End SubPrivate Sub MSHFlexGrid1_MouseDown(Button原创 2005-08-30 00:17:00 · 3583 阅读 · 0 评论 -
关于 SENDKEYS 的代码
sendkeys 的用法(MSDN): SendKeys 语句 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。语法SendKeys string[, wait]SendKeys 语句的语法具有原创 2005-09-26 07:03:00 · 4099 阅读 · 0 评论 -
VB 利用WINRAR 压缩文件及解压
预备知识:1. Shell 函数执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。语法Shell(pathname[,windowstyle])Shell 函数的语法含有下面这些命名参数:部分描述pathname必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文原创 2005-09-25 09:17:00 · 11981 阅读 · 6 评论 -
关于互质数
自然数m,n,m∈(1,x),n∈(1,y),求m,n互质(即m,n 最大公约数为1)的概率x,y 驱于无穷大时,此概率的极限为6/π^2Function GETPMN(ByVal X As Long, Y As Long) As DoubleDim a() As Byte, i As Long, temp As Double, p As LongIf X > Y Thentemp = XX =原创 2005-11-30 15:51:00 · 1603 阅读 · 0 评论 -
MSHFlexGrid1使用技巧(三)[如何让鼠标在 MSHFlexGrid 中拖动也不允许选择多行]
MSHFlexGrid的selecttionMode设了by row,单击的时候是选择一行,但只要鼠标拖动也是可以选择多行: Private Sub MSHFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)If MSHFlexGrid1.RowSel End Sub 上原创 2006-04-21 15:31:00 · 2807 阅读 · 0 评论 -
快速删除一个包含文件和子文件夹的文件夹
调用DOS命令rmdir 删除一个具有多级目录的目录Private Sub KillFolder(MyFolderPath As String)Shell "cmd.exe /c rmdir /s/q " & Chr(34) & MyFolderPath & Chr(34)End Sub Private Sub Command1_Click()KillFolder "C:/Temp原创 2006-05-10 09:33:00 · 1675 阅读 · 1 评论 -
不绑定记录集获取datagrid某行某列的内容
获取Dvatagrid第r行c列的内容可以用下面代码获得DataGrid1.Col = rDataGrid1.Row = cmsgbox DataGrid1.Text 但如果datagrid1中有滚动条,要得到滚动下面某行某列的内容时,系统会提示说:行号无效!这是由于DataGrid1.Row只能在[1,datagrid.visiblerows]间取值。当行号大于visibler原创 2006-05-10 09:23:00 · 2754 阅读 · 2 评论 -
VB6求两个字符串最长公共子串的问题
Function LCS(ByVal A As String, ByVal B As String) As StringIf Len(A) * Len(B) = 0 Then LCS = "": Exit FunctionDim la As Integer, lb As Integer, achar() As String, bchar() As String, c() As Integer, i原创 2006-09-28 23:21:00 · 2532 阅读 · 0 评论 -
获取路径名的原始大小写状态
方法1:利用dir()循环:------------------------------------Option ExplicitPrivate Sub Command1_Click()Dim s As Strings = "c:/program files/microsoft office/office11/winword.exe"MsgBox "lcase: " & s &原创 2006-06-04 07:44:00 · 1383 阅读 · 0 评论 -
已知三角形三个边的长度值,求三个角的大小
没什么技术含量,一个余弦定理搞定:Function angle(ByVal a As Double, ByVal b As Double, ByVal c As Double)angle = (b * b + c * c - a * a) / (2 * b * c)angle = Atn(-angle / Sqr(1 - angle * angle)) + 2 * Atn(1)angle =原创 2006-06-04 07:54:00 · 5364 阅读 · 0 评论 -
VBA获取新浪博客列表
Sub Blogsina() Const url As String = "http://www.google.cn/search?q=site%3Ablog.sina.com.cn/u/&num=100&start=" Dim n As Long, p As Long, s() As String, u() As String, i As Long With Cre原创 2010-01-25 16:57:00 · 2368 阅读 · 2 评论