Tag: vba

检查VBA中是否存在嵌套字典键

我正在尝试使用Excel VBA中的词典字典。 我试图找出是嵌套字典是否已经有一个关键,如果没有,添加它。 我的数据如下所示: Country, Customer, Purchased US, Alan, Lawnmower US, Alan, Hammer US, Karen, Donkey US, Simon, Mustang MX, Carl, Lawnmower MX, Alan, Donkey … 我想到的数据结构看起来像dictionary –> dictionary –> array – 即, country –> customer –> purchased 。 我用来确定一个国家在country字典中是否存在的代码是: If Not dataset.Exists(country) Then … 但是,看起来像下面的代码不起作用: If Not dataset.Exists(country)(customer) Then …. 你如何检查下一级的字典条目? 这是一个国家字典存储在一个数组的内容,然后检查(这似乎是一团糟)的情况下?

VBA正则expression式,replace组

我正在使用Excel中的VBA正则expression式来replace格式不正确的datestring(和其他项)。 我正在寻找replace具有适当的YYYY-MMM-DD格式,但缺less破折号分隔符的datestring – 例如: 2014,APRIL,04 or 2014.Apr,04 or 2014/Apr-04 我希望他们被格式化为以下任何一种: 2014-Apr-04 2014-April-04 (即保持年份,月份,date元素的提供,但只需用短划线代替逗号,句点或其他奇怪字符来代替分隔符) 我现在的代码是: Dim RE As Object Set RE = CreateObject("vbscript.regexp") With RE .Global = False ' Several occurrence to be found .IgnoreCase = True .Pattern = "(((19|20)[0-9]{2})[, /.]([a-zA-Z]+)[, /.](0[1-9]|[12][0-9]|3[01])[, /.])" End With Dim ReplacePattern As String ReplacePattern = "$1-$2-$3" Dim match As Boolean […]

使用Excel VBA更改closures的工作簿中单元格的值?

我目前在VBA中使用这个函数来获取封闭工作簿中单元格的值。 我想使用类似的过程来设置单元格的值为我想要的,而不打开文件。 那可能吗? 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 & "'!" […]

closuresPowerpoint的屏幕更新

我正在编写一个脚本,通过一个文件夹循环,并从一些条件创buildgraphics,然后将其导出到powerpoint。 目前,创build130个graphics需要290秒,其中286个被powerpoint使用。 我怀疑这个主要原因是无法closures屏幕更新。 我已经尝试使用从这里http://skp.mvps.org/ppt00033.htm的代码来解决这个问题。 但是,我没有注意到任何影响。 虽然我可以在后台切换并保留幻灯片,但在切换到Powerpoint时,所有更改都将显示出来,您可以基本看到它如何减慢程序的速度。 任何人都知道我是如何使用这个代码? 如果是在类模块中,我应该做别的什么,或者我做错了什么? 下面是我借用的代码片段和一个我如何尝试调用它的例子: Option Explicit ' UserDefined Error codes Const ERR_NO_WINDOW_HANDLE As Long = 1000 Const ERR_WINDOW_LOCK_FAIL As Long = 1001 Const ERR_VERSION_NOT_SUPPORTED As Long = 1002 ' API declarations for FindWindow() & LockWindowUpdate() ' Use FindWindow API to locate the PowerPoint handle. Declare Function FindWindow Lib "user32" Alias […]

是否有一个简单的方法来replace占位符在Excel中?

我有这样一个公式: =IF(OR($A1="xyz",$B1="abc",$C5="dmz"),1,0) 我想用一个静态地址,明确指出工作表,即每个单元格地址 =IF(OR(Sheet1!$A$1="xyz",Sheet1!$B$1="abc",Sheet1!$C$5="dmz"),1,0) 我有这个: Public Function absoluteFormula(sheetname As String, ByVal formula As String) As String Dim re As New RegExp Dim matches As MatchCollection Dim mtch As Match Dim absoluteAddress As String 'get all addresses in formula re.pattern = "[$][A-Za-z]+[0-9]+" re.Global = True Set matches = re.Execute(formula) 'replace each address with its static version […]

使用string值调用VBA子

