2013-03-10 123 views
1

我正在研究一個宏,它將在一個工作簿中的多個工作表上運行,在工作表之間切換並將數據複製/粘貼到一個主工作表。Excel VBA列範圍選擇選擇錯誤的列

我的問題是,當我切換到使用的Windows(指數).Activate另一個工作表,然後嘗試選擇一些列刪除,它不正確地選擇了列。我使用下面的代碼,EXACT相同的代碼在主表單中工作得很好,但是當我切換到VBA代碼中的另一個表單並使用它時,它會選擇從第1列開始到第數據。

下面的代碼背後的想法是從第1列開始,搜索名爲「綜合評級」的列。然後,我想刪除從第3列開始的所有列到綜合評級列。

有人能告訴我我做錯了什麼嗎?非常感謝您的幫助!

For counter = 1 To 40 Step 1 
     Cells("1", counter).Select 
     strval = ActiveCell.Value 
    If strval = "Composite Rating" And counter <> 3 Then 
     Range(Cells(1, 3), Cells(1, counter - 1)).EntireColumn.Select 
     Selection.Delete Shift:=xlLeft 
     Exit For 
    End If 
    Next counter 

編輯:對不起,應該提到我的設置。我在Windows 7上使用Excel 2007.我已經嘗試了xls和xlsx文件,結果相同。

回答

2

試試下面的代碼:

Dim rng As Range 
    Set rng = Range("A1:Z1").Find("Composite Rating") 

    If Not rng Is Nothing Then 
     If rng.Column > 3 Then 
      Range("C1", rng).EntireColumn.Delete 
     End If 
    End If 
+0

真棒!這工作,非常感謝!實際上,當我將自己的代碼更改爲Delete時,而不是使用Select和Selection.Delete時,它也起作用了!你有沒有看過在哪裏使用EntireColumn.Select實際上選擇所有列無論是什麼?你的代碼更有效率,使用Find函數,所以我將實現它,而不是循環遍歷列。我對VBA比較新,所以我應該搜索函數列表:)再次感謝! – zpert 2013-03-10 16:37:27

+0

一個簡單的問題......重新使用rng變量在同一個Sub中查找其他範圍會有什麼問題嗎?我不知道VBA如何處理引用變量,指針,範圍等,如果在不影響原始範圍的情況下重置它,將會出現問題。謝謝! – zpert 2013-03-10 16:41:08

+1

@zpert你可以重新使用rng變量。但是因爲你是vba世界的新手,所以我會說聲明新的變量,並用它們來避免任何混淆。 – 2013-03-10 16:56:49

0

Windows集合中的index屬性在選擇其他窗口時發生更改 - >它是相對的!

改爲使用Workbooks集合。

+0

由於塞巴斯蒂安。這是很好的知道未來。我選擇了正確的窗口,選擇功能只是無法正常工作。 – zpert 2013-03-10 16:38:57