我发现一个问题,从我的手工制作的select获取名称属性。 我使用非常简单的代码来获取选定的形状名称: Selection.ShapeRange(i).Name 一切工作正常,我得到autoshapes,smartart,图表的名称。 当我只有一个对象被选中,对象是一个图表时,问题就出现了。 我尝试执行我的代码(或尝试任何其他方法,例如一些简单的:顶,左和其他方法),我得到这样的错误: Run-time error "438": Object doesn't support this propert or method 我不明白 单独select图表的方法列表是否与用其他图表/形状select时不同?
我正在使用vba检查删除线文本的电子表格。 如 ActiveCell.Font.Strikethrough 只检测整个单元格中的删除线,我用下面的代码来删除删除线中的单个字符。 Dim iCh As Long Dim StrikethroughFont As Long: StrikethroughFont = 0 If Len(ActiveCell) > 0 Then For iCh = 1 To Len(ActiveCell) With ActiveCell.Characters(iCh, 1) If .Font.Strikethrough = True Then StrikethroughFont = StrikethroughFont + 1 End If End With Next iCh End If 代码正常工作。 问题是执行时间随着单元内容长度呈指数增长。 在每个单元中less于100个字符,代码运行速度超快。 在1个单元执行时间内有1000个字符的地方是30秒 – 仍然可以接受该项目 在一个单元执行时间约半个小时的地方有3000个字符。 在1个单元格中有5000个字符的地方Excel继续运行似乎永远,有时它崩溃 […]
我已经在这里find了很多指导,让我到目前的位置,但是我需要一些帮助来完成我的代码(我是一个完全的新手,所以对我很感兴趣)。 我正在尝试在Outlook中使用VBA来从我的Outlook的某个文件夹中的电子邮件中导出数据以优化。 我需要从众多电子邮件的消息正文中提取数据到Excel表单中。 我从中提取的电子邮件模板可以在下面find。 我需要参考号后面的10位数字,序列号后面的10位数字以及问题描述后的7位数字。 (如果不清楚的话,我会把需要的部分加粗) 尊敬的先生/小姐xxxxxxxx, ——————不需要信息—————– 参考号1234567890 。 状态:—-不需要信息—– 序列号: XXXXXXXXXX问题描述: ______________(这里的数据可能略有不同,我只能从这个区域拉出一个7位数的号码,但是如果不能这样做的话就这样吧)_______ 用这个…。 —————–其余是不需要的———————– 到目前为止,我已经能够创build一个脚本来浏览我当前所在的Outlook文件夹,打开Excel工作表,在Excel中命名标题,并导入数据。 但是,它将整个身体拉到不只是我需要的部分,而是把它们放在excel中错误的列中。 这是因为我是一个完整的新手在这一点,我可以得到。 我在这个网站上find了一些与解决scheme类似的问题的例子,但我无法理解它们。 通过大量的试验和错误,我采取了张贴自己,任何帮助将不胜感激。 这是我现在的代码 – Sub Extract() On Error Resume Next Set myOlApp = Outlook.Application Set mynamespace = myOlApp.GetNamespace("mapi") 'open the current folder, I want to be able to name a specific folder if possible… Set myfolder […]
部分程序在工作表中粘贴几列数据,然后删除每列中的重复值(用variables范围search名为rngDelete的重复值),然后统计唯一值的数量。 获取计数值后,我删除rngDelete中的所有行。 但是我注意到在删除行之后,我的垂直滚动条长度仍然保持不变,即与在rngDelete行中有数据的长度相同。 确实重新打开工作表将重置滚动条的长度,但我想知道是否有办法强制这种情况发生在程序运行时完成?
我正在使用Excel VBA的Windows API使用FindWindow()函数来处理特定窗口,但FindWindow()需要窗口的完整标题/标题来查找。 问题1 P_Win = FindWindow(vbNullString, "PlusApi_Excel Sample_17_39_12 Api Generated Orders")在我的情况下,窗口将更改名称(dynamic)(窗口名称的某些部分将被固定,某些部分将是dynamic的) 防爆。 窗口名称是第一次"PlusApi_Excel Sample_17_39_12 Api Generated Orders" ,第二次将是"PlusApi_Excel Sample_17_45_13 Api Generated Orders"我想我需要打电话窗口与部分名称,但我不知道该怎么办,请亲切地帮助我 问题2 以上的挑战我有一个更多的问题PlusApi将被隐藏,但我的代码仍然显示正面的价值。 我想我只需要调用"visible"窗口。
安装程序:我有许多用户窗体的项目,并在双监视器系统上打开时,默认的StartUpPosition是1 = CenterOwner,它出现在主显示器(Windows桌面的中心)的右侧。 我正在尝试编写一小段代码来更改项目中每个用户窗体的一个属性。 在这种情况下,具体来说,.StartUpPosition = 2(CenterScreen) 使用Microsoft Office Professional Plus 2010 我已经知道如何使用VBA中的属性编辑器在Positions.StartUpPosition下更改StartUpPosition。 问题是,在这么多的项目中有这么多的用户窗体,我想一次在每个项目上更改它们。 最终,我想通过使用方法(FormName,Property,Value)的重载参数来使用相同的代码来改变任何属性。 现在,我可以只用一个来处理StartUpPosition。 当我运行这个代码时,打开UserForm时,它按预期工作,覆盖StartUpPosition = 1(CenterOwner)的默认值,并将它显示在屏幕的中心。 Sub UserForm_Initialize() With UserFormName .StartUpPosition = 2 'CenterScreen' End With End Sub 然而,当我运行它embedded在这个循环中循环通过模块的项目的控制,试图一次性改变所有表单的默认值,我得到以下错误。 错误:运行时错误“438”:对象不支持此属性或方法。 Sub UserFormStartUp_Center() Dim VBComp As Object 'For each control in project' For Each VBComp In Application.VBE.ActiveVBProject.VBComponents 'Check to see if control is […]
我正在使用此函数从已closures的工作簿中检索一个值。 在这个代码的第8行中,我不明白为什么使用“A1”。 整个八号线究竟发生了什么? 我也被xlR1C1参数弄糊涂了。 Private Function GetValue(path, file, sheet, ref) Dim arg As String If Right(path, 1) <> "\" Then path = path & "\" If Dir(path & file) = "" Then GetValue = "File Not Found" Exit Function End If arg = "'" & path & "[" & file & "]" & sheet & […]
请耐心等待,因为我尽可能简洁地描述为poss: 我有一个基本的交易电子表格,如果价格超过我的目标价格,一个单元格AB4显示文字“买入”。 如果我拥有这只股票,并且价格低于我的目标,那么同一个单元显示“卖出”。 无论哪种方式,电子表格也会自动发出订单来执行交易。 所有我想要的是一个msgbox提醒我每当信号出现时记笔记。 我只需要一个提醒,但我确实需要它,因为我总是忘记。 在阅读了很多过去的post之后,这是我第一次尝试: Private Sub worksheet_calculate() If Range("AB4").value = "BUY" Or Range("AB4").value = "SELL" Then MsgBox ("Record Catalyst") End If End Sub 似乎工作,但只要我点击“确定”msgbox会立即重新出现。 只要“买”或“出售”文本显示msgbox不会消失,无论我点击它的次数。 所以我再次search,并find一种方法,使msgbox只出现一次: Private Sub worksheet_calculate() If ActiveSheet.Range("BV4").Text = "Triggered" Then Exit Sub If Range("AB4").value = "BUY" Or Range("AB4").value = "SELL" Then MsgBox ("Record Catalyst") ActiveSheet.Range("BV4") = "Triggered" End […]
我一直试图解决这个问题几天,现在我不能得到我的头。 我已经search了多个网站(甚至在这里几次),我看到很多人问这个问题,但解决scheme不适合我。 我想查找范围中最后一次出现的string,并将地址存储在variables中,并显示一条消息告诉我它在哪里。 到目前为止,我有这个 Private Sub CmdBtnClockIt_Click() Dim job As String Dim searchTerm as Range job = CmbBoxJob.Value searchTerm = Range("A1:A999").find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious).Column MsgBox "last cell is " & searchTerm.Address End Sub 我似乎得到的是“无效限定符”或“对象variables或块variables未设置” 任何帮助表示赞赏
如果觉得这应该是很容易的,但是我没有得到它的工作,没有再次检索单元格的价值。 首先,我有2个date单元格: Dim agreedDate As Date Dim completedDate As Date 这工作..(但看起来凌乱) agreedDate = Worksheets("Data").Cells(Counter, 7).Value completedDate = Worksheets("Data").Cells(Counter, 9).Value If (IsEmpty(Worksheets("Data").Cells(Counter, 7).Value) = True) Or (IsEmpty(Worksheets("Data").Cells(Counter, 9).Value) = True) Then [.. do stuff] End If 这不工作 – 为什么不? agreedDate = Worksheets("Data").Cells(Counter, 7).Value completedDate = Worksheets("Data").Cells(Counter, 9).Value If (IsEmpty(agreedDate) = True) Or IsEmpty(completedDate) = True) Then […]