使用 VBA 将信息传输到表中的特定行(和错误)

问题描述 投票:0回答:1

本程序的功能是机器信息存档。用户在特定工作表中输入有关机器的信息,然后根据指定的机器将该信息传输到存档。

机器按业务部门分类。用户指定业务单位后,它将在表中的特定列中查找计算机 ID。它应该粘贴输入到该机器的行中的所有信息。

之后,它应该清除用户界面,以便用户下次选择登录机器时清晰可见。

我无法正确整合所有内容,并且收到运行时错误 13:变量 MachFinder 的 Set 函数上的类型不匹配。

我什至不知道我是否走在正确的轨道上。我担心是否需要转置所有这些信息或只是复制并粘贴它?我对 VBA 的了解不够,无法解释我在这里做错了什么。

Sub Info_Update()

Dim axle As ListObject
Dim CatTab As ListObject
Dim IBTab As ListObject

Dim tbl, transfer, machineinfo

Dim MachFinder As Range

Dim axws As Worksheet
Dim catws As Worksheet
Dim ibws As Worksheet
Dim wbk As Workbook

Set wbk = ThisWorkbook

Set axws = wbk.Worksheets("AXLEWS")
Set catws = wbk.Worksheets("CAT")
Set ibws = wbk.Worksheets("IB")

Set AxleTab = axws.ListObjects("axle_tab")
Set CatTab = catws.ListObjects("cat_tab")
Set IBTab = ibws.ListObjects("ib_tab")

Dim unit_input As String
Dim machine_input As String

unit_input = wbk.Worksheets("Interface").Range("A2").Value
machine_input = wbk.Worksheets("Interface").Range("B2").Value

If unit_input = "AXLE" Then
    Set tbl = AxleTab
ElseIf unit_input = "CAT" Then
    Set tbl = CatTab
ElseIf unit_input = "IB" Then
    Set tbl = IBTab
End If

Set MachFinder = tbl.DataBodyRange.Columns("Machine").Find(machine_input, LookAt:=xlWhole)

transfer = tbl.ListRows(MachFinder.Row - tbl.HeaderRowRange.Row)
machineinfo = Array("B2:D2", "F2")

machineinfo.Copy
transfer.PasteSpecial Paste:=x1PasteValues

wbk.Worksheets("Interface").Range("A2:F2").ClearContents

End Sub

我缺少什么,我可以以任何方式改进这个程序吗?

excel vba transpose paste
1个回答
0
投票

您似乎想将

Interface
工作表中的一些单元格复制到表格中。如果我的代码不能满足您的需求,请分享目标表的布局。

Sub demo()
    Dim tbl As ListObject
    Set axws = wbk.Worksheets("AXLEWS")
    Set catws = wbk.Worksheets("CAT")
    Set ibws = wbk.Worksheets("IB")
    Set AxleTab = axws.ListObjects("axle_tab")
    Set CatTab = catws.ListObjects("cat_tab")
    Set IBTab = ibws.ListObjects("ib_tab")
    Dim unit_input As String
    Dim machine_input As String
    unit_input = wbk.Worksheets("Interface").Range("A2").Value
    machine_input = wbk.Worksheets("Interface").Range("B2").Value
    If unit_input = "AXLE" Then
        Set tbl = AxleTab
    ElseIf unit_input = "CAT" Then
        Set tbl = CatTab
    ElseIf unit_input = "IB" Then
        Set tbl = IBTab
    End If

    Dim MachFinder As Range
    Set MachFinder = tbl.ListColumns("Machine").DataBodyRange.Find(machine_input, lookat:=xlWhole)
    If Not MachFinder Is Nothing Then
        ' copy "B2:D2", "F2" on Interface sheet to destination table column B:E
        With wbk.Worksheets("Interface")
            MachFinder.Offset(0, 1).Resize(1, 3).Value = .Range("B2:D2").Value
            MachFinder.Offset(0, 4).Value = .Range("F2").Value
            .Range("A2:F2").ClearContents
        End With
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.