VBA Excel用户输入查找数据不同的工作簿

时间:2016-07-14 07:03:08

标签: excel vba excel-vba vlookup worksheet

我处于非常基本的编程水平,但是,因为我是熟练的"在我的公司,我转向你们的支持,我希望你能帮助我!

我的任务如下。

我有一个工作工作簿,所有数据条目都已完成,然后我有一个数据库文件,也很好。

用户文件:随机名称,因为工作表将根据用户完成的计算而更改。表格名称" Sagsnr。" (Caseno。用当地语言)

Sourcefile:" Matcost.xls",工作表:" Matcost"

我需要输入一个值,例如一个材料编号或一系列数字(因此范围是动态的)到活动工作表中,然后开始查找与数据库文件中的ID(材料编号)相关的特定数据字段。

我需要在从数据库中提取的各种数据之间有计算字段,所以我不能只复制整行,而是需要从数据库中的单元格向用户输入获取每个ID编号的一组值文件。

我只想获取值而不是将vlookup函数粘贴到工作表中,因为从用户操作的角度来看这两者都是危险的,并且使得工作表的速度变慢。

我现在已经在上面努力了很长一段时间了,我也尝试在这个网站上查找各种问题和答案,但没有明显的工作解决方案。这可能是由于我缺乏理解,但我希望你能指出我正确的答案或在这里回答。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim material As String
Dim fndEntry As Range
Dim wb1 As Workbook, wb2 As Workbook

Set wb1 = ActiveWorkbook

material = wb1.ActiveCell.Value

' Find the corresponding value in the Database file

Workbooks.Open Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True

Set wb2 = ActiveWorkbook

'Change the below Range address..
Set fndEntry = wb2.Range("C:C").Find(What:=material)

'Change the below Range address..
If Not fndEntry Is Nothing Then
    wb2.Range("B" & fndEntry.Row).Copy Destination:=wb1.ActiveCell.Offset(0, 1)
End If


End Sub

非常感谢你!

User input sheet

1 个答案:

答案 0 :(得分:0)

您可能需要在“工作表”中使用您的方法。本身可以在您输入材料编号时注意到<#39;

Private Sub Worksheet_Change(ByVal Target As Range)

...

End Sub

在这里,您可能需要在ActiveSheet和数据库文件之间使用find方法

Dim material As Variant
Dim fndEntry As Range
Dim wb1 As Workbook, wb2 As WorkBook

Set wb1 = ActiveWorkbook

material = wb1.ActiveSheet.ActiveCell.Value

' Find the corresponding value in the Database file

Workbooks.Open Filename:="C:\Somewhere\DataBase.xls

Set wb2 = ActiveWorkbook

更改以下范围地址..

Set fndEntry = wb2.Sheets("xxx").Range("A:A").Find(What:=material)

更改以下范围地址..

If Not fndEntry Is Nothing Then
    wb2.Sheets("xxx").Range("B" & fndEntry.Row).Copy Destination:= wb1.ActiveSheet.ActiveCell.OffSet(0,1)
End If

在没有任何代码的情况下精确定位您想要做的事情是不可行的,但上述工作将完成,只是您必须更改某些单元格,数据的地址。或扩展内容你需要返回初始工作表。

修改

这应解决您的动态问题,它会检查您在C列中粘贴的条目数,然后返回每个条目的数据。您需要将目标列更改为底部

Private Sub Worksheet_Change(ByVal Target As Range)

Dim material As Variant
Dim fndEntry As Range
Dim wb1 As Workbook, wb2 As WorkBook
Dim lr As Integer

If Not Target.Column = 3 Then
    Exit Sub
End If

Set wb1 = ActiveWorkbook

lr = wb1.Sheets("Sagsnr.").Range("C1:C" & rows.Count).End(xlUp).Row

If lr < 22 Then
    Exit Sub
End If

Workbooks.Open Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True

Set wb2 = ActiveWorkbook

For i = 22 To lr

    material = wb1.Sheets("Sagsnr.").Range("C" & i).Value

    Set fndEntry = wb2.Sheets("Matcost").Range("C:C").Find(What:=material)

    If Not fndEntry Is Nothing Then
        wb2.Sheets("Matcost").Range("E" & fndEntry.Row).Copy Destination:= wb1.Sheets("Sagsnr.").Range("destination column - change me" & i)
    End If

Next i

wb2.Close

End Sub