2012-10-01 33 views
0

我建立一個功能,找到列:Excel宏:找到列單元格中沒有激活它

Function findColumn(NameSheet As String, ColName As String) 
findColumn = 0 
Worksheets(NameSheet).Select 
Sheets(NameSheet).Range("A1").Select 
Do Until ActiveCell.Value = "" 
    searchTerm = ActiveCell.Value 
    If (LCase(ActiveCell.Value) = LCase(ColName)) Then 
      findColumn = Mid(ActiveCell.Address, 2, 1) 
      Exit Do 
    End If 
    ActiveCell.Offset(0, 1).Activate 
Loop 
End Function 

此功能!但它激活其他工作表,並且我必須返回到上一張工作表。結果並不是無縫的,因爲當函數搜索列地址時,有一個表單轉換的小故障。

有沒有更好的方法來做到這一點?因爲我多次使用這種方法,當單元格上的每次單擊都出現故障時,我的合作伙伴不滿意。

請幫

回答

3

這裏有一個可能的方法,重要的是它不會改變你的工作簿的焦點都沒有。這將返回假設它位於第一行的搜索項的列號,如果未找到,則返回0。如果NameSheet是無效的,一個彈出窗口將通知您,它會返回0

Function findColumn(NameSheet As String, ColName As String) As Long 
    'Add Error checking to see if sheet Exists 
    On Error Resume Next 
     Dim sheetTest As String 
     'Copy sheet name, just to see if the sheet is valid 
     sheetTest = Sheets(NameSheet).Name 
    'Check if sheet was found. 
    If Err.Number <> 0 Then 
     MsgBox "Sheet does not exist" 
     Exit Function 
    End If 
     'Search the first column in the NameSheet for the ColName, and return 
     'the column number. 
     findColumn = Sheets(NameSheet).Rows(1).Find(What:=ColName, LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False).Column 
End Function 
+0

+ 1額外的錯誤處理+不使用'MID(ActiveCell.Address,2,1)'來得到列號:)你也可能要添加'Thisworkbook'之前每'表(NameSheet) ' –

+0

@SiddharthRout - >'Mid(ActiveCell.Address,2,1)'不返回列號,而是列字母。如果OP要'A'而不是'1',這個findColumn函數將不起作用。我想我們都可以按照OP編寫代碼的方式假設不同的事情,即取決於我們是否認爲findColum = 0更能指示OP後面的內容,而不是'Mid'公式。 –

+0

@SiddharthRout,真的。我去更新它,然後改變了主意。很可能你希望它能在ThisWorkbook上工作,但是如果放在模塊中,可以從不同的工作簿中調用它,在這種情況下它可以在當前工作簿上運行。我們總是可以擴展它以指定所需的工作簿,但這可能會過度呢? –

4

這裏是一個將作爲您能否提供一個功能,我相信,因爲它從來沒有.Selects.Activates片你搜索,同時帶回你想要的列字母。它也不循環每個單元格,這可能非常低效。

此函數將返回列字母,而不是數字。如果你想要這個號碼,請參閱上面Daniel的代碼。

Function findColumn(NameSheet As String, ColName As String) 

With Worksheets(NameSheet) 

    Dim myRng As Range 
    Set myRng = .Rows(1).Find(ColName, lookat:=xlWhole) 

    If Not myRng Is Nothing Then 

     findColumn = Split(myRng.Address, "$")(1) 

    Else 

     findColumn = "Column Not Found" 

    End If 

End With 


End Function 
+0

+ 1賓果! :-) –

相關問題