Tag: vba

如何使用VBA在Sharepoint站点中打开文件

我正在尝试打开文件名称每周更改的文件。 这意味着文件名称上的date部分是不同的。 另外,这个文件是文件夹内的唯一文件。 但其文件名称正在改变。 我正在使用下面的代码,但它是抛出错误,运行时间52:错误的文件名称和数字。 我需要你的帮助。 Dim ThePath As String Dim TheFile As String ThePath = "https://ts.company.com/sites/folder1/folder2/folder3/folder4/" TheFile = Dir(ThePath & "MANILA_ShiftRecord_*" & ".xlsx") Workbooks.Open (ThePath & TheFile) 谢谢!

Excel VBA计时器的性能取决于哪个表处于活动状态?

我有许多工作簿,每张工作表有不同数量的方程式,彼此相互联系。 我有一个工作簿广泛的VBA计时器,应该每5秒运行一次。 当我在没有很多公式的工作表上工作时,似乎每5秒运行一次…但是,如果我然后将活动工作表更改为“繁忙”工作表,则vba定时器只是不会熄灭…或者如果它熄灭,就像几分钟后。 直到我再次切换到一个不太忙碌的表格,然后这个定时器像正常一样神奇地运行,而不需要重置任何东西。 我没有任何特别的VBA代码专门在繁忙的工作表上…我不明白为什么VBA计时器代码将无法在所有表中一致运行? 如果定时器受到影响,则应该影响到所有的纸张,而不仅仅是某些纸张。 这里是VBA计时器代码: Sub TimerTick() On Error GoTo ErrorHandler If toggletimer = True Then RunMyCode runWhen_ES = Now() + TimeValue("00:00:05") Application.OnTime EarliestTime:=runWhen_ES, Procedure:="TimerTick", Schedule:=True End If ErrorHandler: End Sub

通过工作表循环

我是VBA的初学者(3天前开始)试图build立一个macros。 我希望得到我的代码的帮助,以及了解我出错的部分中的代码是怎么回事。 代码的目标是从每个工作表最后一列的单元格中收集值,并将它们编译到第一个表格(我将在第一次打开工作表时创build)的银行列中。 我的代码是非常原始的,可能包含很多错误。 大多数部分是从源头(甚至是macros观录像机)复制和粘贴的。 我已经设法使其工作,但我希望浓缩它。 这个工作的代码是: Sub Test() Dim LastCol As Long Dim rng As Range ' Creating a bank sheet Sheets.Add ' Returning to Page 1 Sheets("Page 1").Activate ' Use all cells on the sheet "Page 1" Set rng = Sheets("Page 1").Cells ' Find the last column in "Page 1" and COPY LastCol […]

结合如何自定义UDF的插入函数向导并使UDF操作其他单元的任务

