我处于非常基本的编程水平,但是,因为我是熟练的"在我的公司,我转向你们的支持,我希望你能帮助我!
我的任务如下。
我有一个工作工作簿,所有数据条目都已完成,然后我有一个数据库文件,也很好。
用户文件:随机名称,因为工作表将根据用户完成的计算而更改。表格名称" 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
非常感谢你!
答案 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