Tag: excel vba

如何将新列添加到现有工作表

假设我有下面的工作表: Empid EmpName Sal 1 david 100 2 jhon 200 3 steve 300 如何插入名为“Loc”的新列,包括其数据? Empid EmpName Loc Sal 1 david uk 100 2 jhon us 200 3 steve nj 300

防止Excel VBA编译错误,因为用户安装了旧版本的MS Office(MS Outlook)?

如果我有一个电子表格,我从VBA编辑器引用了MS Outlook 14.0 Object Library,并且只安装了MS Outlook 12.0的用户,那么当这个用户打开电子表格时,他们会在这一行上得到一个编译错误: Range("export_date") = Date – 1 如果他们进入工具,参考,在参考列表中,有这个错误: MISSING: MS Outlook 14.0 Object Library 如果他们取消select该库,而是select MS Outlook 12.0对象库 …代码然后正确编译和电子表格正常工作。 我不明白为什么在Date()函数上失败,因为这是VBA函数,而不是Outlook函数。 但更重要的是,有没有办法避免这种情况? 我唯一能想到的就是不设置引用,只使用Objecttypes的variables,并通过CreateObject(“Outlook.Application”)等实例化,但是我讨厌放弃强types等等。 任何人都可以提出一个更好的方式来处理这个问题,向后兼容旧版本的MS Office?

如何在VBA Excelmacros中设置unit testing?

我正在一个Excel VBAmacros,将采取一些Excel文件,擦洗/清理它,并产生一张工作簿2张 – 表1是原来的'脏'文件,工作表2是干净的清理文件。 由于我们现在有10种不同的格式,并且在40+以上的路上。我想为给定的一组文件保存这个输出,然后编写一个unit testing,它接受原始input,运行我们的macros,然后比较macros输出到已保存的,预期的输出。 然后在维护之后的任何时候,我们可以快速轻松地运行我们的unit testing,以确保我们不会破坏任何已经工作的东西。 这是我第一次使用VBA。 我search框架或插件,找不到太多的帮助。 我find了一个比较两个excel电子表格的函数 – 所以我把这个部分放在下面。 但是现在我需要弄清楚如何实际编写和执行这个unit testing。 编写unit testing应该非常简单 – 但我该如何执行? 我不想在电子表格上放一个button,说'运行unit testing'…有没有办法在VBA / Excel中运行一个任意函数,所以我可以说右键单击我的UnitTest函数'跑'? 任何关于我的unit testing计划的额外反馈也将不胜感激。 再次感谢。

有趣的符号#

这是什么意思? if CDbl(Trim(Range("M" & r).Text)) > 0# then… #做什么? 和cdbl做什么?

VBA – Range.Row.Count

我写了一个简单的代码来说明我的困境。 Sub test() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim k As Long k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count End Sub 会发生什么呢?我们对包含从A1开始的值的行进行计数。 如果包含值的行数大于1,则代码工作良好。 但是,如果A1是唯一包含任何值的单元格,则k = 1,048,576,我猜是Excel中允许的最大行数。 为什么不k = 1? 图片: 编辑:我使用的解决方法如下: Sub test() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim k As Long k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count If k = 1048576 Then k […]

我怎样才能显示我的Windows用户名在Excel电子表格使用macros?

我正试图在Excel单元格中显示Windows用户名。 我怎样才能做到这一点?

如何从string中find数字?

我需要从stringfind数字。 如何从VBA Excel中的string中查找数字?

Excel VBA – 将文本转换为date?

我有一列date(列A)以yyyy-mm-dd的格式存储为文本,我试图将其转换为date,最终我可以对它们进行查询。 我在这里读了几个主题,尝试了一些build议,但是我什么都不能做。 有人正在使用: Columns("A").Select Selection.NumberFormat = "date" 这改变了单元格的格式,但实际上并没有改变仍然存储为文本的值的格式。 我的理解是,我需要使用CDate()从文本更改值的格式date。 我试过这样的事情: Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = CDate(c.Value) Next c 这给我一个types不匹配的错误。 我想知道是否这是因为我试图将date值保存到一个非date格式的单元格,所以我试着把它与上面的.NumberFormat =“date”结合起来,这也没有工作。 任何build议,将不胜感激。

将公式设置为一组单元格

这是我想要做的简单演示。 我想要将公式设置为一组单元格(例如C1到C10)。 Range("C1").Formula = "=A1+B1" 但如何使公式使用像这样的dynamic单元格: Range("C1:C10").Formula = "=Ax+Bx" 所以在现实中就是这样, C1 = A1 + B1 C2 = A2 + B2 C3 = A3 + B3 C4 = A4 + B4 C5 = A5 + B5 … C10 = A10 + B10 如何改变此公式的RHS以使之工作: Range("C1:C10").Formula = "=Ax+Bx"

将工作簿声明为全局variables

我开始编写一个代码,可以适用于多个工作簿,但始终使用相同的参考工作簿。 代码将有许多潜艇,因为我试图避免变暗参数工作簿中的每个子我想声明他们全球。 首先我有: Global Locations As Excel.Workbook Set Locations = Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx") 哪给了我: “编译错误:外部程序无效” 一些谷歌search后,我发现了以下代码的地方: Public Const Locations As Excel.Workbook = "Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")" 哪给了我: “编译错误:预期:types名称” 编辑: 使用: Public Const Locations As Excel.Workbook = "Workbooks.Open('M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx')" (Workbooks.Open语句内的单引号)导致与使用双引号相同的错误。 谁知道我在做什么错? EDIT2: 我也尝试在“ThisWorkbook”中声明variables,使用下面的答案 : Private Sub Workbook_Open() Dim Locations As Excel.Workbook Dim MergeBook As Excel.Workbook Dim […]