Tag: listobject

在ListObject表格列中创build所有表格的索引列表及其名称

我想创build一个索引列表的所有工作表与他们的名字在列表中。 到目前为止,我已经写了下面的代码,但是它在引用的行上给出了一个错误。 Dim ws As Worksheet, tbl As ListObject, i As Integer Set ws = Sheets("Profile Management") Set tbl = ws.ListObjects("sheets") With tbl.ListRows Do While .Count >= 1 .Item(1).Delete Loop End With For i = 1 To Sheets.Count "tbl.ListColumns(1).DataBodyRange = Sheets(i).Name" Next I 我哪里去错了?

Excel 2010 VBA范围不会从命名表中select正确的数据

我尝试从命名范围中select多个列。 我build立的string应该select一些variables: Dim onecolumn as Integer, lastcolumn as Integer Dim tblTable as ListObject Dim strforrange as String Set tblTable = Sheet1.ListObjects("Table1") onecolumn = 3 lastcolumn = tblTable.Range.Columns.Count strforrange = tblTable & "[[#All],[Column" & onecolumn & "]:[Column" & lastcolumn – 1 & "]]" Range(strforrange).Select 我一步一步地运行代码,并检查“strforrange”variables。 即使是正确的,选定的列也不同于string中列出的列。 有没有其他的方式来获得命名表的范围或有人知道这个解决scheme?

需要一个循环在Excel表格列中input公式/数据

我需要一个嵌套的循环来添加公式到我的表(“Table1”)4个特定的列。 我想我的For循环模仿前面的For循环关于这些相同的4个额外的列(“colNames”)的命名。 这段代码的底部工作得很好,但我想知道如何将其工作到一个循环。 Sub attStatPivInsertTableColumns_2() Dim lst As ListObject Dim currentSht As Worksheet Dim colNames As Variant, formNames As Variant '<~~ NOTE: As Varient, this is your go to when working with arrays Dim oLC As ListColumn, oLData As Variant Dim i As Integer, d As Integer Set currentSht = ActiveWorkbook.Sheets("Sheet1") Set lst = ActiveSheet.ListObjects("Table1") […]

VSTO Excel:重新打开文件时恢复ListObject数据源