这是我的testing代码 Sub dotask() Dim qusub As String qusub = Worksheets("Task List").Range("C2").Value MsgBox qusub Application.Run qusub End Sub Sub msg1() MsgBox "sub msg1" End Sub Sub msg2() MsgBox "sub msg2" End Sub Sub msg3() MsgBox "sub msg3" End Sub Sub msg4() MsgBox "sub msg4" End Sub 所有这些都包含在一个标准模块中。 我读过试图调用一个string的VBA的子,并根据我在那里发现(即使用Application.Run)编写我的代码。 任务列表工作表的单元格C2当前包含“msg3”。 当我执行子“dotask”我第一次得到一个消息框说“msg3”,因为我想但是然后我得到以下错误信息: 运行时错误“1004”: 无法运行macros'msg3'。 macros可能不在此工作簿中可用或所有macros可能被禁用。 我在Excel 2010上工作,文件是.xlsm – […]

从列表中select项目

问题: 有N个足球运动员在下面的格式和表将吐出每个球员的11个球员组合。 每个11人阵容必须遵循下面的限制。 它应该能够将玩家select为“核心”,这意味着他们将出现在100%的输出阵容中。 input: ABCDE Name Position Team Salary Core Player? 1="Yes",0="No" Darron Gibson M EVE 6500000 0 Riyad Mahrez M LEI 11700000 0 Andrej Kramaric F LEI 6900000 0 Sadio Mané M SOT 12600000 0 Victor Anichebe F WBA 5300000 1 Serge Gnabry M WBA 6300000 0 Dimitri Payet M WHM 13500000 0 […]

ThisWorkbook.Sheets(1).Select(False)Not Working

我有一段代码已经运行了3年多了。 突然在2016年7月28日,它停止工作。 这是非常简单的,我希望这是一个简单的解决scheme(或者微软更新可能会破坏它) ThisWorkbook.Sheets(1).Select ThisWorkbook.Sheets(2).Select (False) ' like holding ctrl 这将始终select工作表#1和工作表#2。 现在看起来“(False)”不起作用,只会selectSheet#1。 我已经在5台不同的电脑上试过这个(所有的Excel 2013)请让我知道是怎么回事。 谢谢! -麦克风 编辑:这也不能工作了。 就像约旦在评论中所说的,它只是不执行。 y = 9 ThisWorkbook.Sheets(1).Select For y = 2 To x ThisWorkbook.Sheets(y).Select (False) ' like holding ctrl Next y 编辑2:因为似乎没有一个明确的答案,我会问,如果有人可以帮我一个解决方法: ThisWorkbook.Sheets(Array(1 to x)).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ FolderName & "\" & QuoteFilename, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False 显然这不起作用,但它应该得到我的观点。 解: […]

如何从其他工作簿(excel)复制数据?

我已经有一个macros创build工作表和其他一些东西。 在创build表单之后,是否需要调用另一个将第二个excel(open)的数据复制到第一个活动的excel文件的macros。 首先我想复制到标题,但我无法得到这个工作 – 不断收到错误。 Sub CopyData(sheetName as String) Dim File as String, SheetData as String File = "my file.xls" SheetData = "name of sheet where data is" # Copy headers to sheetName in main file Workbooks(File).Worksheets(SheetData).Range("A1").Select # fails here: Method Select for class Range failed Workbooks(File).Worksheets(SheetData).Range(Selection, Selection.End(xlToRight)).Select Workbooks(File).Worksheets(SheetData).Selection.Copy ActiveWorkbook.Sheets(sheetName).Cells(1, 1) End Sub 哪里不对 ? […]

在VBA中调整数组

我有3个数据的数组,通过读取excel表格填充,一些数据点丢失,因此刚刚进入excel作为“NA”,所以我想通过我的数组,查找每个这些NA的实例,并从arrays中删除,因为信息是无用的。 我需要同时更新所有三个数组。 Sub group_data() Dim country(), roe(), iCap() As String Dim i As Integer For i = 1 To 3357 country(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("C1").Offset(i, 0) roe(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("AP1").Offset(i, 0) iCap(i) = Workbooks("restcompfirm.xls").Worksheets("Sheet1").Range("BM1").Offset(i, 0) Next i End Sub 所以,如果我发现一个“NA”作为roe或iCap中的值之一,我想摆脱所有数组中的那块数据。