Tag: vba

Excel正在等待另一个应用程序来完成一个OLE操作

在你明显的去之前: Application.DisplayAlerts = False还没有解决我的问题。 我已经编写了一个VBA过程(在Excel 2010中启动),它围绕包含不同Excel文件的数组进行循环。 循环打开文件,刷新数据,保存并closuresarrays中每个项目的文件。 我已经写了一个错误catch子程序,所以我logging哪些excel文件无法打开/刷新/保存等,所以用户可以手动检查他们。 有些文件相当大,涉及大量的networking数据; 有时我得到一个对话框: Excel正在等待另一个应用程序来完成一个OLE操作 。 我可以使用Application.DisplayAlerts = False来禁用消息,但这大概会禁用所有的警报,所以我无法捕捉错误? 此外,我已经使用该行进行了testing,并且不会停止popup对话框。 如果我按下进入它进行,但几分钟后可能会popup。 有没有一种方法可以停止消息而不停止其他警报? NB。 我的进程有一个Excel的控制实例,它运行VBA并打开要在单独的实例中刷新的工作簿。 谢谢你的帮助 我的代码提取下面是包含刷新元素 Sub Refresh_BoardPivots_Standard() ' On Error GoTo Errorhandler Dim i Dim errorText As String Dim x Dim objXL As Excel.Application Set objXL = CreateObject("Excel.Application") GetPivotsToRefresh ' populate array from SQL For Each i In […]

VBA(Excel)ActiveX列表框更改事件recursion行为

我不是VBA程序员,所以如果我在这个问题上的一些术语是不正确的,我会提前道歉。 我的一个同事想在清单被选中的时候立即清除这个select。 一些谷歌search后,我们发现一个办法是通过更改事件。 最初我们尝试了: Private Sub ListBox1_Change() For i = 0 To ListBox1.ListCount – 1 ListBox1.Selected(i) = False Next i End Sub 但是,似乎将Selected属性设置为False会在列表框上触发Change事件,并且这实际上会变成无限循环并导致Excel(2007)崩溃。 鉴于我们知道有两个条目我们也试过: Private Sub ListBox1_Change() ListBox1.Selected(0) = False ListBox1.Selected(1) = False End Sub 那可行! 虽然我们期望同样的行为 – 对于Selected属性的设置,会导致Change事件再次触发并导致无限循环。 然而,似乎有一次例如ListBox1.Selected(0)= False Change事件被重新触发,但在这个迭代它不重新触发这一行 – 我猜是因为它知道这个Selected属性已经被设置为False对于这个项目,所以没有什么改变。 但是,如果是这样的话,那么我们也会期望在第一个解决scheme中的行为..所以似乎有一些区别说ListBox1.Selected(i)= False与直接指定实际项目索引(而不是通过variablesi )。 有没有人知道这种行为的原因? 希望这个问题是有道理的,我试着尽我所能解释它。 谢谢阿米特

在VBA的Windows 7和更早版本的任务栏上更改Microsoft Excel的图标

我想在Windows 7及更早版本的任务栏上更改Microsoft Excel应用程序的图标 。 我检查了互联网,只能find更改Microsoft Excel窗口的图标的代码行。 这些代码更改Microsoft Windows Vista和XP中Microsoft Excel程序的任务栏图标。 我知道在Windows 7和更早版本的Windows操作系统中,任务栏devise的逻辑已经发生了变化; 我知道在提到的Windows操作系统中的任务栏使用32像素的图标来显示图标。 所以,我想知道如何在Windows 7的任务栏上更改Microsoft Excel的图标?

dynamic添加嵌套循环

我有一个“X”数量的variables(可能范围在3到20个选项之间),这些variables将被组合来计算所有可能的组合以符合标准。 对于每个额外的variables引入一个额外的循环,但是我不知道是否有可能创build循环dynamic(在Excel VBA中,代码不必非常快)。 为了演示:我有var。 A与h = 2,var。 B与h = 3.我想知道所有等于10的组合或2个variables的最佳组合。 在这种情况下:选项1 = 5 * A = 10,3 * B = 9,2 * A和2 * B = 10,3 * A和1 * B = 9。 代码如下所示: For A = 0 to 5 h = 0 'Reset previous h if solution is found For B = 0 to […]

什么进入Excel工作簿对象,增加文件大小?

我正在尝试减less我正在使用的Excel工作簿的文件大小。 我已经知道未使用的行是一个问题和不必要的图像等。神秘的是为什么只有似乎增长的Excel的秘密部分? 我可以发现整个文档的总大小 Sub workbook_objectsize() With CreateObject("Scripting.FileSystemObject") Set wb = ActiveWorkbook WBObjectSize = .GetFile(wb.fullname).Size MsgBox (Format(WBObjectSize, "#,##0") & " Bytes") End With End Sub 我可以通过表单和WB对象使用来发现大小 Sub GetSheetSizes() ' ZVI:2012-05-18 Excel VBA File Size by Worksheet in File ' CAR:2014-10-07 Enhanced to take hidden and very hidden sheets into account Dim a() As Variant Dim Bytes […]

在Windows Server上运行SAS Enterprise Guide作业

