2017-02-22 94 views
1

我有一个Excel工作簿,上面有两张工作表。 工作表1是一个填写的表单,它有一个提交按钮(用VBA创建),它接收数据并将其添加到工作表2上的下一个空行。 因此工作表2填充了以前提交的表单信息和工作表1可以被清除(再次通过用VBA创建的按钮)为下一批信息做好准备。通过下拉列表将数据从一张纸导出到另一张 - VBA Excel宏

每个条目都有一个唯一的号码供参考,但我想要做的是在表1(表单)中有一个下拉列表中的所有唯一号码,我可以选择一个号码并带给它将所有相关信息重新输入到表单中,以便进行任何编辑,并且按钮可以保存/覆盖数据,而不是将其另存为新行。

所以想能够将数据带回到工作表1编辑/修改/保存/覆盖。

我的VBA知识有限,因为这是我处理过的第一个项目,所以我仍然在学习基本知识。

任何意见或建议将不胜感激。

很多谢谢

Rachael。

回答

2

我已经放在一起演示你请求的一个快速示例,它可以下载here

我做了以下内容:

  1. 新增的表单(有几个数据编辑字段)和数据(带有示例数据)的工作表。
  2. 在数据表中添加了验证下拉列表,其中显示了您的数据工作表中的ID +名称数据。
  3. 当验证下拉列表中选择的选项改变它触发Worksheet_Change事件,运行下面的代码:

    Private Sub Worksheet_Change(ByVal Target As Range) 
        'check that the Target cell is our dropdown 
        If Target.Address = "$C$2" Then 
         'get the value of the dropdown using the range method 
         Dim dropDownValue As String 
         dropDownValue = CStr(wsForm.Range(Target.Address).Value) 
    
         'if that dropdown value exists (has a length of more than zero) 
         If Len(dropDownValue) > 0 Then 
          'get the corresponding record from the data sheet 
          Dim index As Integer 
          index = Left(dropDownValue, 1) 
    
          wsForm.Range("C3").Value = index 
          wsForm.Range("C4").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 2, False) 
          wsForm.Range("C5").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 3, False) 
          wsForm.Range("C6").Value = Application.WorksheetFunction.VLookup(index, wsData.Range("A:E"), 4, False) 
         End If 
    End If 
    End Sub 
    

    其中采用vlookups检索从数据表中的信息来填充编辑表单。

  4. 当点击保存按钮,下面的代码运行:

    Sub Button4_Click() 
        Dim index As Integer 
        index = wsForm.Range("C3") 
    
        If index > 0 Then 
         Dim foundIndexRange As Range 
         Set foundIndexRange = wsData.Range("A:A").Find(index) 
    
         If (Len(foundIndexRange.Value) > 0) Then 
          foundIndexRange.Offset(0, 1).Value = wsForm.Range("C4").Value 
          foundIndexRange.Offset(0, 2).Value = wsForm.Range("C5").Value 
          foundIndexRange.Offset(0, 3).Value = wsForm.Range("C6").Value 
         End If 
         MsgBox "Record saved" 
        Else 
         MsgBox "Please choose from the dropdown" 
        End If 
    End Sub 
    

    它使用range.Find方法来定位,其中索引是在数据表上的范围内,然后偏移覆写我们的新的价值。

我希望是有道理的,请问如果你有任何问题。

+0

谢谢Majjam,我刚才看到了这个回复,所以我很抱歉回复我的回复。我会看看你的评论,并让你知道我如何继续。再次感谢 – Grigson

+0

没问题@Grigson,一切顺利,让我知道如果您有任何问题 – majjam

+0

对不起,感到痛苦@Majjam我无法获得该文件,因为它是rar'd,我没有winrar在我的工作笔记本电脑上。我可以创建验证下拉列表,但我不确定“工作表更改”代码的位置/如何激活?我是否需要创建一个按钮来获取VBA?对不起,我的无知:) – Grigson

2

您可以打开“过滤器”并在唯一编号列中过滤/搜索您要更改其数据的编号,而不是将数据带回到工作表1中。它只会显示与该号码对应的数据输入。然后在工作表2上进行编辑。

希望这是有用的。

+0

感谢您的回复KoderM16,如果事情变得更加麻烦,那么我最终会这么做,那么值得哈哈。这是因为表单1上的字段比表单2上的字段更清晰,如果我可以这样做会使修改更容易一些 – Grigson

相关问题