这个问题可能对许多VBA程序员有用。 它涉及执行两个有用的独立任务,并使他们同时工作。 第一个任务是为UDF制作一个Excel函数工具提示。 虽然目前还没有find明确的解决scheme,但现在我对自定义插入function向导的解决scheme感到满意。 你可以在这里find关于实现插入函数向导的方法的主题: 如何把一个工具提示放在一个用户定义的函数上当我说插入函数向导时,我的意思是这个窗口: 如果您也对寻求实现函数工具提示的权威解决scheme的主题感兴趣,可以到这里: 寻求Excel自定义函数工具提示 第二个任务是使UDF写入一个与之不同的单元格中。 我在这里发现了一个很好的解决scheme: 我不希望我的Excel加载项返回一个数组(而是我需要一个UDF来更改其他单元格) 现在,问题出现了: 试图同时执行这两个任务时,Excel崩溃。 我想在调用一个函数时使这两个任务工作,防止Excel崩溃 。 我想为UDF使用一个自定义的插入函数向导,它可以在不同的单元格中写入。 我为什么要这样做的原因是,我正在编写一个AddIn函数,它需要几个input参数(所以用户需要input参数的工具提示),而且我需要写入与它们被调用的单元格不同的单元格(因为我不想坚持macros,我想要一个function驱动的AddIn,而不是一个button驱动的)。 对于那些熟悉彭博Excel API的人来说,这几乎是BDH()所做的function。 我写了两个模块作为问题的指导。 第一个构build一个displayParameters()函数,需要在运行main函数之前运行。 它通过函数驱动的方式执行自定义插入函数向导的任务。 第二个函数是称为sumTwoNumbers的主函数,它执行两个数字的和,并将结果显示在与函数被调用的单元格不同的单元格中。 当您尝试使用插入函数向导(ctr + A)运行第二个函数(sumTwoNumbers())后,它被自定义(运行displayParameters()后),Excel将崩溃。 模块1: Option Explicit Private Declare Function SetTimer Lib "user32" ( _ ByVal HWnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As […]

将数据添加到表格时移到下一列

我试图从Excel中添加一段数据到Access中的表。 我使用了TransferSpreadSheet方法,数据在表格中出错。 接下来的事情是尝试将列中的每个单元格逐列添加到表中,但这不起作用,因为要继续将数据添加到下一行而不是下一列,然后添加到第一行下一列。 一般来说,我在Excel中有7行/单元格和100列。 我希望它在表格中看起来与在电子表格中一样 这是我所尝试的: For i = 0 To 7 For j = 5 To 100 xColumn = MultiLetter(j) xCell = shNames + "!" + xColumn + CStr(BCellNum + i) + ":" + xColumn + CStr(BCellNum + i) 'xCell = shNames + "!E" + CStr(BCellNum + i) + ":" + xColumn + CStr(BCellNum […]

VBAmacrosExcel用于分组,查找和删除重复项

我不知道该怎么做,所以我在这里问。 所以这是我在Excel中的CSV: 正如你所看到的,我们在CSV和价格都有dusplicates。 价格必须大小。 你可以看到,大小是“相同”,但他们有空间。 我需要什么? VBA需要对每个sku进行分组,例如: 在此之后,它需要find重复的价格,并select这些行,删除重复,而不是默认的,例如: 下一个SKU组: 至less,我认为这是做这个的程序,如果还有其他的方法,我想听听。 对我来说,我不知道该怎么做。 也许是一个Excel函数? 这甚至有可能吗? 更新1 所以我尝试了R3uK的解决scheme和Marco Getrost的解决scheme,R3uK对我来说是最好的。 我已经改变了他的VBA喜欢我的大CSV。 这里是: Sub test_Sj03rs() With ActiveSheet 'In column D With .Range("Y:Y") 'Change all double spaces to single ones (being extra careful) .Replace What:=" ", _ Replacement:=" ", _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ MatchCase:=False, _ SearchFormat:=False, _ ReplaceFormat:=False 'Change all […]

Excel VBA公式中可变数量的术语?

是否可以在Excel中用VBA编写一个公式,使得公式中有“n”个项,并且项的数量随着“n”的值而变化? 例如,假设你想对单元格a1进行编码,使之成为a2和a3的和。 那么你希望b1是b2,b3,b4,b5等的总和,使得一个单元格范围的每列1行1单元格是它下面的“n”个单元格的总和,其中“n”从列到柱。 说你想使用的所有单元格地址是已知的,并存储在一个数组中。 下面是一些代码,以更好地解释我在问什么: For i = 0 to n Range(arr1(i)).formula = "=" & range(arr2(i)).value & "-(" _ & Range(arrk(i)).value & "+" & Range(arrk+1(i)).value & "+" _ & Range(arrk+2(i)).value & "+" & … & ")" Next i 所以我正在寻找的是一个VBA代码,可以使单元格公式包含dynamic数量的术语。 上面的代码将使单元格a1的值= a-(b + c + d + …)其中括号中的项数是可变的,具体取决于该公式应用于哪个单元格。 这里的图像显示了我想要做的一个例子。 我想要一些代码,可以采取“年收入”,并从中减去可变数量的“费用”,其中费用数量每年都有所不同(但是这个数字在当年是固定的)。 代码需要使用公式,以便用户可以修改费用条目。

vba Excel 2016:键入不匹配错误

如果列AG包含一个特定的值,并且将其粘贴到名为“绿色”(如果AG = 1,AG = 2时为蓝色),并且将其粘贴到名为“所有组”红色如果AG = 3)。 但是,我得到一个types不匹配的错误 。 我看了论坛和类似错误的post的互联网,但我无法find一个答案,可以帮助我。 我正在使用Excel 2016,这是我的代码: Sub sort() Dim LSearchRow As Integer Dim LCopyToRow As Integer Worksheets("All groups").Select 'Start search in row 3 LSearchRow = 3 'Start copying data to row 3 in Destination Sheet (row counter variable) LCopyToRow = 3 While Len(Range("A" & CStr(LSearchRow)).Value) > 0 'If value […]

