Tag: vba

如何在Excel VBA中使用相对名称

许多“高级”(又名:VBA)在网上excel教程甚至excel的vba帮助鼓励我们使用 Range("B2:B10") 方法(确切地说:对象)用于select单元格或获取值。 在同一个地方,他们经常添加完全可以使用预定义的名字: Range("valuesabove") 另一方面,我爱上了相对定义的单元名称的难以置信的力量。 他们使得编写和处理大型复合公式变得容易很多,基本上可以指代几乎任何东西。 但是, 相对名称在Range(“valuesabove”)方法中不适用于我们习惯的方式。 通常(在工作表上使用时)相对名称是相对于当前选定的单元格或使用它们的单元格。 在VBA的Range()对象中,这是不正确的。 范围相对于WorkSheet对象,默认情况下是ActiveSheet。 但ActiveSheet由其上层单元格A1代表。 这就是Range相对的原因。 这就是为什么绝对名称($ C $ 23)可以和它一起工作,而相对的名称(“向左一列,向上两列”)则不然。 所以我的问题是:如何利用VBA中的相对名称的力量呢? 编辑: 意识到我的问题还不太清楚(thx请你们不知疲倦地发表意见)让我试着把它放在一个特定的forms和澄清条款: 恕我直言,在Excel工作表,它是非常舒适的使用名称,以引用单元格或基于单元格值函数定义计算值。 在Excel中,对单元格的引用可以是相对的,绝对的或混合的 。 创build名称时也是如此。 因此,我们可以谈论绝对的,相对的或混合的名称(就当然指的而言)。 这里使用绝对名称几次(使用Excel的Trace Dependentsfunction创build): 名称“name”= $D$2 一个相对的名字在这里用了几次: 命名“upright24” ,例如单元格A7被选中 = C3 (没有$符号!)。 但是这根据所选的细胞或地区不断变化。 你可以在名字pipe理器中检查它! (按Ctrl + F3) 这是我们可以考虑的混合名称 : 命名“rel_serialnumber” ,例如单元格C6被选中 = $B6 。 ( 6 )的行按照选定的单元格或区域不断变化。 创build相对名称或混合名称是在创build名称时明确基于活动单元格的。 绝对名称的创build自然不依赖于光标位置。 注意 绝对名称是指从被引用的单元格开始的唯一偏移量 […]

如何在C#中获取图表的Excel XValue

我正在编写一些代码来操纵使用C#的excle文件中的图表。 其中一个关键要求是获得Chart SeriesCollection的XValue属性。 我试图通过索引来访问它,但它不起作用,虽然我可以在Visual Studio中的“监视”窗口中看到值列表。 从Watch窗口中,我注意到s.XValue的types是dynamic的{object []} ,我从来没有见过,而obj.ToString()是System.Object [*] 。 问题是如果XValue不支持索引,我可以从XValue属性获取每个值。 顺便说一句,在互联网上search,我只能find方法来设置Excel的单元格范围XValue,但没有find如何得到XValue。 我真的很感激,如果有人可以build议。 Excel._Worksheet worksheet = (Excel._Worksheet)book.Worksheets[a]; Excel.ChartObject chartObj = (Excel.ChartObject)worksheet.ChartObjects(1); if (chartObj != null) { Excel.Chart chart = (Excel.Chart)chartObj.Chart; var s = (Excel.Series)chart.SeriesCollection(1); object obj = s.XValues; //How to get s.XValues[1], s.XValues[2], s.XValues[3]… }

VBA从excel中的过滤表返回第n行号

任何人都可以请帮我find在Excel表格中应用filter后的第n个元素的绝对行号。 例如,我已经过滤并具有可见范围的数据元素。 在没有滤波器的情况下,此滤波范围内的第20(n)行可能是第60行(绝对量)。 有没有办法find使用VBA的绝对行号?

Cells.Find()引发“运行时错误91:对象variables或未设置块”

我想要的:我有很多不同的设备。 我们称之为“WS1”。 而且我有一个单独的工作表,其中包含所有现有的设备和相应的操作系统。 这一个我们称之为“名单”。 现在我想让其他工作表(例如“WS1”)检查“列表”,find合适的设备,并将正确的操作系统复制到WS1表单中。 手动的方式是: selectWS1的单元格“C3”并复制它。 打开“清单” – 表格并find复制的条目 select留在find的条目的单元格并复制它 再次打开WS1,select活动单元格旁边的左侧单元格并粘贴新的剪贴板(其中包含操作系统) select活动单元格右侧的下一个单元格。 直到WS1中的每个设备都充满了操作系统 我到目前为止: Dim DataObj As New MSForms.DataObject Dim strCliBoa As String 'strCliBoa = DataObj.GetText DataObj.GetFromClipboard Range("C3").Select Selection.Copy strCliBoa = DataObj.GetText Sheets("list").Select Range("A1").Select Cells.Find(What:=strCliBoa, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=True, SearchFormat:=False).Activate ActiveCell.Offset(0, -1).Select Selection.Copy strCliBoa = DataObj.GetText Sheets("WS1").Select ActiveCell.Offset(0, -1).Select ActiveSheet.Paste […]

如何填充combobox

