Excel VBA列范围选择选择错误的列

问题描述:

我正在研究一个宏,它将在一个工作簿中的多个工作表上运行,在工作表之间切换并将数据复制/粘贴到一个主工作表。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文件,结果相同。

试试下面的代码:

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

Windows集合中的index属性在选择其他窗口时发生更改 - >它是相对的!

改为使用Workbooks集合。

+0

由于塞巴斯蒂安。这是很好的知道未来。我选择了正确的窗口,选择功能只是无法正常工作。 – zpert 2013-03-10 16:38:57