数据保存在combobox中,而不是实际化的

我希望你能帮我解决我这个小问题

我的文件包含3个工作表。 1.数据2.报告3.帮助工作表做一些计算

当我打开文件时,我点击一个button来实现一个计算,这会启动一些请求。 该请求首先将工作表1(数据)中的数据复制到工作表3(帮助工作表)。 在进一步请求之后,全部在用户表单中完成,工作表3中的数据被过滤以获得所请求的数据。 用户表单从工作表3中获取数据,并通过scritping字典显示在combobox中。

这是问题:

我的数据包含在三个电子表格中。 如果我点击工作表2上的button,这些请求会首次完成工作。 如果我想再次执行此操作(再次单击此button以执行复制,过滤和计算),则filter设置错误,计算也将如此。 但是,如果打开工作表3(当前视图在工作表3上,而不是工作表2上的button),并且我在编辑器窗口中手动启动请求和计算,则filter和计算总是正确的。

我认为错误是当combobox生成字典分别获取其数据和应用filter。 filter始终是第一次请求时设置的filter。 随着进一步的请求,filter不会改变,它仍然是第一个请求的filter。 也许在请求和计算之后应该有某种重置?

我用下面的代码为userform / combobox / scritping字典:

Sub UserForm_Initialize() 'Taking the data from the helping working sheet Dim objDic As Object Dim lngZ As Long Dim i As Integer Set objDic = CreateObject("Scripting.Dictionary") With Sheets("helpsheet") For i = 12 To Sheets("helpsheet").Cells(.Rows.Count, 3).End(xlUp).Row If Sheets("helpsheet").Rows(i).Hidden = False Then ComboBox2.AddItem .Cells(i, 3) objDic(.Cells(i, 3).Value) = 0 End If Next End With Me.ComboBox2.List = objDic.keys With Me.ComboBox2 .AddItem "all areas" End With End Sub 

我真的希望有人可以帮助我,因为我不能进行:(

谢谢

拉法

在执行filter并在该表单上复制数据之前,最好先激活/select源表单。

当然,人们说,不应该使用Sheets("SheetName").select一个代码,但只要它解决了我的错误,我会这样做:)。

因此,请在执行代码之前尝试将此Sheets("YourSource").select 。 如果你想返回到Sheet 2(button所在的位置),只需使用Sheets("Sheet2Name").select

希望我能帮助!

如果您始终使用全范围参考,则不应该遇到任何问题

我的猜测是,在你的其他(未显示)代码中,你是:

  • 使一些表单激活/select,使第二次启动“糟糕的环境”

  • 使用不完全引用的范围variables

你可能想显示其他代码来帮助我们帮助你

顺便说一句,你可以重构UserForm_Initialize代码如下:

 Option Explicit Sub UserForm_Initialize() Dim objDic As Object Dim i As Long Set objDic = CreateObject("Scripting.Dictionary") With Sheets("helpsheet") For i = 12 To .Cells(.Rows.Count, 3).End(xlUp).Row If Not .Rows(i).Hidden Then objDic(.Cells(i, 3).Value) = 0 Next End With With Me.ComboBox2 .List = objDic.keys .AddItem "all areas" End With End Sub 

或者,再缩短一点:

 Sub UserForm_Initialize() Dim objDic As Object Dim cell As Range Set objDic = CreateObject("Scripting.Dictionary") For Each cell In Sheets("helpsheet").Columns(3).SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible) objDic(cell.Value) = 0 Next cell With Me.ComboBox2 .List = objDic.keys .AddItem "all areas" End With End Sub 

我find了解决scheme,它是超级简单的..

要重置combobox,您只需在END SUB之前添加END即可。 这样一切都没有任何价值或属性到达其初始状态。

我没有激活或select工作表,因为我不想让任何人看到它背后。 不过谢谢:)