vba中的窗口,如何用esc键实现 窗口右上角的那个关闭功能。(不添加命

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba中的窗口,如何用esc键实现 窗口右上角的那个关闭功能。(不添加命相关的知识,希望对你有一定的参考价值。

vba中的窗口,如何用esc键实现 窗口右上角的那个关闭功能。(不添加命令按钮的情况下)

  题主,你是说打开用户窗体后,可能按ESC键退出当前的窗体吧,而且用户窗体上没有退出的按钮对吧~~


  我也建了个这样的用户窗体,然而并不是想象中的那样的哈。

  先说下怎么弄:

  1.添加一个小的命令按钮CancelButton,将它的Cnacel属性设置为True,然后把下面的事件处理程序插入到用户窗体的代码模板中:

      Private Sub CancelButton_Click()

      Unload Me

     End Sub

    2.上述即可允许用户按ESC键来退出窗体。然后可以把这个小按钮隐藏在另一个对象的后面,或是放在窗体的右下角然后缩小窗体的大小,这样就看不到它了。


    以上,即是实现的方法,也就是还是需要一个命令按钮来实现这个功能,但是人为隐藏了。这个也是Excel2013 高级VBA编程宝典(第七版)中讲到的方法。  

追问

就是说,在不添加任何commandbutton 情况下,单纯的用esc 实现 窗口右上角的关闭,不行是吗

参考技术A 代码写end cancel设置为true即可

在excel中如何用vba来实现查找特定的字符串?

例如excel中有一列的值分别是
invalidtype,
invalidstatus,invalidtype.
invalidstatus,
invalidtype.invalidstatus,invalidcode
如何在这些单元格中判断是否含有特定的字符串invalidstatus?
希望高手帮忙,这个问题比较急,在线等待···

1、首先打开需要编辑的Excel表格,进入到编辑的的页面中。

2、然后在弹出来的窗口中,鼠标右键单击工作表,选择打开“查看代码”。

3、然后在弹出来的窗口中,点击输入代码:

Sub AAA()

Dim I As Long

For I = 1 To 1000 '行 范围,自己修改

If InStr(Range("A" & I), "invalidstatus") > 0 Then

Range("A" & I).Font.Color = vbRed

End If

Next

End Sub

4、然后进行保存,点击运行就完成了。

参考技术A Sub Main()
Dim I As Long
For I = 1 To 1000 '行数,可以根据实际情况进行修改
If InStr(Range("A" & I), "invalidstatus") > 0 Then'假设数据都在A列中,从第一行开始
Range("A" & I).interior.Color = vbRed
End If
Next
End Sub
如果包含特定的字符串,则单元格填充为红色。

关于此例中用到的Instr函数的详细讲解:

InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare可选参数。指定字符串比较。如果省略 compare,Option Compare 的设置将决定比较的类型。
compare 参数设置为:
常数 值 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。
参考技术B Sub AAA()
Dim I As Long
For I = 1 To 1000 '行 范围,自己修改
If InStr(Range("A" & I), "invalidstatus") > 0 Then
Range("A" & I).Font.Color = vbRed
End If
Next
End Sub
运行后含有这个字符的单元格字体为红色。追问

这个A是代表的循环列吧。试验了一下是可以出来的,非常感谢···
我还有一个问题想请教一下。如果有一列类似于:
1.10089E+15
47GS794600000000
4.19504E+14 ,
如何 用vba的函数把这一列的所有科学计数法改成普通的一般的计数,类似于:
1100890502000600
47GS794600000000
419504100000000
非常感谢你。这个问题比较急,我在线等你哈···

追答

试试这个,没有做过太多验证,你自己测试看看数据对不对再用

Sub AAA()
Dim Ar
Ar = Columns("A").Formula
Columns("A").NumberFormatLocal = "@"
Columns("A") = Ar
End Sub

追问

谢谢,没用过此类的函数,Ar的类型是?测试了一下,这个貌似不可以,Ar = Columns("f").Formula的时候就有error,是runtime error 91:object variable or with block variable not set。 不知道该如何下手。麻烦你帮忙啦···

追答

方便的话加我看看。不然发附件到我邮箱。我这边测试没问题。

QQ邮箱 987122817@qq.com

追问

不好意思哈,我重新试了下,好像可以了,非常感谢,真的非常感谢。希望以后可以多多向你请教学习···
额外想问问,这种问题有没有类似于不是这种修改格式,而是通过逐行抽取的时候,以text的形式来实现的方法?

追答

要么设置单元格格式为文本,要么在字符前面加上逗号。不懂你的以 text形式是什么意思
Sub AAA()
DIM I AS LONG
I=1

MSGBOX =range("A" & I).Formula
END SUB
你读取对应单元格的 Formula 属性就可以了。

追问

利用Workbooks().Worksheets().Cells(iRow, 2).value这种形式,应该是string型,想直接在前面加逗号,成Workbooks().Worksheets().Cells(iRow, 2).value = " ' " + Workbooks().Worksheets().Cells(iRow, 2).value,这样会报错:application-defined or object-defined error;想转换成long型,有workflow的error,有人建议改成text试试,但是还没有实践过。
还有就是msgbox没有定义,我测试的时候不能通过,需要帮忙···

追答

不会啊,我这样测试没错啊。看看你的Irow 是不是0 ,工作簿工作表名称是否对

Dim I As Long
For I = 1 To [B65536].End(3).Row
Range("B" & I).Value = "'" & Range("B" & I).Value
Next

本回答被提问者和网友采纳

以上是关于vba中的窗口,如何用esc键实现 窗口右上角的那个关闭功能。(不添加命的主要内容,如果未能解决你的问题,请参考以下文章

Excel中如何用VBA判断行数?

在excel中如何用vba来实现查找特定的字符串?

如何用VBA实现WORD批量替换?

如何用函数或VBA调用(引用)另外一个工作表的数据

如何用excel中的VBA的正则表达式提取出字符串?

如何用delphi得到指定窗口的坐标