某个单元格的值人工输入,其它单元格的值根据另一个工作表中的这个单元格的值自动填充

pandengesen 2016-03-12 11:58:26
http://www.excelpx.com/thread-386311-1-1.html
某个单元格的值人工输入,其它单元格的值根据另一个工作表中的这个单元格的值自动填充
如下图,比如BOM这个工作表的【件号/规格型号】字段人工输入后,他自动在Item这个工作表中去找相应的字段【FModelSpecification】,找到后将【物料属性】、【物料状态】等字段自动填充,不需要人工输入,找不到则不用管。用VBA实现。
1、【物料属性】对应Item工作表的【FMaterialProperty】
2、【物料状态】对应Item工作表的【FMaterialState】

...全文
3594 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pandengesen 2016-03-15
  • 打赏
  • 举报
回复
#3,#5,不好意思,我BOM工作表中的物料属性、物料状态确实没有显示出来。我还以为我传了附件的。
舉杯邀明月 2016-03-14
  • 打赏
  • 举报
回复
你给的那个链接中的附件,我没有账号不能下载,我也没兴趣去注册账号。 给你一个简单的示例: 1. 假设你的 Item表 中FModelSpecification字段的数据是唯一的;并且,从第2行开始连续存放。 2. 自己在这个工作簿的VBA工程中,添加一个窗体,然后画一个文本框、一个命令按钮。 3. 把刚才添加的那个窗体的 ShowModal属性改为 False(默认是 True)。要不然,就不方便“连续填写”数据。 4. 假设刚才的控件都是用的默认名称(如果你改了控件名,自己修正下面代码中相应的控件名)。 5. 代码及实现方法,仅供参考。更多的操作细节,你自己处理。 6. 你必须把代码中“列号1、列号2、列号3”改为对应的数值(A =1、B =2、C =3、AA =27,其列余类推)。 7. 如果要从 Item表 中读取其它列的数据写入 BOM表中,参考下面代码第39、41行,自己写代码。 8. 在VBE中,先添加的那个窗体设计器窗口(或它的代码窗口)为“活动窗口”时,按F5启动VBA代码。 9. 启动程序后,在 BOM表 中要填数据的行上任意点中一个单元格,   在窗口的 TextBox输入【件号/规格型号】数据,然后点击 CommandButton1实现数据的自动填充。 代码如下:
Option Explicit

Private arrData() As String
Private moSourSht As Worksheet
Private moDestSht As Worksheet
Private mlLastPnt As Long

Private Sub LoadData()
   Dim objSht  As Worksheet
   Dim strTemp As String
   Dim i&, w   As Long

   Set moSourSht = Sheets("Items")
   w = WorksheetFunction.CountA(moSourSht.Range("V:V"))
   ReDim arrData(w)
   For i = 1& To w
      strTemp = moSourSht.Cells(i, 22).Value
      If ("" = strTemp) Then Exit For
      arrData(i) = strTemp
   Next
   mlLastPnt = i - 1
End Sub

Private Function FillData(ByVal iRow As Long) As Long
   Dim strTemp As String
   Dim lRet As Long
   Dim i As Long

   strTemp = UCase$(Trim$(TextBox1.Text))
   If ("" = strTemp) Then Exit Function   ' 未输入有效数据
   For i = 2 To mlLastPnt
      If (strTemp = arrData(i)) Then Exit For
   Next
   If (i > mlLastPnt) Then
      lRet = -1&
   Else
      moDestSht.Cells(iRow, 列号1).Value = strTemp    '【件号/规格型号】
      ' 【物料属性】:
      moDestSht.Cells(iRow, 列号2).Value = moSourSht.Cells(i, 20).Value
      ' 【物料状态】:
      moDestSht.Cells(iRow, 列号3).Value = moSourSht.Cells(i, 21).Value
      lRet = 0&
   End If
   FillData = lRet
End Function

Private Sub CommandButton1_Click()
   Dim w As Long
   ' 如果当前活动工作表不是BOM表,不执行操作
   If (Not ActiveSheet Is moDestSht) Then Exit Sub
   ' 选定的行属于“表头”区,不执行操作
   w = ActiveCell.Row
   If (w < 4) Then Exit Sub
   ' 准备自动填充数据
   If (FillData(w)) Then MsgBox "未找到输入项目。", 64
End Sub

Private Sub UserForm_Initialize()
   mlLastPnt = 0&
   Call LoadData
   Set moDestSht = Sheets("BOM")
End Sub

Private Sub UserForm_Terminate()
   Set moSourSht = Nothing
   Set moDestSht = Nothing
End Sub
舉杯邀明月 2016-03-14
  • 打赏
  • 举报
回复
这是很容易的事。 问题是,找到数据后,写到哪列中去啊! 你的第1张图片中根本看不出【物料属性】、【物料状态】要填到BOM表的哪列中去!
一如既往哈 2016-03-14
  • 打赏
  • 举报
回复
我是问你填到bom中的哪一列! 参考:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then ''假如手动输入的列是第4列,自己根据需要修改
        Dim Rng As Range
        ''从item表格D列中找到与target相同的单元格
        Set Rng = Sheets("item").Columns("d:d").Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Rng Is Nothing Then
            ''如果能找到,则开始填充。这里用的负值表示指定单元格左侧第n个单元格,如果在右侧,用正值
            Target.Offset(0, -1) = Rng.Offset(0, -1)
            Target.Offset(0, -2) = Rng.Offset(0, -2)
            '''.......
        End If
    End If
End Sub


...
pandengesen 2016-03-14
  • 打赏
  • 举报
回复
填到BOM工作表里面。 你能不能在VBA里面帮我实现,这只是我写的VBA程序的一段。
一如既往哈 2016-03-13
  • 打赏
  • 举报
回复
这个用不着VBA!用公式就可以完成。 问题是:你没有说填到哪里去

2,503

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