我正在使用Excel 2010,并在电子表格的模块中定义了以下3个函数。 Option Explicit Public Function AAA() As Double AAA = 3 End Function Public Function AAA2() As Double AAA2 = 4 End Function Public Function AAA3AAA() As Double AAA3AAA = 5 End Function 当我通过在3个相邻的单元格中input以下内容来引用电子表格中的三个函数时 =AAA() =AAA2() =AAA3AAA() 第二个函数产生#REF错误。 其他function按预期工作。 任何人都知道这是为什么发生? 我问的原因是当我从Office XP升级到Office 2010时,我的一些macros退出了工作。经过相当多的实验,似乎函数名本身就是罪魁祸首? 从Office-XP的Excel中没有发生该错误。
我有一个电子表格,我需要查找有数据的最后一列。 然后我需要复制这个列并将其复制到下一个空白列。 有没有办法做到这一点? 我设法做到这一点与行使用: lastrowSrc = Sheets("Overview").Range("B" & Rows.Count).End(xlUp).Row 但是,这将B12放在范围内,使用columns.count只是放在列的数字,而不是字母
在Excel VBA中,我使用VBA在Excel中创build两个形状。 一个箭头,我叫“aro”+ i,还有一个文本框,我把它命名为“text”+ i,其中i是一个表示照片编号的数字。 所以,照片3我会创build箭头“aro3”和文本框“text3”。 然后我想分组他们并重命名该组“arotext”+我,所以在这种情况下,“arotext3”。 到目前为止,我一直在做这样的分组和重命名: targetSheet.shapes.Range(Array(Arrow.Name, textBox.Name)).Select Selection.group Selection.Name = "AroTxt" & Number 它在一个子工作出色,但现在我想改变这个function,并返回指定的组,所以我尝试了这样的事情: Dim arrowBoxGroup as Object set arrowBoxGroup = targetSheet.shapes.Range(Array(Arrow.Name, textBox.Name)) arrowBoxGroup.group arrowBoxGroup.Name = "AroTxt" & Number 当我创build一个与已经创build的名称相同的新组时,我遇到了问题。 所以,如果我创build第二个“aro3”和“text3”,然后尝试将它们分组并重命名为“arotext3”我得到一个错误,因为具有相同名称的组已经存在。 我不明白的是,当我使用引用select的方法来完成这项工作时,如果我想要的话,我可以重命名每个组,并且不会出现错误。 为什么在引用Selection对象时工作,但在尝试使用分配的对象时失败? 更新: 既然有人问,我到目前为止的代码如下。 箭头和文本框是箭头和文本框,指向由用户使用表单任意定义的方向。 然后,在目标工作表上以正确的angular度创build一个箭头,并在箭头的末尾放置一个带有指定数字(也通过表单)的文本框,以便有效地形成标注。 我知道有一些标注,但他们没有做我想做的事情,所以我必须自己做。 我必须对文本框和箭头进行分组,因为1)它们属于一起,2)使用组名作为参考,logging已经放置了哪些标注,3)用户必须将标注放置在embedded在工作表中的地图。 到目前为止,我已经设法通过将返回值设置为一个GroupObject来实现这个function。 但是这仍然依赖于Sheet.Shapes.range()。select,在我看来这是一个非常糟糕的方式做到这一点。 我正在寻找一种不依赖于select对象的方式。 我想了解为什么这个工作时使用select,但失败时使用强typesvariables来保存的对象。 Public Function MakeArrow(ByVal No As Integer, ByVal angle As […]
这个代码 Sheets(1).Activate Sheets(2).Range("A1").Select 将在VBA中失败,因为您只能在活动的对象上使用Select 。 我明白这是事实。 什么Excel数据模型的元素导致这种情况? 我认为有一个用户/编码器隐式意图Activate任何对象之前立即使用Select – 我不明白为什么VBA不会做这个假设,并且,我假设有这个区别存在的原因。 Excel的数据模型的哪个部分阻止select而不激活?
好吧,我试图寻找类似的问题,但是我不明白正在讨论什么,因为这是我第一次看Excel的VBA编辑器。 简单来说,我有2个电子表格:“Sheet1”和“Sheet2” 第1页: AB 1 Header1 Header2 2 Text1 Info1 3 Text2 Info2 第2页: AB 1 Header1 Header2 2 Text3 Info3 3 Text4 Info4 我想有一个macros将两张纸合并成一张新纸(Sheet3),如下所示: AB 1 Header1 Header2 2 Text1 Info1 3 Text2 Info2 4 Text3 Info3 5 Text4 Info4 我试图录制一个macros并保存以备后用。 为此,我创build了一个新工作表,将所有从Sheet1复制/粘贴到Sheet3,然后将除Sheet2之外的所有信息复制到Sheet3。 那么,这个macros的工作原理是这个数据,但是我发现由excel生成的代码使得它在粘贴数据之前select了单元格A4(这里)。 虽然这适用于这些数据,但是如果每张表中的logging数量一次又一次地改变,那么这种方法就无法工作。 基本上, 1)我想知道在粘贴下一组数据之前是否有一个函数自动进入最后一个相关的单元格(在这个例子中,单元格A4,如果我有一个表格,那么单元格A6)。 2)我看到了function“ActiveCell.SpecialCells(xlLastCell)。select”(当我使用CTRL +结束时激活),但带我到工作表的末尾。 使用该function后,我需要类似于“Home”和“Down”箭头键的function。 这些select中的任何一个对我都会很好。 ^ _ ^ 这是我在Excel […]
我有一些图表,其中X值是文本,Y值是数字。 如果条的Y值小于零,我想为每个条打上红色;如果大于或等于零,则为绿色。 另外,如果栏的X值是“NET CHANGE”,我需要栏是黄色的。 我遵循以前的StackOverflow线程中的指示: 使用基于类别标签的VBA更改栏颜色 。 我得到运行时错误451属性让程序没有定义和属性获取过程没有返回一个对象。 我的代码如下: For chartIterator = 1 To ActiveSheet.ChartObjects.count For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ RGB(146, 208, 80) Else ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ RGB(255, 0, 0) End If Next pointIterator Next chartIterator IF语句出现错误。 我也试过.Points(pointIterator).Value,它给了我一个“没有为这个对象定义的属性或方法”的错误。 任何想法,我在做什么错了? 在此先感谢您的帮助。
我不熟悉脚本,我正在尝试改进现有的macros。 我logging了一个macros来删除重复,并将其添加到调用一些其他函数的主函数,但是当我添加我logging的macros时出现此错误: Run-time error '1004': Unable to set the hidden property of the range class 代码看起来像 Private Sub Worksheet_Change(ByVal Target As Range) Dim changed As Range Set changed = Intersect(Target, Range("J15")) If Not changed Is Nothing Then Range("A48:A136").EntireRow.Hidden = True Select Case Target.Value Case "Agriculture" Range("A48:A96").EntireRow.Hidden = False Case "Commercial" Range("A97:A136").EntireRow.Hidden = False Case "MDP" […]
我有一个电子表格,其中包含大量的请求数据的函数调用。 我正在写一个函数(在VBA中)来检查是否有任何单元格包含错误值“#VALUE”等 此刻,我逐行,逐列迭代,首先检查单元格是否包含公式,如果是,则检查instr为“#VALUE”,“#N / A”等 但是,我想知道是否会更快地模拟单击excel中的整个列,然后“ctrl + f”的值在VBA中。 什么是最有效的方法? 我正在检查一个27列x 1200行大的工作表。 编辑我刚刚意识到有一些细胞有“#N / A”,这是因为他们不包含一个特定的公式。 我只需要在包含特定公式的单元格中search….这可能吗? EDIT2我有效地需要logging一个macros返回resutls,就像“find所有”。 我用“查找”,我可以得到一个布尔值,但“查找所有”不logging任何VBA代码….
使用VBA,我将一个单元格的值复制到另一个单元格中: Dim s As Range Dim d As Range Set s = Range("A1") Set d = Range("B2") d.Value = s.Value 这工作正常,但如果源包含丰富的文本格式,格式将丢失。 我可以复制整个单元格,格式和所有: s.Copy d 但是,这不仅带来了丰富的文本格式,还带来了单元格背景颜色,边框等的全局格式。我只对适用于文本部分的复制格式感兴趣(例如,句子中的一个单词粗体)。 我也试着复制每个字符的格式: For ci = 1 to Len(sourcevalue) d.Characters(ci, 1).Font.Bold = s.Characters(ci, 1).Font.Bold Next 上面的实际代码包括斜体,下划线等,并将字符()作为速度对象进行caching,但是对于生产使用来说性能还是太慢了。 我能想到的最后一个select是用格式复制单元格,然后撤消对背景颜色或图案,边框,字体名称/大小等的任何更改: bg = d.Interior.ColorIndex s.Copy d d.Interior.ColorIndex = bg 这仍然看起来很糟糕,很难挽回所有格式的重新应用,我不能“撤消”格式,如粗体,斜体等,可以应用在单元格或字符级别,而不会擦除字符级设置。 那里有其他的select吗? Excel OpenOfficeXML文件中的格式存储在字符范围内,但是不会出现这些格式化的范围可以通过API获得,至less我可以find。 编辑:使用下面的KazJaw的方法,我能够得到我所需要的以下代码: Dim TmpFormat […]
我正在使用以下代码:此代码为例:如果我在单元格A1中input任何值,单元格B1显示一个时间戳。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) With Target If .Count > 1 Then Exit Sub If Not Intersect(Range("B1:B10"), .Cells) Is Nothing Then Application.EnableEvents = False If IsEmpty(.Value) Then .Offset(0, 1).ClearContents Else With .Offset(0, 1) .NumberFormat = "hh:mm AM/PM" .Value = Now End With End If Application.EnableEvents = True End If End With End Sub […]