无法获取xlcelltypevisible范围类的Specialcells属性

我有一个Excel VBAmacros,我每周运行一次。 我有一段代码过滤出不同的数据,然后将其余的单元格复制到不同的工作表 以下是受影响代码的一部分: dim data as worksheet dim sku vp as worksheet Set skuvp = Workbooks("weekly Brand snapshot report.xlsx").Sheets("SKU VP") set data = Workbooks("weekly Brand snapshot report.xlsx").Sheets("SKU Data") data.Range("A1").AutoFilter Field:=4, Criteria1:="Foods", Operator:=xlFilterValues data.Range("Onsales[[Product]]").SpecialCells(xlCellTypeVisible).Copy Destination:=skuvp.Range("B2") skuvp.Range("foods").Sort key1:=skuvp.Range("C1"), order1:=xlDescending, Header:=xlYes data.ShowAllData data.Range("A1").AutoFilter Field:=4, Criteria1:="Treats", Operator:=xlFilterValues data.Range("Onsales[[Product]]").SpecialCells(xlCellTypeVisible).Copy Destination:=skuvp.Range("H2") skuvp.Range("treats").Sort key1:=skuvp.Range("I1"), order1:=xlDescending, Header:=xlYes data.ShowAllData data.Range("A1").AutoFilter Field:=3, Criteria1:="Hardgoods", Operator:=xlFilterValues […]

使用VBA分配.Value时保留空string

(编辑:添加2个解决scheme的更多限制) 我有一个表(明智的listobject),我需要复制特定的行。 我使用SourceListRow.Range.Value2 = DestListRow.Range.Value2出于效率的原因(一次复制整个范围)。 复制的单元格范围之后的所有公式列自动完全扩展到新行并对复制的数据执行操作。 我在Windows上使用Excel 2010。 不过,虽然我已经使用这种代码的年龄,我只是现在偶然发现了一个奇怪的时候使用Range.Value / Range.Value2:如果你指定一个空string,最后单元格值不会是一个空string,但它将是空的。 那就是:数据不会被忠实地复制,而且副本可能与源代码有所不同,特别是如果连续的公式使用ISBLANK等。 因此,相同的公式将有不同的结果时,在复制与源的工作。 见下面的testing代码。 打开一个新的空白的Excel工作簿,转到VBA,添加一个新模块并添加以下代码: Sub Test() ActiveSheet.Range("a1").Formula = "=""""" ActiveSheet.Range("b1").Formula = "=isblank(a1)" ActiveSheet.Range("c1").Value2 = TypeName(ActiveSheet.Range("a1").Value2) ActiveSheet.Range("a2").Value2 = ActiveSheet.Range("a1").Value2 ActiveSheet.Range("b2").Formula = "=isblank(a2)" ActiveSheet.Range("c2").Value2 = TypeName(ActiveSheet.Range("a2").Value2) ActiveSheet.Range("a3").Value2 = "" ActiveSheet.Range("b3").Formula = "=isblank(a3)" ActiveSheet.Range("c3").Value2 = TypeName(ActiveSheet.Range("a3").Value2) ActiveSheet.Range("a4").Formula = ActiveSheet.Range("a1").Formula ActiveSheet.Range("b4").Formula = "=isblank(a4)" ActiveSheet.Range("c4").Value2 = TypeName(ActiveSheet.Range("a4").Value2) Call ActiveSheet.Range("a1").Copy […]