我正在尝试删除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”。出于某种原因,一旦它到达那里就不会有效删除它们!我这样做的唯一原因是它不会更新表并循环到另一个表。换句话说,如果我单独删除每一个,那么列移动,下一个字母的字母就不一样了。
错误发生在 Dim rg As 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
答案 0 :(得分:1)
只需删除编号最小的列N次,以反映要删除的行中的列数。以编程方式处理Excel时,最好不要使用列号而不是字母。如果您需要一个代码示例,请告诉我,我会发布一个。
编辑:
以下是执行所需操作的代码示例:
xlSheet.Columns(i).delete
答案 1 :(得分:1)
你想要
xlSheet.Range(arrayLetters)
我估计,那是Range,而不是Column。
答案 2 :(得分:0)
我认为实现的重要部分(我最初没有)是你必须使用数字作为列而不是字母。