4

私は、Excel として唯一のソフトウェアとして、私の職場で在庫システムを作成しようとしています。基本的に、修理と使用部品を入力する作業指示書があります。挿入された部品番号と説明を個々の作業指示書から引き出して、使用されているすべてのものを追跡するコードを作成しましたが、上司は、何かの名前/部品番号を入力し始めることができるシステムを作成することを望んでいます。推測するか、記入してください。したがって、コンボボックスの出番です。

私はそれをある程度まで機能させました。リストには部品の在庫が取り込まれます (マスターの EXTNERAL ファイルのリストがあります) が、私の問題は次のとおりです。

ユーザーフォームの「部品追加」をクリックすると、作業指示書の特定の範囲に部品を追加する方法がわかりません。私がフォローしているすべてのチュートリアルhereおよびhereは、列の順序でパーツを追加するように設定されているだけです. 誰かが私の(ひどい、ごめんなさい)コーディングを見て、彼らが助けることができるかどうかを確認できますか?

Private Sub UserForm_Initialize()

Dim cPart As Range
Dim cNum As Range
Dim ws As Workbook
'Dim ComboBox1 As Variant


Application.ScreenUpdating = False
Set ws = Workbooks.Open("\\Capserver\iso maintenance\CAPS MASTER PARTS & PRICE LIST 2012.xls")
Windows("CAPS MASTER PARTS & PRICE LIST 2012.xls").Visible = False
'ws.Sheets("CAPS ORDER FORM").Range("Name") = Sheet1.ComboBox1

'ComboBox1.Clear
For Each cPart In ws.Sheets("CAPS ORDER FORM").Range("Name")
    With Me.cboPart
     .AddItem cPart.Value
    End With

Next cPart

For Each cNum In ws.Sheets("CAPS ORDER FORM").Range("Number")
    With Me.cboNum
     .AddItem cNum.Value
     .List(.ListCount - 1, 1) = cNum.Offset(0, 1).Value
    End With

Next cNum

End Sub

Private Sub cmdAdd_Click()
Dim lRow As Range
Dim lPart As Long
Dim ws As Worksheet
Dim something As Variant
Dim box As Object
Set ws = Worksheets("Sheet2")


With Worksheets(1).Range("A1:a500")
Set lRow = .Find(What:="", SearchOrder:=xlRows, SearchDirection:=xlNext, LookIn:=xlValues)
End With

'Set lRow = Range("A1")
'    If VBA.IsEmpty(lRow.Value) Then
'        MsgBox ("POOP!")
'    Else
'        Set box = lRow.End(xlDown)
'    End If

'lRow = Worksheets("Sheet2").Range("A33:A37")
'ws.Cells.Find(What:="*", SearchOrder:=xlRows,  (From tutorial, always returned lRow =     Nothing)
'    SearchDirection:=xlPrevious, LookIn:=xlValues).Row 1

lPart = Me.cboPart.ListIndex

'check for a part number
If Trim(Me.cboPart.Value) = "" Then
  Me.cboPart.SetFocus
  MsgBox "Please enter a part name or number"
  Exit Sub
End If

'copy the data to the database
'use protect and unprotect lines,
'     with your password
'     if worksheet is protected
With ws
'  .Unprotect Password:="password"
  .Cells(lRow, 1).Value = Me.cboPart.Value
  .Cells(lRow, 2).Value = Me.cboPart.List(lPart, 1)
  .Cells(lRow, 3).Value = Me.cboNum.Value
'  .Cells(lRow, 4).Value = Me.txtDate.Value
  .Cells(lRow, 5).Value = Me.txtQty.Value
'  .Protect Password:="password"
End With

'Combobox1.linkedcell=C4

'clear the data
Me.cboPart.Value = ""
Me.cboNum.Value = ""
Me.txtQty.Value = ""
Me.cboPart.SetFocus

End Sub



Private Sub cmdClose_Click()
  Unload Me
End Sub

目標は、「パーツの追加」ボタンをクリックして複数のファイルを追加し、それを作業指示書に出力できるようにすることです (パーツの範囲は A33:A55 または同様のものだと思います)。

また、入力したものに応じて、パーツ名とパーツ番号の両方をユーザーフォームに依存させる方法があるかどうかも知りたいです。それは優先順位が低いですが。

4

1 に答える 1

1

あなたがやろうとしていることについて、私はまだ 100% ではありません。また、使用したいセクション (コンボボックスなど) がコメントアウトされているかもしれません。あなたの 1row 範囲は、あなたがやりたくない次の空のセルを見つけています。ただし、情報を範囲に入力する方法については、おそらく ws With ステートメントを変更する必要があります。

   1row = 35 'or whatever row number
   For n =0 to CountOfItemsToAdd 'could also be done with a For Each statement
   'You will also need another for statement here to go through your part list
    With ws
     1row = 1row + (n*3)
     '  .Unprotect Password:="password" [you only need this if using passwords]
     .Cells(lRow, 1).Value = Me.cboPart.Value
     .Cells(lRow+1, 1).Value = Me.cboPart.List(lPart, 1)
     .Cells(lRow+2, 1).Value = Me.cboNum.Value
     '  .Cells(lRow, 4).Value = Me.txtDate.Value
     .Cells(lRow+3, 1).Value = Me.txtQty.Value
     '  .Protect Password:="pasword"

ただし、特定の質問に答えるには、列インデックスである 2 番目の数値ではなく、行インデックスである .Cells 参照の最初の値を変更します。

于 2013-04-08T02:13:07.867 に答える