标签: excel-vba

将Excel-VBA代码放在模块或工作表中?

什么是良好的做法和良好的代码卫生?将代码放入模块或表格中?

我有这个Excel工作簿,每个工作表中都有用户界面.工作簿中的每个工作表都执行某项总体任务的不同部分.我应该将相关的代码放在Sheet对象或模块中吗?分组成一个模块,还是单独的模块?

我正在使用Excel 2003.

excel vba excel-vba

42
推荐指数
3
解决办法
12万
查看次数

如何在Excel VBA中获取已更改单元格的旧值?

我正在检测Excel电子表格中某些单元格值的变化,如下所示......

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim old_value As String
Dim new_value As String

For Each cell In Target

    If Not (Intersect(cell, Range("cell_of_interest")) Is Nothing) Then
        new_value = cell.Value
        old_value = ' what here?
        Call DoFoo (old_value, new_value)
    End If

Next cell

End Sub
Run Code Online (Sandbox Code Playgroud)

假设这不是一种编码方式,那么在更改之前如何获取单元格的值?

excel vba excel-vba

42
推荐指数
5
解决办法
11万
查看次数

查找A列中的值是否包含B列的值?

我有两列 - 列E扩展到99504(值),列I扩展到2691(值).列包含带扩展名的文件名.

像这样的东西

E               I
TSL_groups.mrk  pcbx_report.mrk
abcd.mrk        jhuo.mrk
Run Code Online (Sandbox Code Playgroud)

等等...

我想查找列E中的文件(标题Filename_B)是否存在于E列(标题Filename_A)中.如果为true,则在新列中显示为TRUE,例如列K.

我怎么做?TIA.

excel vba excel-2007 excel-vba

42
推荐指数
3
解决办法
25万
查看次数

删除表格并避免Excel要求用户确认,而是使用自定义消息

我有一个触发一系列事件的按钮.其中一个事件是删除工作表.在用户删除任何内容之前,我弹出我的自定义YES/NO消息,要求他们确认整个过程.

然后是删除工作表的子事件,Excel弹出自己的窗口以确认删除工作表.问题是,如果用户在此时说"不",则会将我的应用程序设置为不一致状态.

如何绕过Excel要求确认删除工作表?

excel vba excel-vba

41
推荐指数
1
解决办法
8万
查看次数

对Visual Basic项目的编程访问不受信任

我的计算机上有两个计划任务.它们都打开excel文件并运行宏,并且与它们的功能非常相似.它们都在我的电脑上工作.但是我将计划的任务移到同事计算机上.一个人工作,另一个人没有.

没有工作的那个开了excel但是有一个错误说:

"对可视化基础项目的编程访问不受信任".

就像我说两个excel文件非常相似.没有工作的那个确实引用了另外两个项目,而另一个没有.他们是,

Microsoft Visual Basic for Applications Extensibility 5.3
Microsoft Windows Common Controls-2.6.0 (SP6)
Run Code Online (Sandbox Code Playgroud)

我之前从未遇到过这个错误.

excel vba excel-vba programmatically-created

41
推荐指数
2
解决办法
5万
查看次数

如何删除字符串中的换行符

如果我的字符串以换行符结束,我想从字符串中删除换行符.

Sub linebreak(myString)
If Len(myString) <> 0 Then
If Right$(myString, 1) = vbCrLf Or Right$(myString, 1) = vbNewLine Then myString = Left$(myString, Len(myString) - 1)
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

40
推荐指数
6
解决办法
18万
查看次数

为什么有集合时在VBA中使用数组?

许多人在Excel/VBA中使用大量数组来存储数据列表.但是,在我看来,收集对象更方便(主要是:不需要重新定义列表的长度).

所以,我真诚地问自己,我是否遗漏了什么?为什么其他人仍然使用数组来存储数据列表?这只是过去的宿醉吗?

arrays excel vba excel-vba

40
推荐指数
2
解决办法
6万
查看次数

使用excel VBA在命令提示符中执行命令

我有一个固定的命令,我需要使用VBA传递给命令提示符,然后命令应该运行.例如"perl a.pl c:\ temp"

以下是我尝试使用的命令但它只是打开命令提示符并且不运行命令.

Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)

请检查.

shell excel command-line vba excel-vba

40
推荐指数
1
解决办法
23万
查看次数

如何在VBA中的下一行继续代码

我想在VBA代码中键入数学论坛,其中有许多行.我想将它分成许多行.我该怎么做?

例如:

U_matrix(i, j, n + 1) = k * b_xyt(xi, yi, tn) / (4 * hx * hy) * U_matrix(i + 1, j + 1, n) + (k * (a_xyt(xi, yi, tn) / hx ^ 2 + d_xyt(xi, yi, tn) / (2 * hx)))
Run Code Online (Sandbox Code Playgroud)

很长 想分开它.

试过这个:

U_matrix(i, j, n + 1) = k * b_xyt(xi, yi, tn) / (4 * hx * hy) * U_matrix(i + 1, j + 1, n) 
_+ (k * (a_xyt(xi, yi, tn) / …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

40
推荐指数
4
解决办法
25万
查看次数

使用VBA迭代Excel中的填充行

所以我试图使用VBA迭代Excel电子表格中的工作表.我想遍历每一行,然后遍历每一列,尽管谷歌搜索,我实际上找不到一个直观的方法来做到这一点.

我假设必须填充行的第一个单元格,如果不填充,则必须结束.我可以强制执行

我目前的方法是遍历行,然后尝试获取第一个单元格的值,但我无法弄明白.我在这里和其他地方遇到过一些使用范围等的问题,但没有什么可以帮助我编写代码.

目前的做法是:

Set sh = ActiveSheet
RowCount = 0
For Each rw In sh.Rows
    'If Row.Cells(1, 1).Value = "" Then Exit For
    RowCount = RowCount + 1
Next rw
MsgBox (RowCount)
Run Code Online (Sandbox Code Playgroud)

现在当我运行它时,我得到一些巨大的数字,这是错误的,因为该表只有大约25行.我评论了第一行,因为它不起作用.

当For Loop找到第一个单元格为空的行时,我可以在For循环的第一行中更改什么才能正确断开?

excel vba excel-vba

40
推荐指数
3
解决办法
19万
查看次数