我对VBA相当陌生,而且一直在拼命挑选combobox。 我试图用电子表格中第一列的内容填充combobox,这样我就可以根据combobox的select删除相关联的数据行。 在提出这个问题时,我已经在这里和其他地方查看了几个问题,但是我还没有find任何有效的东西。 使用数组元素填充VBA中的combobox 如何从我的Excel电子表格中的列填充combobox? http://www.techrepublic.com/blog/microsoft-office/populate-a-userform-combo-box-in-excel-with-a-dynamic-list/ 以下是我试过的代码。 我有些失落,因为我一直在试图拼凑来自其他问题的不同答案,以使这个工作,但无济于事。 我期望combobox填充来自列1的值,但它仍然是空白的。 尝试#1这涉及到创build一个dynamic范围: =OFFSET(PC_DataSheet!$A$2,0,0, COUNTA(PC_DataSheet!$A$1:$A$65536)-1,1) Private Sub UserForm1_Initialize() Dim rngPCNumber As Range Dim ws As Worksheet Set ws = Worksheets("Sheet1") For Each rngPCNumber In ws.Range("PCNumber") Me.PC_ListComboBox.AddItem rngPCNumber.Value Next rngPCNumber End Sub 尝试#2 Private Sub UserForm1_Initialize() Dim arr() As Variant arr = Worksheets("Sheet1").Range("C2:" & lrow).Value PC_ListComboBox.List = arr End […]

使用Application.GetOpenFilename后closuresvba中的文件

我正在使用名为OpenSees的软件对钢筋混凝土build筑进行分析。 分析的结果写在txt文件中,所以为了分析这些结果,我使用vba读取和写入txt文件到Excel中。 第一次写入数据没有问题。 第一次将txt文件写入Excel之后,我的问题就出现了,我尝试在不closuresExcel的情况下第二次运行OpenSees。 Opensees指出,txt文件是打开的,所以它不能覆盖它们。 我使用closures#1后应该closures文件。 到目前为止我所做的是第一次运行OpenSees,使用vba在Excel中写入结果,保存并closuresExcel,第二次运行OpenSees,等等。 我用来写文件的主要代码是 ruta1 = Application.GetOpenFilename("text Files (*.out),*.out", MultiSelect:=True) If Not IsEmpty(ruta1) Then For i = LBound(ruta1) To UBound(ruta1) Open ruta1(i) For Input As #1 Do Until EOF(1) Line Input #1, linea valor = Split(linea, " ") ' valor(i) : 0 time – 1 Ux – 2 Uy – 3 […]

VBA设置=另一个工作簿上的工作表

我为这个疯了。 我试图过滤工作表“细节老化(2)”的第一列,但filter值随时间而变化,我要求将来不要修改macros。 我想使用范围从不同的工作簿中的工作表中的filter值,但我不能参考该工作簿中的工作表。 我得到“下标超出范围”。 下面是我使用的一段代码。 当范围的工作表在同一工作簿上时,工作得很好。 Dim vCrit As Variant Dim wsO As Worksheet Dim wsL As Worksheet Dim rngCrit As Range Dim rngOrders As Range Set wsO = Worksheets("Detail Aging (2)") Set wsL = Worksheets("C:\Users\lm733600\Desktop\Fabrizio\[Collectible Blank.xlsm]Collectors") Set rngOrders = wsO.Range("$A$1").CurrentRegion Set rngCrit = wsL.Range("ColRange") 任何build议将不胜感激!

通过工作表展平一个循环

我在Excel电子表格中有以下代码,需要对其进行修改,以便它只replace一张纸上的input数据,而不是检查所有纸张。 我需要检查的工作表是'New Performance(2)' 我很想了解的过程,以及知道答案,因为我正在努力学习如何做更多的macros:) sub terfuge Dim WS As Worksheet Dim Search As String Dim Replacement As String Dim Prompt As String Dim Title As String Dim MatchCase As Boolean Prompt = "Replace Merchant ID?" Title = "Search Value Input" Search = InputBox(Prompt, Title) Prompt = "What is the replacement value?" Title = "Search Value […]

查找并replace目录中所有Excel文件工作簿中的string

我正在写一个VBA代码来replace位于特定目录中的多个Excel文件(工作簿)中的特定string。 我试图search堆栈溢出,我find答案,但是这是通过在Excel中的macrosreplace文本文件中的string。 同样的链接是查找并replace文件中的string 。 我的所有工作簿都有三个工作表,每个都在单元格A2中使用彭博公式: =BDH("CBK IN Equity","BID","07-04-2015 09:00:00","07-04-2015 16:00:00") 这项研究需要一个macros,它将在许多这样的工作簿中用ALBK代替特定目录中的CBK。 这是为了下载ALBK的数据来代替CBK。

如何编写Excel VBA相当于INDIRECT函数?

在我的工作簿中,我有很多使用INDIRECT函数的方法,并且导致性能问题。 我需要用能够给我相同结果的东西来代替它们。 所有的INDIRECTS在任何时候都会重新计算,导致工作簿滞后。 我想知道是否有一种方法可以在不使用INDIRECT函数的情况下在VBA中编写INDIRECT,并在代码中消除函数的波动性。 =INDIRECT("'" & $AC$9 & "'!" & AC26) 这是一个例子。 我需要删除INDIRECT,但获得相同的结果,为这个单元格。 有没有办法在VBA中做到这一点?