2014-06-16 31 views
0

我試圖編寫一個小宏來搜索一個值的範圍(由一個充滿用戶輸入的數組提供),並且大多數情況下返回它們的當前行。這個範圍是一個可打印的工具表,我只需要打印我進行更改的頁面,因此我試圖通過輸入已更新的工具來簡化工作,並讓宏指示我打印哪些頁面。使用數組中的值來搜索範圍

我試圖儘可能地理解,但如果需要澄清,請告知我。

的問題出現了,當我嘗試搜索的表中使用「Application.WorksheetFunction」

Sub FunWithArrays() 

Dim ToolNumber() 
Dim i As Integer 
i = 1 

ReDim ToolNumber(1) 

    Do 

     ToolNumber(i) = InputBox("Please type the name of the tool with proper capitalization.", "Tool Number") 
     ReDim Preserve ToolNumber(UBound(ToolNumber) + 1) 
     i = i + 1 

    Loop Until ToolNumber(i - 1) = "Done" 

    MsgBox "Thank you for inputting the tool numbers.", vbOKOnly, "Input Complete" 

    Dim j As Integer 
    Dim ToolNoRow As Range 
    Dim PageNo As Double 

    For j = 1 To (i - 2) 

     ToolNoRow = Application.WorksheetFunction.Range("A:A").Text.Find(what:=ToolNumber(j), LookIn:=xlValues, lookat:=xlWhole) 

     PageNo = Application.WorksheetFunction.RoundUp((ToolNoRow/1), 0) 

     MsgBox "Please print page " & PageNo 

    Next 

End Sub 

任何和所有幫助表示讚賞!謝謝!

回答

0

我不知道我完全理解你的宏是如何工作的,因爲它看起來像你想返回行號,但你談論返回頁碼。

Set ToolNoRow = Worksheets("Sheet1").Range("A:A").Text.Find(what:=ToolNumber(j), LookIn:=xlValues, lookat:=xlWhole) 

需要注意的是,你將不得不狀態:

不過,如果你想返回在給定的輸入被找到(因爲你已經聲明ToolNoRow As Range)小區的範圍內,你會被這樣做在你想要執行搜索的工作表中。

如果你不是想返回在此輸入找到的行,你可以聲明ToolNoRow as Long然後用:

ToolNoRow = Worksheets("Sheet1").Range("A:A").Text.Find(what:=ToolNumber(j), LookIn:=xlValues, lookat:=xlWhole).Row 

你或許應該包括某些錯誤代碼中的處理,因爲Excel將返回一個每當找不到搜索項目時出現錯誤消息。

+0

好後,國防部的邏輯,所以我設置「ToolNoRow」長和系後添加的.Row,而且工作。現在我如何在VBA中提高價值? 我所試圖做的是: >我想每個打印頁面上有 >取整(RowNo /每頁行數)46排工作表的行動應歸還頁數打印 >有這些頁碼顯示給用戶,或者至少以某種可用的形式顯示 – VBAnoob

+0

在這種情況下,使用'RoundUp'函數的自己的解決方案應該工作得很好。只需除以46而不是1.即,將該行更改爲:'PageNo = Application.WorksheetFunction.RoundUp((ToolNoRow/46),0)' –

+0

謝謝!它似乎運行平穩。現在添加更多功能! – VBAnoob

0

試試這個 您可能需要你的單元格地址

Dim ToolNumber() 
Dim i As Integer 
i = 1 

ReDim ToolNumber(1) 

    Do 

     ToolNumber(i) = InputBox("Please type the name of the tool with proper capitalization.", "Tool Number") 
     ReDim Preserve ToolNumber(UBound(ToolNumber) + 1) 
     i = i + 1 

    Loop Until ToolNumber(i - 1) = "Done" 

    MsgBox "Thank you for inputting the tool numbers.", vbOKOnly, "Input Complete" 

    Dim j As Integer 
    Dim ToolNoRow As Range 
    Dim PageNo As Double 

    For j = 1 To (i - 2) 

     With Range("A:A") 
      Set ToolNoCell = Find(what:=ToolNumber(j), LookIn:=xlValues, lookat:=xlWhole) 
      If Not c Is Nothing Then 
       firstAddress = c.Address 
       Do 
        c.Value = 5 
        Set c = .FindNext(c) 
       Loop While Not c Is Nothing And c.Address <> firstAddress 
      End If 
     End With 
     'Do whatever Here 
     PageNo = Application.WorksheetFunction.RoundUp((ToolNoRow/1), 0) 

     MsgBox "Please print page " & PageNo 

    Next