Tag: vba

如何通过VBA(Excel)在Editboxfunction区上设置文本

如何在function区编辑框中设置文本? 我无法在网上find它:/ 我只能find点击事件的例子,但没有关于从一个小组设置文本。 举个例子,我想要这样的东西: Sub settingText() editboxname = "my text" end sub

types不匹配循环扫描Outlook邮件

使用VBA循环播放Outlook收件箱时,会出现间歇性错误。 types不匹配发生在Next objOutlookMes​​g行上。 注意:我希望尽可能使所有代码都包含在内。 滚动到底部,查看出现错误的位置。 Private Sub CheckInbox(strFolder As String, Title As String) Dim objOutlook As Outlook.Application Dim objOutlookNS As Outlook.Namespace Dim objOutlookInbox As Outlook.Folder Dim objOutlookComp As Outlook.Folder Dim objOutlookMesg As Outlook.MailItem Dim Headers(1 To 20) As String Dim i As Integer Headers(1) = "Division:" Headers(2) = "Request:" Headers(3) = "Exception Type:" Headers(4) = […]

Excel VBA将范围复制到新的工作簿中

我是Excel VBA的新手。 我试图从工作表输出复制一个范围的数据到一个新的Excel工作簿,并保存新的工作簿的价值在E3。 作为奖励,我希望能够将数据复制到wordpad并保存为E3.xml 这是迄今为止的VBA : Sub CopyOutput() Dim myname As String mystring = E3 Dim myselection As Range myselection = Sheets("Output").Columns("F").Select Set NewBook = Workbooks.Add With NewBook .SaveAs Filename:="C:\Program Files\White Plume\Scenarios\" & myname & ".xls", FileFormat:= _ xlsx, CreateBackup:=False End With myselection.Paste End Sub

从C#调用Excelmacros时出错

我正在尝试使用C# 4.5从Excel文件中调用macros。 我的Excel版本是2010年。 当我尝试调用macros时,出现以下错误: Cannot run the macro 'MacroName'. The macro may not be available in this workbook or all macros may be disabled. 我为此已经search了很多,但似乎没有任何工作。 我打开了macros观安全,如下面的屏幕截图所示: 我正在使用的代码如下所示: Excel.Application book = null; Excel.Workbooks workbooks = null; Excel.Workbook macroWorkbook = null; Excel.Workbook destinationWorkbook = null; try { book = new Excel.Application(); workbooks = book.Workbooks; macroWorkbook = workbooks.Open(@"D:\Work\Macros.xls"); […]

文件select器,我如何指定文件types?

我有以下代码打开文件select器,并让用户select一个文件。 Sub SelectFiles(ByRef test As String) Dim iFileSelect As FileDialog Set iFileSelect = Application.FileDialog(msoFileDialogFilePicker) Dim vrtSelectedItem As Variant If iFileSelect.Show = -1 Then For Each vrtSelectedItem In iFileSelect.SelectedItems test = vrtSelectedItem Next vrtSelectedItem End If Set iFileSelect = Nothing End Sub 我希望它现在只显示某种types的文件(在这种情况下是XML),用户可以select任何文件types。 我经历了一些有创意的谷歌search,但似乎找不到解决scheme,我觉得它应该是非常简单的。

select范围时避免焦点更改 – Excel

我有一个macros,它根据一些标准创build一个给定的子范围。 然后将这个子范围复制到某个位置,在那里形成由Chart读取的数据。 每次单击微调器时都会调用macros,因为这会更改原始范围,因此需要计算新的子范围。 程序工作正常,虽然它可能是非常原始的(首先使用VBA-Excel的编码经验)。 只有一点,当我单击微调器更新数据并启动例程时,工作表的“焦点”从button的位置移动到macros的工作范围的开始位置。 我通过在例程结束处使用Application.Goto来克服这个问题,使窗口的左上angular回到Chart和Button所在的位置。 但是,这意味着每次运行macros时,窗口内容都会移动到范围,然后返回到我想要的位置。 这不是很高雅,除了可能导致一些海呕;-) 我想知道我能否避免这种情况,以及如何避免这种情况。 感谢任何input,代码如下。 Sub test_copy2() Dim InRange As Range Dim c As Range, o As Range, t As Range Dim r As Integer Set InRange = Cells.Range("M434:ATF434") Set o = Cells.Range("L434") For Each c In InRange If c.Offset(-219, 0).Value = 8448 Then Set t = Application.Union(o, c) Set […]

你可以给Excel中的列variables名称?

我有一个相当大的Excel电子表格,大约有4500行,35列。 当修改字段值时,我们的VBA代码通过字母(aka A1 , A2 , A3 … A4500 )引用列…这是一个限制,因为我们无法在列表中移动列而无需更新我们的所有代码到该列已移到的位置。 有没有可能给一个列的variables名? 如果列A当前拥有First Name ,是否可以命名此列First_Name以便无论此列移动的位置如何,都会保留First_Name引用? 那么在我们的VBA代码中,我们可以说First Name而不是A1 ? 谢谢!

