【发布时间】:2013-01-24 21:11:09
【问题描述】:
我正在尝试在我的工作中创建一个库存系统,作为我们唯一拥有的 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 或类似的东西)
我还想知道是否有一种方法可以使部件名称和部件编号都依赖于用户窗体中,具体取决于您输入的内容?虽然这是一个较低的优先级。
【问题讨论】:
-
我完全理解这是一个关于 Excel 的问题,并且您说过 Excel 是您拥有的唯一软件。话虽如此,这类问题最好用数据库而不是电子表格来解决。我强烈建议您至少获得 MS Access - 这样您将更容易创建库存系统。
-
如果您逐行填充范围 A1:A500 则
Dim lRow as Long和lRow = Worksheets(1).Range("A501").end(xlUp).Row + 1lRow 是 ColA 中第一个空行的行号(从范围的底部) -
Lokerim,我意识到像 MS Access 这样的东西会让我的生活更轻松,但公司不感兴趣/不愿意在软件上花钱;因此我试图简化一些事情。 @Tim,如果我试图填充只有 A33:A45 的范围怎么办?我不能使用该代码,因为它假定范围结束后为空白,在我的情况下这是不正确的,因为这是我们工作单的后半部分。
-
正如@lokerim 所说,这是 MS Access 中的一个小问题。它的成本约为 150 美元——JohnnyD 每小时的成本是多少?他们会尝试用螺丝刀钉钉子吗?
-
@JohnnyD 你取得了什么进展?
标签: vba excel combobox userform