【问题标题】:Search for the value from ComboBox, then write the value from a Textbox to a cell从 ComboBox 中搜索值,然后将 Textbox 中的值写入单元格
【发布时间】:2021-04-13 00:51:00
【问题描述】:

我的工作场所有一张 Excel 表格,我们正在那里制作托盘。我创建了一个用户表单,其中有 5 个组合框5 个文本框。当我们有一个新订单时,我希望宏从组合框中获取值并在“E7:E1347”字段中搜索名称,然后将文本框中的数字插入到搜索托盘旁边的 M 列。例子: 我想订购 10 件 TestPallet。我在 ComboBox1 中键入 TestPallet,在 TextBox6 中键入 10。在我点击 INSERT 按钮后,我希望宏搜索名称并将文本框中的数字插入到 M 列。

我现在有一个解决方法,但它真的很慢。我做了一张表,如果我在盒子里输入一些东西,它会在那里疼痛,但是每次我敲击键写托盘名称时程序都会重新计算,而且速度很慢。我觉得,如果可以的话,这样会更快。

到目前为止我的代码:(代码中注释的所有内容都有效)

Public Sub Import_Click()

Dim palety, skracovanie, harmonogram As Worksheet
Set palety = ThisWorkbook.Worksheets("palety")
Set skracovanie = ThisWorkbook.Worksheets("skracovanie")
Set harmonogram = ThisWorkbook.Worksheets("harmonogram")

Dim i  As Long
 
For i = 7 To 1347
 If InStr(Sheets(1).Range("E" & i).Value, Me.ComboBox1.Value) Then 
 Sheets(1).Range("M" & i).Value = Me.TextBox6.Value
Next

'Sheets("palety").Select
'ActiveSheet.Range("M:M").AutoFilter Field:=13, Criteria1:=">=1"

'név
'palety.Range("E1347:E3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False
    
'kód vstupného reziva
'palety.Range("AA1347:AA3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False

'kód palety
'palety.Range("C1347:C3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False
'harmonogram fulre
'palety.Range("C7:C1341").SpecialCells(xlCellTypeVisible).Copy
'harmonogram.Cells(5, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False
    
'kód prírezov
'palety.Range("G1347:G3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False
    
'méretek + darabszám
'palety.Range("H1347:K3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False
    
'poznámka
'palety.Range("BW1347:BW3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 9).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 '   :=False, Transpose:=False
    
'objem celkom
'palety.Range("N1347:N3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 12).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False
    
'výťaž
'palety.Range("AC1347:AC3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 13).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False
    
'príprava
'palety.Range("Q1347:Q3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 16).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False

'spotreba času na 100 ks
'palety.Range("R1347:R3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 17).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False

'prírez V szog
'palety.Range("F1347:F3925").SpecialCells(xlCellTypeVisible).Copy
'skracovanie.Cells(3, 24).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False
    

'Rows("3:100").Select
'ActiveWorkbook.Worksheets("skracovanie").Sort.SortFields.Clear
'ActiveWorkbook.Worksheets("skracovanie").Sort.SortFields.Add Key:=Range( _
'    "F3:F100"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
'    xlSortNormal
'With ActiveWorkbook.Worksheets("skracovanie").Sort
'    .SetRange Range("A3:X100")
 '   .Header = xlGuess
 '   .MatchCase = False
  '  .Orientation = xlTopToBottom
   ' .SortMethod = xlPinYin
    '.Apply
'End With

提前感谢您的帮助。即使这是不可能的,只是说“这不可能”是一个巨大的帮助。

【问题讨论】:

  • 嗨!听起来你去那里是个好主意。分享minimal reproducible example,这将有助于我们为您提供帮助(因为我们将能够找出您可能出错的地方)。如果没有任何代码,您将无法通过 cmets 获得很多答案或建议。
  • 你是如何填充组合框的?
  • @SamuelEverson 将代码添加到原始问题中。对不起,我是这个网站的新手
  • @norie Me.ComboBox1.List = Worksheets("palety").Range("E7:E1341").Value 我在 UserForm Initialize 上使用了这个

标签: excel vba


【解决方案1】:

单个组合框/文本框

由于您已经从 E7:E1341 范围内填充了组合框,我们可以使用它的 ListIndex 属性来获取所选值所在的行,并从中获取列 M 中的适当值。

Dim idx As Long
Dim lngRow As Long
     
    idx = ComboBox1.ListIndex

    If idx <> -1 Then 
        lngRow = ComboBox1.ListIndex + 7
        Worksheets("palety").Range("M" & lngRow).Value = TextBox1.Value
    End If

多个组合框/文本框

如果您有多个按顺序命名的组合框/文本框,例如ComboBox1/TextBox1、ComboBox2/TextBox2 等,并以相同的方式填充,然后您可以使用类似的方法将所有值放在 M 列中。

Dim idx As Long
Dim idxList As Long
Dim lngRow As Long

    For idx = 1 To 5
        idxList = Me.Controls("ComboBox" & idx).ListIndex
        If idxList <> -1 Then
            lngRow = idxList + 7
            Worksheets("palety").Range("M" & lngRow).Value = Me.Controls("TextBox" & idx).Value
        End If
    Next idx

【讨论】:

  • 感谢您的代码。我将它分配给按钮,但是当我尝试它时,文本框中的数字消失了,并且它没有出现在我选择的托盘的 M 列中。该单元格中有一些剩余的代码,将其删除,但仍然没有。或者我可能做错了什么?试图将它分配给组合框,但现在它是空的
  • 抱歉,我弄错了 - 我会修正答案。
  • 谢谢,这工作得很好。我还有 1 个问题:我是否必须为每个组合框执行此代码,还是有办法遍历所有组合框?
  • 其他组合框/文本框的值应该放在哪一列?
  • 同理:其他组合框由同一字段填充。其他文本框也应该转到 M 列
【解决方案2】:

怎么样?

Dim i  as long
     
  For i =7 to 1347
     If Instr(Sheets(1).Range("E" & i).Value, me.combobox1.value) then Sheets(1).Range("M" & i).value=me.textbox6.value    
   next

【讨论】:

  • 感谢您的回答,但是当我尝试运行您的代码时,我收到错误消息“Next without For”
  • 立即检查 :) 如果可行,请支持我的建议!它是为了而不是为了
  • 试过新版本,但什么也没做。等了大约 2 分钟(只是为了检查我的电脑是否很慢),但什么也没发生。
  • 第 1 页上的信息是什么?如果没有相应改变
  • 将工作表 (1) 更改为活动工作表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多