【问题标题】:Search a range using values from an array使用数组中的值搜索范围
【发布时间】:2014-06-16 13:06:42
【问题描述】:

我正在尝试编写一个小宏来搜索一系列值(由一个充满用户输入的数组提供),并且在大多数情况下返回它们的当前行。这个范围是一个可打印的工具表,我只需要打印我也做了更改的页面,因此我试图通过输入已更新的工具来简化我的工作,并让宏告诉我要打印哪些页面。

我试图让它尽可能容易理解,但如果需要澄清,请告诉我。

当我尝试使用“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

感谢您的任何帮助!谢谢!

【问题讨论】:

    标签: arrays excel vba worksheet-function


    【解决方案1】:

    我不确定我是否完全理解你的宏是如何工作的,因为看起来你想返回行号,但你谈论的是返回页码。

    但是,如果您想返回找到给定输入的单元格范围(因为您已声明 ToolNoRow As Range),您可以通过以下方式执行此操作:

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

    请注意,您必须在哪个工作表中说明要执行搜索。

    如果您想返回找到此输入的行,您可以声明ToolNoRow as Long,然后使用:

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

    您可能应该在代码中包含一些错误处理,因为每当找不到搜索项时,Excel 都会返回错误消息。

    【讨论】:

    • 好的,所以我将 'ToolNoRow' 设置为 long 并在该行之后添加了 .Row,这很有效。现在如何在 VBA 中四舍五入?我想做的是:>我认为每个打印的页面上有46行工作表>四舍五入(每页行数)应该返回要打印的页码>将这些页码显示给用户,或者至少以某种可用的形式
    • 在这种情况下,您自己使用 RoundUp 函数的解决方案应该可以正常工作。只需除以 46 而不是 1。即,将行更改为:PageNo = Application.WorksheetFunction.RoundUp((ToolNoRow / 46), 0)
    • 谢谢!它似乎运行顺利。现在开始添加更多功能!
    • 很高兴为您提供帮助。如果它对你有用,请接受答案:)
    【解决方案2】:

    试试这个 获取单元格地址后可能需要修改逻辑

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2022-01-09
      • 2016-03-29
      相关资源
      最近更新 更多