在VBA中声明全局variables的正确过程?

我有一个macros的工作簿,其中有一些永久存在的工作表,这些工作表经常被清除,更新等等。由于它们在各种子程序中被引用,我已经按照以下方式将每个相应的工作表对象作为一个伪全局variables: “主”表的示例: Function MAIN() As Worksheet Set MAIN = ThisWorkbook.Sheets("Main") End Function 通过这样做,我可以参考其他子例程中的每个工作表,例如: MAIN.Cells.ClearContents 我也以类似的方式定义了一些伪全局常量,这些常量位于“Main”表单中的固定位置,例如: Function NumLines() As Integer NumLines = MAIN.Range("C3").Value End Function 这样,我就像整个代码中的任何variables一样使用“NumLines”。 我希望有一种更有效的方式来pipe理像这样的全局访问variables,并想知道,什么是更好的方法来实现这一目标?

数组公式到VBA

我有一个名为“城市”和“数据”的Excel工作表。 “数据”页面包含108264行数据,列一直向上到列AT。 在“城市工作表”下,我列出了从B4到B214行的210个城市。 在它旁边(C列)列出了每个城市使用的代码数(即该城市使用了多less代码)。 接下来的20列(D列到W列)应显示每个城市最常用的代码序列(即最不常用的最常用代码)。 我用样本伪数据集附上图像,以提供我所指的内容的graphics表示。 如果你看城市“1”例如(第4行“城市”),你会发现它有5个计数,最常用的代码是5,然后是4,然后是3,然后是2,最后是1。如果你参考“数据”图像,你可以看到相关性。 我用于这个样本集的数组公式如下: 在“城市”的D4中, {=IFERROR((MODE(IF(ISNUMBER(SEARCH(B4,Data!$B2:$B6)),IF(ISNUMBER(Data!$K2:$AT6),Data!$K2:$AT6)))),"")} 在“城市”的E4中, {=IFERROR(MODE(IFERROR(SMALL(IF(ISNUMBER(SEARCH($B$4, Data!$B2:$B6))*ISNUMBER(1/Data!$K2:$AT6)*ISNA(MATCH(Data!$K2:$AT6,$D4:D4,0)),Data!$K2:$AT6,""),ROW(INDEX($A:$A,1):INDEX($A:$A,COUNT(Data!$K2:$AT6)))),"")),"")} 然后从E4开始拖动公式,并根据前一列的数据自动计算常用代码的频率。 目的是这样的:对于“城市”工作表中提到的每个城市,我想通过从“数据”工作表中search列B和列K到AT来返回这20个最常用的代码。 所以它会查看B列中的城市,然后查看列K到AT中常用的代码。 我有两个数组公式,我用这个(即计数最常用的代码,比取决于前一列的值,返回下一个最常用的代码)。 问题是,由于如此庞大的数据集,为每个单元格创build一个数组公式会耗费大量时间,并会显着降低Excel电子表格的速度。 所以,这是我迄今为止所尝试的: 数组公式(请参阅附表) 在VBAs之下。 第一个返回运行时错误“1004”无法设置范围类的FormulaArray属性 ,而第二个什么都不做。 任何build议或帮助加快arrays公式,或相应地修改VBA将不胜感激。 如果你有一个备用的VBA,那也是值得赞赏的。 谢谢。 Sub Option1() Dim r As Long For r = 4 To 214 Sheet2.Cells(r, 210).FormulaArray = _ "=IFERROR((MODE(IF(ISNUMBER(SEARCH(C" & CStr(r) & ", Data!$B$2:$B$108264)),IF(ISNUMBER(Data!$K2:$AT108264),Data!$K2:$AT108264)))),"")" Next r End Sub Sub Option2() Sheet1.Range("C4").FormulaArray […]

如果单元格A为空,则清除列B到F的内容

我有一个工作表,其值取决于单元格A.如果A列中的一行包含一个值,那么列B到H中的单元格将相应地更改。 如果列A的单元格为空,则要重置列D至F中的单元格。 我写下了下面的VBA代码 Private Sub Worksheet_Change(ByVal Target As Range) Dim n As Integer For n = 5 To 75 Application.EnableEvents = False If VarType(Cells(n, 1)) = vbEmpty Then Cells(n, 4).ClearContents Cells(n, 5).ClearContents Cells(n, 6).ClearContents Application.EnableEvents = True End If Next n End Sub “FOR”循环令人讨厌,并且在任何进入任何单元格之后让Excel暂停1秒或更长时间,任何人都可以帮助我纠正上面的代码,以便在没有“FOR”循环的情况下执行我所需的操作。