2011-02-25 127 views
0

我想删除我的Excel表格中的多个列。VB.NET excel同时删除多列

For Each lvi In ListView1.Items 
     If lvi.Checked = True Then 
      arrayLetters = lvi.SubItems(1).Text & ":" & lvi.SubItems(1).Text & "," & arrayLetters 
     End If 
    Next 

    arrayLetters = arrayLetters.Substring(0, arrayLetters.Length - 1) 

    Dim rg As Excel.Range = xlSheet.Columns(arrayLetters) 
    rg.Select() 
    rg.Delete() 

arrayLetters值是“G:G,F:F”。出于某种原因,一旦它到达那里删除它们,似乎不起作用!只有这样做的原因是,它不会更新表格并循环到另一个表格。换句话说,如果我单独删除每一个,那么该列将移动,并且下一个字母将不会相同。

的错误是在昏暗的RG作为Excel.Range = xlSheet.Columns(arrayLetters)线和它说:

类型不匹配。 (异常来自HRESULT:0x80020005(DISP_E_TYPEMISMATCH))

任何帮助将是伟大的!

大卫

解决

For Each lvi In ListView1.Items 
    If lvi.Checked = False Then 
     arrayLetters = lvi.SubItems(2).Text & "," & arrayLetters 'Puts numbers in BACKWORDS 
    End If 
Next 

arrayLetters = arrayLetters.Substring(0, arrayLetters.Length - 1) 

Dim theNumbers As String() = arrayLetters.Split(",") 
Dim num As Integer = 0 

xlApp.ScreenUpdating = False 

For Each num In theNumbers 
    xlSheet.Columns(num).delete() 'Deletes columns in reverse order (7,5,4...) 
Next 

回答

1

只要删除编号最小的列N次,以反映在一排你要多少列删除。以编程方式处理Excel时,最好脱离列号而不是字母。如果你需要一个代码示例,让我知道,我会发布一个。

编辑:

这里是一个代码示例,你想要做什么:

xlSheet.Columns(i).delete 
+0

我把它设置为A-Z,然后是AA-AZ,BB-BZ等,所以对我来说能够使用它是很好的。然而,我没有尝试你的代码,它的第一遍,但错误第二... – StealthRT 2011-02-25 16:22:29

+0

只要记住,该列(1)是列A.此外,正如Remou张贴,您可能想尝试获取范围。另一个要尝试的是:Columns(“F:G”)。删除 – Davido 2011-02-25 17:11:41

+0

我用过你的代码,但仍然做了arrayLetters,但只得到了colum数字而不是字母和** ORDERED THEM BACKWORDS **,所以它不会更改每个删除的列的顺序。 – StealthRT 2011-02-25 19:06:21

1

你想

xlSheet.Range(arrayLetters) 

我认为,这是范围,不是列。

0

我认为重要的一部分要实现(我最初并没有)是,你必须使用数字而不是字母列。