Excel VBA将列表框值传递给子

我无法弄清楚我在做什么错在试图传递一个用户表单select到一个子。 scodevariables没有从列表框select(scode = ScrapReasonCodes.ListBox1.Value)获取值,因此给了我一个无效的空错误使用。

这是电子表格代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim rInt As Range Dim rCell As Range Set rInt = Intersect(Target, Range("a1:az40")) If Not rInt Is Nothing Then For Each rCell In rInt rCell.Value = "x" Next End If Set rInt = Nothing Set rCell = Nothing Cancel = True Call ScrapData End Sub Sub ScrapData() Dim Stamp As String Dim scode As String Dim whereitat As String whereitat = Selection.Address(False, False, xlA1) Stamp = Format(Now(), "mm-dd-yyyy hh:nn:ss AM/PM") 'scode = InputBox("Issue Code") ScrapReasonCodes.Show scode = ScrapReasonCodes.ListBox1.Value Sheets("Data").Select ActiveCell.Offset(1, 0).FormulaR1C1 = Stamp ActiveCell.Offset(1, 1).FormulaR1C1 = scode ActiveCell.Offset(1, 2).FormulaR1C1 = whereitat ActiveCell.Offset(1, 0).Select Sheets("DWG").Activate End Sub 

这是用户表单和button代码

 Sub CommandButton1_Click() scode = ScrapReasonCodes.ListBox1.Value ' MsgBox (scode) Unload Me End Sub Sub UserForm_Initialize() Dim ScrapCodes As Range Dim WS As Worksheet Set WS = Worksheets("Data") For Each ScrapCodes In WS.Range("ScrapCodes") With Me.ListBox1 .AddItem ScrapCodes.Value End With Next ScrapCodes End Sub 

任何人都可以看到我要去哪里错了吗?

问题是,当您单击CommandButton1_Click(我认为是接近或这样)然后卸载窗体 – 这具有从内存中擦除它的效果 – ,然后当您实际重新初始化窗体后执行此ScrapReasonCodes.ListBox1.Value虽然不显示表格)。 为了避免这个隐藏表单,如下所示,读取你的值,然后从调用代码中卸载表单。


在ScrapData更改下面两行

 ScrapReasonCodes.Show scode = ScrapReasonCodes.ListBox1.Value 

以下三行

 ScrapReasonCodes.Show scode = ScrapReasonCodes.ListBox1.Value unload ScrapReasonCodes 

然后在你的用户表单CommandButton1_Click下面修改如下

 Sub CommandButton1_Click() scode = ScrapReasonCodes.ListBox1.Value ' MsgBox (scode) Unload Me End Sub 

 Sub CommandButton1_Click() me.hide End Sub