我有一个宏需要大约五秒钟来执行,我正在使用代码,Application.ScreenUpdating = False所以看起来Word在运行时已经锁定.
我在最后使用一个消息框告诉他们它是完整的,但我想在执行过程中显示一个图像告诉用户宏正在运行(主要是因为他们不会担心,但也因为它更好看着).
可能有一种更简单的方法,但我决定创建一个图像,创建一个非常基本的用户表单,并简单地将我的图像设置为其背景.然后,一旦代码开始运行,我就会弹出该用户表单.
我遇到的问题是,除非我关闭它,否则其余代码将不会执行.它只是挂起,直到我做某事.有没有办法让我可以在不停止其余流程的情况下显示用户表单?如果没有,是否有另一种方法可以在宏运行时显示图像?
如何使用VBA更改word文档中的页脚信息?
加载文档时,VBA代码将从数据库中获取必要的信息,我想将该信息附加到页脚.
我从DB中获取信息,但将其附加到页脚是另一个故事.
任何简单的相关例子都值得赞赏
我正在开发一个 vba 宏,它使用正则表达式来搜索另一个字符串中的字符串模式。
正则表达式模式包含一个变化的字符串(下面代码中的 APR24)。我需要知道如何在模式中包含变量。有人可以帮忙吗?
我的代码如下
Public Function Regexsrch(ByVal str2bsrchd As String, ByVal str2srch As String) As Boolean
Dim Regex As New VBScript_RegExp_55.RegExp
Dim matches, s
Regex.Pattern = "(\.|\s)APR24(,|\s|\()"
Regex.IgnoreCase = True
If Regex.Test(str2bsrchd) Then
Regexsrch = True
Else
Regexsrch = False
End If
End Function
Run Code Online (Sandbox Code Playgroud) 我认为这是一个简单的解决办法,但我已经被困在这个麻烦的地方好几个小时了.
基本上在excel工作表中我有两个按钮分配给宏:1和2.如果用户先点击1然后点击然后2,2运行一些来自1的变量.但我需要2才能独立运行如果先点击2.因此,我需要在2代码中使用某种方法来询问是否单击了1个按钮.
1和2都是公共潜艇.我认为定义中缺少一些东西,但我不确定.
简单样本:
Public Sub 1()
do this
End Sub
Public Sub 2()
If 1 clicked then
process a
Else
process b
End if
End Sub
Run Code Online (Sandbox Code Playgroud) 如何禁止显示"如果以此格式保存文件,将删除Visual Basic宏的对话框.您确定要使用此格式吗?" (见下图).
基本上,我正在尝试使用宏来将.xlsm文件保存为.xslx文件?我已经尝试了所有可以找到的对话框抑制代码但它无法正常工作.
这是我的代码:
Private Sub SaveWithNoMacros()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:="Clean Workbook With No Macros.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
这是对话框:
正如您可能想象的那样,我需要转换很多工作簿,并且不希望手动执行此操作.
-D.
我有大量的行,其中包含不同的值,从1000s到1,000,000s.
这是以字节为单位的数据,我需要将其转换为Kb或Mb.
我可以将所有值除以1M并获得所有数据和Mb,但我希望将数据分为kb和Mb.
我尝试使用MOD功能,但不会这样做,因为所有数字都可以被1K和1M整除,所以我有点卡住了!
这是我得到的数据样本:
16000000
220000
2048000
2048000
230000
16000000
230000
16000000
220000
230000
Run Code Online (Sandbox Code Playgroud)
所以我需要的是,如果单元格包含6个零,则除以1M,或者如果单元格包含3个零,则除以1000.
我将为每个单独的结果添加串联,以便区分数据.
我有很多张纸,每张纸上都有一个图表,我想循环遍历每个图表中的每个数据标签,删除任何等于 0 的数据标签,但似乎无法提取数据标签值。
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels(l) = 0 Then
.SeriesCollection.Points(j).DataLabel(l).Delete
End If
Next l
Next j
Next k
End With
Run Code Online (Sandbox Code Playgroud)
(忽略激活每个图表的每个工作表的循环,该位有效,因此保持代码示例最少)
任何人都可以建议如何循环数据标签、检查值并在适当的地方删除?
只是想看看是否可以在表的第二列上使用 VLookup?我无休止地搜索并找不到答案,但我觉得这应该是可能的。
我要补充一点,VBA 不是我的强项。我来自 PHP/MySQL 背景,但在我的工作中没有使用任何一种的奢侈,所以我求助于学习 VBA。
到目前为止我的代码(简化):
Dim userEnviron As String
Dim rowId As Integer
rowId = 0
userEnviron = Environ("Username")
Dim tbladmin As ListObject
Set tbladmin = Sheets("Office Details").ListObjects("officeAdmin")
On Error Resume Next
rowId = Application.VLookup(userEnviron , Range(tbladmin), 4, False)
Run Code Online (Sandbox Code Playgroud)
此代码正在查找用户环境变量并在 tbldadmin 表中查找匹配项。该表的构造与标题类似:
Name UserID Email RowID
Tom Smith Tom the@the.com 2
我试图查找用户 ID 并返回名称,但是目前我已将代码设置为查找名称并返回 RowID(我添加了第二段代码来获取 RowID 并返回名称)
我可以看到很多完成此操作的非 VBA 示例,但是似乎没有一个使用表格。
可以按照描述使用 VLookup 来搜索第二列中的匹配项并从第一列返回一个值吗?如果我能搜索第二列,我会从最后一列返回。
代码的作用:我有一个代码可以在屏幕上移动鼠标,获取打印屏幕并将其粘贴到excel上.
问题:出于某种原因,我的代码总是(完全没有例外)在每次运行后关闭NUMLOCK键.
到目前为止我尝试了什么:我四处搜索并找到了SendKeys(NUMLOCK),它在理论上有效(尽管对用户来说似乎很有问题).
我想做什么:我想在每次宏运行后打开NUMLOCK,
Obs1:我不知道是什么原因导致宏将其关闭.修复造成这种情况的任何事情都是理想的,但由于我不知道问题是什么,我首先要让我的代码功能正常.一旦找到打开NUMLOCK键的方法,我将继续努力.
问题:我可以使用SendKeys执行此操作吗?我使用得当吗?有没有更好的办法?
Obs2:由于它是一个更大的代码,一旦解决了这个问题,我将发布整个代码的另一个问题,并继续讨论造成问题的原因.
代码我试图起诉转向numlock:
Application.Sendkeys (NUMLOCK)
Run Code Online (Sandbox Code Playgroud)
还尝试过:
Application.Sendkeys ("NUMLOCK")
Run Code Online (Sandbox Code Playgroud)
和
Application.Sendkeys {NUMLOCK}
Run Code Online (Sandbox Code Playgroud) 我希望宏中的所有数字都用点显示,而不是逗号
例如,这显示“0,03”,但我想要“0.03”:
Dim MyNumber As Single
MyNumber = 0.03
MsgBox (MyNumber)
Run Code Online (Sandbox Code Playgroud)
我尝试了一组不起作用的代码:
这仍然显示昏迷:
Application.DecimalSeparator = "."
Run Code Online (Sandbox Code Playgroud)这仍然显示昏迷并且不适用于整个宏
MyNumber = Format(MyNumber, "##0.00")
Run Code Online (Sandbox Code Playgroud)这显示点而不是逗号,但不适用于整个宏
MsgBox (Replace(MyNumber, ",", "."))
Run Code Online (Sandbox Code Playgroud)谢谢你!