我正在开发Excel 2010模板项目。 在我的模板中,我有很多具有静态ListObject控件的工作表。 为了初始化我的ListObject ,我绑定了一个BindingList<MyCustomType> ,它为我的每个MyCustomType公共属性生成一个列。 这真的很方便,因为当用户在ListObject一些行时,它会自动填充我的BindingList实例。 我在Excelfunction区中添加了一个button,以便程序可以通过EDMvalidation并提交这些行。 这是我如何将我的数据绑定到我的Excel表单的启动事件处理程序中的ListObject。 public partial class MyCustomTypesSheet { private BindingList<MyCustomType> myCustomTypes; private void OnStartup(object sender, System.EventArgs e) { ExcelTools.ListObject myCustomTypeTable = this.MyCustomTypeData; BindingList<MyCustomType> customTypes = new BindingList<MyCustomType>(); myCustomTypeTable.SetDataBinding(customTypes); } // Implementation detail… } 现在我的问题是,这个模板的用户很可能会在很多会话中input这些行。 这意味着他将input数据,保存文件,closures它,重新打开它,input一些新的行,并最终在他认为完成时尝试提交这些行。 我注意到,当从模板创build的Excel文件重新打开时,我的ListObject控件的DataSource属性为null。 这意味着我没有办法从ListObject取回数据到BindingList<MyCustomType> 。 我一直在寻找,我发现没有自动的方式来做到这一点,我真的不想做一段代码,将通过所有列爬行重新创build我的MyCustomType实例。 在理想的世界里,我会这样做。 private void OnStartup(object sender, System.EventArgs e) { ExcelTools.ListObject myCustomTypeTable […]

使用VBA在Excel工作表中创build表格

我有下面的代码将自动select一个范围。 有谁知道我可以如何添加代码来创build一个表到选定的范围? 谢谢! Sub DynamicRange() 'Best used when first column has value on last row and first row has a value in the last column Dim sht As Worksheet Dim LastRow As Long Dim LastColumn As Long Dim StartCell As Range Set sht = Worksheets("Sheet1") Set StartCell = Range("D9") 'Find Last Row and Column LastRow […]

在VBA中创build引用ListObjects表的dynamic命名范围

我需要创build一个指向ListObject表中最后几行数据的命名范围。 虽然我可以手动从function区(公式>定义名称),我必须做20个工作表,每个3个范围。 当我尝试使用VBA时,出现错误1004,并提示公式存在问题,如果我不想input公式,则删除“=”。 任何想法如何解决这个问题? 打开一个新的Sheet1来尝试我的代码。 它将创build一个ListObjects表并尝试创build命名范围。 Sub test2() Dim wks As Worksheet, tbl As ListObject Dim arr() arr = [{"Date","1/1/2016","2/1/2016","3/1/2016","4/1/2016";"Green",100,200,300,400;"Yellow",350,250,150,50;"Red",10,7,5,3}] Set wks = ActiveSheet wks.Range("a1:d5") = WorksheetFunction.Transpose(arr) Set tbl = wks.ListObjects.Add(xlSrcRange, wks.Range("a1").CurrentRegion, , xlYes) tbl.Name = "tblTix" ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(tblTix,MATCH(MAX(tblTix[Date]),tblTix[Date],1)-3,MATCH(""Red"",tblTix[#Headers],0)-1,3,1)" 'THIS FAILS ActiveWorkbook.Names.Add "rngRedLast3Mos", "=OFFSET(Sheet1!$A$1,2,3,3,1)" 'THIS WORKS ActiveWorkbook.Names.Add "rngRedLast3Mos", "=Sheet1!$D$3:$D$5" 'THIS ALSO WORKS Debug.Print ActiveWorkbook.Names("rngRedLast3Mos").RefersTo […]

Excel VBA – 在特定的非默认(A1)位置创build表

如果您运行以下代码: WorkSheet.ListObjects.add(SourceType:=xlSrcRange, Destination:=Range("A10:C13")) 有人可能会想,这会把桌子放在“A10:C13”的范围内。 它不是,一个表是插入到A1与一列和一行(不包括标题): 这个function在官方文档中有明确的说明: 如果SourceType设置为xlSrcRange,那么Destination参数将被忽略。 如何将表格插入其他任何单元格区域?

代码不是单独填充表格单元,而是填充整个列

我有一个button,从列表框中获取数据,并将其放入我的表的特定单元格中。 我现在的问题是,将值插入单元格时,它会填充单元格所在的整列而不是特定的单元格。 这里是button的代码: Private Sub cbSubmit_Click() Dim i As Long Dim v As Variant Dim vTable() As Variant Set inventoryTable = cSheet.ListObjects("inventory_table") colItemID = inventoryTable.ListColumns("Item #").Index colSpecs = inventoryTable.ListColumns("Specs").Index v = inventoryTable.DataBodyRange.Rows ReDim vTable(1 To UBound(v, 1), 1 To 4) For i = 0 To lbItemList.ListCount – 1 vTable(i + 1, 1) = "=DATA!" & […]

将行添加到Excel表

我正在开发Excel 2013/2015 VSTO工作簿应用程序。 从Windows窗体中input的数据,我想在我的工作表之一的现有表中创build一个新的logging。 如何使用C#和VSTO将新的表格行插入Excel表格(不是简单的工作表数组)?

如何以编程方式将QueryTable包装在ListObject中?

历史上Excel中的外部数据查询用QueryTable表示。 ListObjects出现在某个时间点,但它们还不兼容QueryTable并且不能包含它们。 在Office 2007中,它们不仅兼容,而且是默认的。 从那时起,创build一个外部查询意味着创build一个ListObject ,而QueryTable被简化为它的内部组件。 没有包含在ListObject中的“独立”QueryTable不能再使用该接口创build,但可以使用代码创build,并且在新旧文件格式中都得到完全支持。 然后Excel 2016来了,并介绍了一个错误,如果一个“独立的”QueryTable,将永久损坏工作簿在某些情况下。 从Bug中保存QueryTables的唯一方法是将它们包装在一个ListObject中。 所以我有10k +遗留的Excel文档,现有的QueryTable需要用ListObject来包装。 重要的是,大多数查询表都有自动填充的右边的公式。 使用Excel接口,将查询包装到列表中是很简单的(在查询结果中激活一个单元格, Insert – Table – Ok ),并像预期的那样工作,留下一个完整的列表,从查询中获取数据。 将此操作logging为macros将产生: ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$5:$D$9"), , xlYes).Name = _ "Table_Query_from_MS_Access" 但是,如果执行这个代码而不做任何修改,将会产生一个Frankenstein查询表:它看起来像外部的列表对象,但不起作用,无法刷新,无法编辑,显示旧式属性对话框和列表对象报告它是xlSrcRange ,而不是由接口创build的列表报告的xlSrcQuery 。 就像电子一样,它干扰自己(列表对象部分与查询表部分重叠,并且因为这个原因拒绝刷新,即使它们应该是同一个 – 回想起查询表右边有公式,他们现在也必须成为名单的一部分): 非常显然,转换表格时的界面比macros录制器捕获的要多得多。 我曾尝试调用ListObjects.Add与各种参数,提供一个作为源的Range作为来源的WorkbookConnection Connection作为源的QueryTable的Connection – 只要它重叠现有的QueryTable都不工作。 我已经研究了取消链接现有的QueryTable并重新创buildListObject的地方,但是这会在表格周围的公式中引起各种问题。 什么是完整,正确的代码以编程方式包装与ListObject的现有QueryTable ,完全匹配的接口呢? 它目前看起来像我将不得不通过直接操纵我讨厌的xslx格式的XML来做到这一点。