我已经在SAS EG中编写了一段代码,只是打开一个Excel工作簿。 Excel工作簿包含在“工作簿打开”事件中执行的VBA代码。 所有的代码几乎都是这样的,是它每天第一次刷新所有的数据连接。 当我手动运行SAS程序时,它完全按照计划运行。 它打开Excel文件,然后触发VBAmacros。 当我在我的服务器上安排SAS EG作业时,作业运行,但是我的Excel文件没有任何反应。 我也没有在我的SAS代码或我的Windows计划日志中出现任何错误。 这是我的SAS代码: options noxwait noxsync; x '"C:\Program Files\Microsoft Office\Office15\excel.exe" "\\route\to\file\excel_macro_playground.xlsm"'; run; 这是我的VBA: Private Sub Workbook_Open() Dim wsSheet As Worksheet On Error Resume Next Set wsSheet = Sheets("book_helper") On Error GoTo 0 If wsSheet Is Nothing Then Sheets.Add.Name = "book_helper" ActiveWorkbook.RefreshAll Sheets("book_helper").Range("A1").Value = Date Sheets("book_helper").Visible = xlVeryHidden Application.DisplayAlerts […]

“Dim myarray()as String”VS“Dim myarray()as Variant”

我总是害怕在假设分配不必要的大量内存的情况下声明variables。 最近正在努力提高电子表格的性能,但我却得到了相反的印象(请参阅下面的编辑): Dim myarray() as Variant改善了性能,与Dim myarray() as String相比Dim myarray() as String 这两个声明的主要区别和后果是什么? 在这里找不到明确的指导: https : //msdn.microsoft.com/en-us/library/aa711948.aspx 编辑:受控性能testing 我运行了一个受控的性能testing(将dim myarray() as Variant版本,创build一个副本并将两个variables更改为Dim myarray() as String ) 正如你可以看到下面我错了,性能差异并不显着。 Dim myarray() as Variant VERSION Start 4:05:47 PM FXLoaded 4:05:47 PM 00:00 TDLoaded 4:06:38 PM 00:51 LisofPCTD 4:06:57 PM 00:19 YDLoaded 4:07:47 PM 00:50 LisofPCYD 4:08:14 PM 00:27 […]

VBA通过工作表的不需要的循环

我已经使用了这个网站,但是这是我发布的第一个问题,希望我能给出足够的细节。 我无法find任何相关的答案,因为不pipe我search什么,我都会得到与循环代码有关的各种答案。 一些背景:我devise了一个Excel文档来跟踪我工作场所的一些项目(以下简称为“主文档”)。 由于以前的跟踪器允许用户随时编辑任何内容,因此我使用了表单来确保所有信息都能正确input并存储。 对于主文档中的每个项目,都有一个单独的Excel工作簿(以下简称项目文档)。 主文档中有许多表单,它们每次被激活时都会运行代码(因为它们需要更新)。 由于每个项目文档中都有一些VBA代码,这些代码对于与主文档同步数据至关重要,所以我添加了一个警告工作表,该项目文档在没有macros的情况下打开时显示。 这涉及在保存事件之前和保存事件之后使用打开的工作簿,以确保只显示没有macros的警告。 下面是每个事件的代码(显然,放在ThisWorkbook Module中) Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Auto_Open 'This is for sync (Master Document checks for text file to see if any changes have been made to Item Document) If booChange = True Then Dim oFile As Object Set oFile = fso.CreateTextFile(strTextFile) SetAttr […]

Worksheet_change:删除整个列值,在此操作之前识别非空单元格

我有一个工作簿,用于input主表单,主表单中的值根据主表单中“types”列的单元格值复制到2个子表单中。 子表单中的“注释”列中的任何值都将作为注释添加到主表单的相应行中。当子表单中的“注释”列中的值一次性删除时,我想标识在这个动作之前的非空单元格,并删除主表中的相应注释。 目前我已经编写了代码,如果在子表单的“注释”列中添加/删除了一个值,然后在主表单的相应条目中添加/删除注释。 Private Sub Worksheet_Change(ByVal Target As Range) Dim temp As String Dim tem As String With Target If .Count = 1 And .Column = 8 And .Row < 600 Then tem = .Row If Sheets("Parts- input").Cells(tem, 8).Comment Is Nothing Then If Sheets("Pins").Cells(.Row, .Column).Value = "" Then Sheets("Parts- input").Cells(tem, 8).Comment.Delete Else Sheets("Parts- input").Cells(tem, 8).AddComment […]

VBA – 从closures的工作簿复制数据的最佳方法

我是巴西一家工业公司的实习生,碰巧我正在使用excel。 几天前我刚刚开始玩VBA,我很喜欢它可以为我做的许多事情! 我没有很强的编程背景,所以我基本上是在学习。 代码工作正常,从开始到结束只需不到15秒。 我不打扰时间,但是如果能改善的话那就太棒了。 我的主要目标是保持代码简单高效。 我将在接下来的几个月里离开公司,我希望它很容易维护和使用。 我所要求的是编写我的代码更好的方法,以便其他人更容易理解,如果可能的话(当然是!)花费更less的时间。 我的代码删除我目前的工作簿中的4张内容,然后从其他4封闭的工作簿复制更新的数据。 然后closures一切。 :)数据是关于日常生产和他们的名字是在葡萄牙语,对此感到遗憾。 Sub CopiarBase() ' ' Atalho do teclado: Ctrl+q ' ' Variables Dim MyCurrentWB As Workbook Dim BMalharia As Worksheet Dim BBeneficiamento As Worksheet Dim BEmbalagem As Worksheet Dim BDikla As Worksheet Set MyCurrentWB = ThisWorkbook Set BMalharia = MyCurrentWB.Worksheets("B-Malharia") Set BBeneficiamento = MyCurrentWB.Worksheets("B-Beneficiamento") Set […]