如何在已找到的单元格

时间:2018-01-04 10:41:53

标签: excel vba excel-vba

我正在尝试选择vba /vb.net以自动生成报告。我没有正规的教育或专业知识,所以请保持温和:D

场景是:我正在构建数据库以跟踪卡车设备以及哪个司机最后驾驶卡车。点击一个按钮(btnLoadInfo),我想填充3个文本框,一个是最后一个驱动卡车的驱动程序,一个是发生日期,另一个是最后一个里程表。 用于搜索的标准将是卡车或拖车。

数据组织如下 驱动程序位于“E”列, 卡车在“D”栏中 日期在“C”列中 ODometer在“G”栏中

任务:查找范围D:D中最后一次出现的特定字符串,并在单元格E,C和G中返回其对应的值。

到目前为止,我能够找到指定列中的最后一个匹配项,但是我无法获得偏移量并将它们分配给文本框控件。

如果您注意到单击btnLoadInfo时,驱动程序和卡车字段正从列表框中删除,这意味着我正在操纵它们,但方式错误。

非常感谢任何帮助。 Hyperlink to excel file.  Private Sub btnLoadInfo_Click()

'Code for finding last ocurance of specific string. ATM code is returing last ocurance celladdresss
Dim DataSH As Worksheet
Dim DriverSearch As String
Dim searchTerm As Range

    'error handling
    On Error GoTo errHandler:
    'hold in memory and stop screen flicker
    Application.ScreenUpdating = False
    Set DataSH = Sheet1
        DriverSearch = cboTrucks.Value
        Set searchTerm = DataSH.Range("D1:D999").Find(what:=DriverSearch, searchorder:=xlByColumns, searchdirection:=xlPrevious)
        If searchTerm Is Nothing Then
        MsgBox "Driver was not found"
        Else

        Reg1.Value = searchTerm
        searchTerm.Offset(0, 1).Value = tbPrevTruckDriver

        End If

errHandler:
    'Protect all sheets if error occurs
'Protect_All
'show error information in a messagebox
    MsgBox "An Error has Occurred " & vbCrLf & "The error number is: " & _
Err.Number & vbCrLf & Err.Description & vbCrLf & "Please notify the administrator"

End Sub

2 个答案:

答案 0 :(得分:0)

如果searchTerm不是什么(检查这个),那么它应该有Row和Column属性。

如果您希望单元格位于找到的单元格的左侧,则可以使用:

DataSH.Cells(searchTerm.Row, searchTerm.Column - 1)

如果您希望单元格位于找到的单元格上方,则可以使用:

DataSH.Cells(searchTerm.Row - 1, searchTerm.Column)

请注意,Column是一个数字,1是A行,2是B等,

答案 1 :(得分:0)

Ctznkane525的上述代码为我完成了工作,现在我正在填充文本框。  Populated textboxes

然而我收到错误(在填充它们之前,点击确定后,它们会被填充)

Error with description

当前代码

Private Sub btnLoadInfo_Click()

'Code for finding last ocurance of specific string. ATM code is returing last ocurance celladdresss
Dim DataSH As Worksheet
Dim DriverSearch As String
Dim searchTerm As Range

    'error handling
    On Error GoTo errHandler:
    'hold in memory and stop screen flicker
    Application.ScreenUpdating = False


        Set DataSH = Sheet1

        DriverSearch = cboTrucks.Value
        Set searchTerm = DataSH.Range("D1:D999").Find(what:=DriverSearch, searchorder:=xlByColumns, searchdirection:=xlPrevious)
        If searchTerm Is Nothing Then
        MsgBox "Driver was not found"
        Else

        tbPrevTruckDriver = DataSH.Cells(searchTerm.Row, searchTerm.Column + 1)
        tbPrevTruckDate = DataSH.Cells(searchTerm.Row, searchTerm.Column - 1)
        tbPrevOdo = DataSH.Cells(searchTerm.Row, searchTerm.Column + 3)

        End If
errHandler:
    'Protect all sheets if error occurs
'Protect_All
'show error information in a messagebox
    MsgBox "An Error has Occurred " & vbCrLf & "The error number is: " & _
Err.Number & vbCrLf & Err.Description & vbCrLf & "Please notify the administrator"

End Sub