Tag: vba

如何获得当年使用VBA

我正在尝试使用VBA获得当前年份。 有没有预buildfunction可以找出当年?

等待shell命令完成

我在Excel VBA中运行一个简单的shell命令,该命令在如下所示的指定目录中运行batch file: Dim strBatchName As String strBatchName = "C:\folder\runbat.bat" Shell strBatchName 有时batch file在某些​​计算机上可能需要更长的时间才能运行,并且正在执行的VBA代码依赖于batch file来完成运行。 我知道你可以设置一个等待计时器,如下所示: Application.Wait Now + TimeSerial(0, 0, 5) 但是,这可能无法在一些太慢的计算机上工作。 有没有一种方法可以让系统地告诉Excel继续运行其余的VBA代码,直到shell运行完毕?

如何在VBA(Excel)中获取以毫秒为单位的DateDiff值?

我需要计算两个时间戳之差(以毫秒为单位)。 不幸的是,VBA的DateDiff函数不提供这种精度。 有没有解决办法?

VBA是一种OOP语言吗?它支持多态吗?

我正在做我的第一个VBA项目。 (来自C ++ ) 我想通过实现类和多态来改进现有的Microsoft Excel工作簿使用的VBA项目。 我的问题是: 1 –我读了很多文章/论坛,解释说VBA不是面向对象编程( OOP )语言,不支持多态。 其中一些人提出了使用关键字实现的解决方法。 2 –我还发现了一些这样的网页,它解释了如何在VBA中使用关键字(如Inherits , Override , Overridable , MustOverrides)执行OOP和多态。 所以我的问题是: VBA是一种OOP语言吗?它支持多态吗?

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

我想在VBA代码中inputmath论坛,其中有许多行。 我想分成许多行。 我该怎么做? 例如: 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))) 很长。 想分裂它。 试过这个: U_matrix(i, j, n + 1) […]

使用MergeArea在VBA Excel中检测合并的单元格

我有这个问题 – 我必须从excel表中检测水平和垂直合并单元格。 我必须存储第一个单元格坐标和合并区域的长度。 我用两个for-cycles逐行遍历表。 如何使用MergeArea属性来检测合并和非合并区域? 如果单元格没有合并,它应该可能返回空的范围,但是,这: “如果当前范围不是那么” 根本不工作。 有任何想法吗? 非常感谢。

使用VBA编程Excel时,如何将select设置为Nothing?

在使用range.copy和range.paste之后创buildgraphics时,它会保留选定的粘贴范围,然后在稍后几行创buildgraphics时,会将该select作为图的第一个系列。 我可以删除该系列,但有没有更好的方法来做到这一点? 我试过了 Set selection = nothing 但它不会让我select。 我也尝试过selection.clear,但是这只是清除了最后选中的单元格,并且还为剧情添加了一个额外的系列。

添加“你确定吗?”我的excelbutton,我怎么能?

我的表单上有一个button,可清除整个8工作表工作簿。 我想偶尔清除一下,但是我不愿意这样做。 我尝试过使用Googlesearch,但是我发现每一个结果都假设我对VBA的掌握比我更强。 我怎么能这样做,当button被点击一个对话框popup“这将消除一切!你确定吗?[继续] [取消]”? 谢谢。

如何处理来自embedded式Excel.OleObjects或Excel.Shapes的事件

我正在处理旧的VBA程序的C#和VB.NET端口。 它有很多MSForms/OleObjectsembedded在它像CommandButton甚至图像。 我的第一个想法是将所有的button声明为Microsoft.Vbe.Interop.Forms.CommandButton但是导致COMexception, System._COM type不能转换为…Forms.CommandButton 。 如果我尝试一个更通用的解决scheme版本,我没有find任何项目,如果我尝试通过所有的VBComponet s我注意到,他们都是workbook中的workbook ,但没有控制: foreach (VBComponent xxx in Globals.ThisWorkbook.VBProject.VBComponents) { Interaction.MsgBox(xxx.Name); Interaction.MsgBox(xxx.ToString); } 因此,所有这些控件都不在.VBComponets ,但是我可以在这个工作簿中find它们作为OLEobjects thisworkbook.worksheets(n).OLEobjects (这与我是thisworkbook.worksheets(n).OLEobjects ,但我可能并不了解系统开始)。 如何处理来自这样的对象的点击操作? 我假设我需要使用Excel.OLEObjectEvents_Event接口,但我似乎无法弄清楚如何。 如果我尝试使用delegates进行自定义事件,我似乎无法将它们分配给OleObjects 。 如果我使用ActionClickEventHandler.CreateDelegate我可以得到各种各样的错误,使我认为这是一个死胡同。 来自MS的官方文档似乎并没有什么帮助,尽pipe它向我介绍了我正在研究的Verb的概念 。 到目前为止,只有“应用程序启动失败”才产生COM错误。 即使只是试图使用两个标准事件之一, .GotFocus ,我总是拉一个0x80040200错误。 例: Excel.OLEObject ButtonCatcher = Globals.ThisWorkbook.Worksheets(1).OLEObjects("CommandButton1"); ButtonCatcher.GotFocus += CommandButton1_Click; 抛出一个Exception from HRESULT: 0x80040200的COMException Exception from HRESULT: 0x80040200在第二行。 该button被启用,这是我从办公室dev站点查找代码后检查。 在包含控件的工作表的代码中尝试更通用的方法 : object CommandButtonStart […]

Excel VBA SVN客户端/集成

任何人都可以推荐一个SVN客户端在Excel中使用VBA(仅限代码模块)。 理想情况下,我还希望SVN在提交更改之前进行差异化时忽略大小写,以避免存储库中存在过多的stream失(VBA具有更改整个项目中variables大小的烦人习惯)。