2011-02-25 98 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

我認爲重要的一部分要實現(我最初並沒有)是,你必須使用數字而不是字母列。