Tag: vba

在Excel / VBA中将文本框附加到图表上的点或线

我想知道如何将文本框附加到我正在处理的macros的Excel图表中的一个点或一行。 我一直在使用.AddTextbox方法,如 .Shapes.AddTextbox(msoTextOrientationHorizontal, 150, 250, 100, 15) _ .TextFrame.Characters.Text = "Temperature" 但是,我必须手动将文本框拖动到它所表示的图表上,因为图表的方向不是直线。 有没有办法将线/点转换为我可以用作variables的图表方向? 或另一种方式? 可能使用datalabelfunction,但我想能够自定义一个轴的位置。 谢谢

Excel VBA Vlookup – 无法获取Vlookup属性

我有以下脚本,我得到一个VLOOKUP错误: Dim DataRange, LookupRange As Range Dim Data, Test As Variant Set DataRange = Sheets("sheet").Range("A1:K12000") Set LookupRange = sheets("sheet2").Range("A1:C50") Data = DataRange.Value For i = LBound(Data, 1) To UBound(Data,1) ReDim Preserve Test(1 To 3, 1 To i) test(1, i) = Application.WorksheetFunction.VLookup(Data(i, 4), LookupRange, 3, 0) 'Other stuff works fine Next i 不幸的是,我得到错误说明: "Unable to get […]

如何使用VBA将公式input到单元格中?

我想input一个公式到一个单元格,其中包含variables名为var1a? 我有的代码是: Worksheets("EmployeeCosts").Range("B" & var1a).Formula = ""SUM(H5:H""& var1a) 但它进入一个Excel错误的工作表。

Excel vba – 禁用鼠标事件

我正在开发Excel 2010工作簿,处于手动公式计算模式。 文件 – >选项 – >公式 – >工作簿计算 – >手动 但是,我想要一些菜单选项来重新计算工作簿。 所以我使用下面的代码: Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Application.EnableEvents = False If SOME_CONDITION Application.Calculate ActiveSheet.AutoFilter.ApplyFilter End If Application.EnableEvents = True End Sub 问题是,如果我正在滚动鼠标中键,或者在执行该函数时单击一个单元格,计算会在完成之前突然终止,这是不可接受的。 看起来Application.EnableEvents=False行不会阻止鼠标事件被触发,而且我也无法find任何可以防止这个bug的方法。 因此,我需要的是在计算过程中阻止所有事件的方法,或者以某种方式防止触发的事件中断计算(就像工作簿公式计算不是手动时那样)。 非常感谢您的帮助! 谢谢。 马坦。

如何防止在VBA中触发ActiveX事件?

我正在寻找一种更好的方法来禁用在Excel工作簿中触发的ActiveX事件(尽pipe这将适用于具有ActiveX对象的所有Office应用程序)。 希望类似于Application.EnableEvents = false ,但这不适用于ActiveX。 在下面的例子中使用全局布尔值是微不足道的,但我有很多事件处理程序为我的ActiveX对象,这将是非常容易的东西,我可以普遍适用于临时禁用ActiveX事件。 我真的不想为这些方法中的每一个添加一个if / exit子语句。 为了演示此问题,请在工作表中创build一个ActiveXcombobox,并将以下内容添加到该工作表模块中 Public initializingContent As Boolean Private Sub intializeAllActiveXContent() 'this doesn't apply to activeX events :'( Application.EnableEvents = False 'this could work but is not really elegant 'change this to false to show my problem in 'the intermediate window (called not once but twice) initializingContent = True […]

如何在VBA中实现自定义迭代类

我想添加一个function到我的类,所以我可以用它们为每个循环。 我写了hashmaps,arraylists,队列,集合等,我想迭代。 现在我正在寻找一种方法来实现IUnknown类来构build自定义迭代器。 我已经知道如何使用 private objPeople as Collection Public Property Get NewEnum() As IUnknown Attribute NewEnum.VB_UserMemId = -4 Attribute NewEnum.VB_MemberFlags = "40" Set NewEnum = objPeople.[_NewEnum] End Property 但是那里的所有例子都是基于Collection类的,我不想使用它们。 我想要关注的是试图实现IUnknown接口,但我还没有find任何有关如何做到这一点的参考。 我在Java,C ++,C#等方面拥有丰富的经验,所以我认为即使在VBA中也有这样的实现方式,甚至可以用API调用这样的东西。

Excel VBA:如何从代码触发事件?

我有一个Worksheet_BeforeDoubleClick事件,在目标单元格中​​打开一个列表框。 我被要求通过一个button来提供相同的function,而不是(或者除了)双击。 在我input的button的Click事件中: Call Worksheet_BeforeDoubleClick(Selection,true) …所以button只是“双击”单元格。 它似乎运作良好,但在我开始在我的项目中使用这种技术之前,我想知道是否有我应该知道的陷阱。 从另一个事件或标准的代码模块调用一个事件的最佳实践是什么?

使用VBA在PowerPoint中设置对象的位置

我正在使用下面几行VBA来设置我刚刚粘贴到PowerPoint中的Excelselect的大小/位置: Set Shp = _ PPApp.ActivePresentation.Slides( _ PPApp.ActiveWindow.Selection.SlideRange.slideindex).Shapes(3) Shp.ScaleHeight 0.75, msoCTrue Shp.ScaleWidth 0.75, msoCTrue Shp.Left = 0.58 Shp.Top = 1.6 但是macros运行后,我的形状左上angular的水平位置是0.01“,左上angular的水平位置是”0.02“,根据我的代码,位置应该是0.58和1.6。为什么这个职位没有正确设置?

Excel 2010 VBA – 如何优化此代码,使其不会滞后?

我是VBA的新手,最近我创build了一些macros。 我目前有一个工作,但有时不是很合作。 我已经做了一些关于如何优化VBA代码的阅读,但是我还没有走得太远。 我明白使用Select是不好的,我已经删除了尽可能多的Select线我自己。 我也读过很多, if statements和loops结合起来也很难运行(当然我也有两个loops倍数)。 所以我知道为什么我的代码不好,但我真的不知道如何解决它的一些原因。 我补充说 Application.ScreenUpdating = False Application.ScreenUpdating = True 我的macros也是如此。 这有帮助,但不是很多。 我有其他的macros可以运行很长时间,永远不会冻结。 如果该macros在10-15秒内未完成,则此macros会冻结。 如果我只有几百行数据,它没有问题。 如果我有几行1000行的数据,它会在冻结之前没有完成。 Option Explicit Sub FillGainerPrices() Application.ScreenUpdating = False 'Search each name on "Gainer Prices" and if the same name is on "Gainers", but not on Gainer Prices _ move it over to Gainer Prices tab. […]

使用VBA通过代号引用另一个工作簿中的工作表

我正在尝试使用VBA将数据从一个工作簿复制到当前工作簿。 InputBook是一个工作簿对象,指的是我想从中提取数据的文件。 主要的问题是引用InputBook工作簿中的特定工作表。 在InputBook中 ,我有一个名为“Lines”的代码名为LINES的工作表。 我宁愿用代号来引用这个工作表,例如: NumItems = WorksheetFunction.CountA(InputBook.LINES.Columns(1)) 这显然不起作用,我知道我可以通过使用以下任一function使其function: NumItems = WorksheetFunction.CountA(InputBook.Sheets("Lines").Columns(1)) NumItems = WorksheetFunction.CountA(InputBook.Sheets(2).Columns(1)) 但是,我宁愿不使用这两种方法中的任何一种,因为它们看起来不够健壮。 有没有办法在另一个打开的工作簿中引用工作表对象的代号? 谢谢。