http://www.excelpx.com/thread-386311-1-1.html
某個單元格的值人工輸入,其它單元格的值根據另一個作業表中的這個單元格的值自動填充
如下圖,比如BOM這個作業表的【件號/規格型號】欄位人工輸入后,他自動在Item這個作業表中去找相應的欄位【FModelSpecification】,找到后將【物料屬性】、【物料狀態】等欄位自動填充,不需要人工輸入,找不到則不用管。用VBA實作。
1、【物料屬性】對應Item作業表的【FMaterialProperty】
2、【物料狀態】對應Item作業表的【FMaterialState】

uj5u.com熱心網友回復:
這個用不著VBA!用公式就可以完成。問題是:你沒有說填到哪里去
uj5u.com熱心網友回復:
填到BOM作業表里面。你能不能在VBA里面幫我實作,這只是我寫的VBA程式的一段。
uj5u.com熱心網友回復:
我是問你填到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
...
uj5u.com熱心網友回復:
這是很容易的事。問題是,找到資料后,寫到哪列中去啊!
你的第1張圖片中根本看不出【物料屬性】、【物料狀態】要填到BOM表的哪列中去!
uj5u.com熱心網友回復:
你給的那個鏈接中的附件,我沒有賬號不能下載,我也沒興趣去注冊賬號。給你一個簡單的示例:
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
uj5u.com熱心網友回復:
#3,#5,不好意思,我BOM作業表中的物料屬性、物料狀態確實沒有顯示出來。我還以為我傳了附件的。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/79568.html
標籤:VBA
上一篇:幫助FTP服務器vb相關
