我有一个用户表单上的组合框,我想用一个值列表填充它。
这些值位于一系列列的中间,可以被认为是列标题,因为每个列都在自己的列中。列的列表会随着时间的推移而扩展,每次初始化用户表单时都应该更新。我已经能够从单个列创建列表,也可以从多个列创建列表,但是当我这样做时,值保持在列方向,我无法将它们转置到行列表中。列中的数据如下所示:
|--|--A--+--B--+--C--+--D--+ ... +
|--|-----+-----+-----+-----+
|1 | | | | |
|--|-----+-----+-----+-----+
|2 | << other data here >>|
|--| +-----+-----+-----+
|3 | " | a | b | c | ... <~~ row 3 data (needed as 2nd element in combobox)
|--| +-----+-----+-----+
|4 | " | d | e | f | ... <~~ row 4 data (needed as 1st element in combobox)
|--| +-----+-----+-----+
|5 | " | 1 | 2 | 3 |
|--| +-----+-----+-----+
|6 | " | 4 | 5 | 6 |
|--|-----+-----+-----+-----+
|7 | " | 7 | 8 | 9 |
|--|-----+-----+-----+-----+
我希望组合框列表条目如下所示:
d a
e b
f c
这个用户表单由另一个用户表单初始化,该用户表单从几个选项中选择,然后从几个具有相似信息的工作表中激活正确的工作表。当第二个用户表单初始化时,它应该用上面例子中的数据填充combobox。我用下面的代码从一列中创建了一个值列表:
Private Sub UserForm_Initialize()
'ReferenceCombo.ColumnCount = 2
'Range("B4", Range("B" & Rows.Count).End(xlUp)).Name = "Dynamic"
'Me.ReferenceCombo.RowSource = "Dynamic"
End Sub
我还可以使用以下命令获取一行中所有值的列表:
Dim sht As Worksheet
Set sht = ActiveSheet
ReferenceCombo.ColumnCount = 2
sht.Range(Sheet7.Cells(4, 2), Sheet7.Cells(4, Columns.Count).End(xlToLeft)).Name = "Dynamic"
sht.Range(Sheet7.Cells(4, 2), Sheet7.Cells(4, Columns.Count).End(xlToLeft)).Select
Me.ReferenceCombo.RowSource = "Dynamic"
但这只选择了我想要的两行中的一行,并没有将值列表转换为正确的格式。
我从这里尝试过信息,但这似乎不适用于用户表单。这里的信息有助于正确选择行。这有助于选择动态字段。在这里,我找到了关于转置列表的信息,但我不确定我是否完全理解。这与列表填充范围有关,但我不确定这是否适用于用户表单上的组合框。这与插入转置函数有关,但对我不起作用。
任何帮助都将不胜感激。
将第 4 行和第 3 行中的标题信息分配给组合框
据我了解您的帖子,您希望提取从单元格 B3
到第 4 行最后一列的标题信息,但在组合框中以相反的行顺序显示数据。
您可以将这些数据分配给一个可变的二维数组,并使用<code>应用程序的高级可能性对其进行重构。索引function*)并将数组分配给组合框。一行中的列
属性(为了避免通过常用的.List
property进行进一步的重传)。
*)请参见<code>应用程序的高级可能性。索引函数
Option Explicit ' declaration head of Userform code module
Private Sub UserForm_Initialize()
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' [1] assign data to variant 1-based 2-dim array v
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim v As Variant, nCols As Long
nCols = Sheet7.Range(Sheet7.Cells(4, 2), Sheet7.Cells(4, Columns.Count).End(xlToLeft)).Columns.Count
v = Sheet7.Range("B1").Resize(4, nCols).Value2 ' e.g. B1:X4 (if X4 is last column)
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' [2] restructure array by filtering rows 4,3 and all columns Array(1,2,3,...)
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
v = Application.Index(v, Application.Transpose(Array(4, 3)), allCols(nCols))
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' [3] assign data to combobox via .Column property
' (instead of assigning the transposed array to the .List property)
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Me.ReferenceCombo.Column = v
End Sub
Private Sub UserForm_Layout()
Me.ReferenceCombo.ColumnCount = 2
End Sub
Private Function allCols(ByVal ColNum As Long) As Variant()
' Purpose: return array with column numbers from 1,2, to ...ColNum
ReDim temp(0 To ColNum - 1)
Dim i As Long
For i = LBound(temp) To UBound(temp)
temp(i) = i + 1
Next i
allCols = temp
End Function
我有一个数据框如下: 我希望它是这样的: 我们的目标是为每个< code>Part和< code>Power创建一列,并填写如下所示的值。每台机器都有不同数量的零件,但最多为8个(这将导致列< code>Part8_PowerA和< code>Part8_PowerB)。当机器没有某个部件时,Part_Power的值用-1填充。 我已经寻找了很长时间的解决方案,包括这个,但是我不能适应我的情况,我
我有一个带有2个组合框(组合框1和组合框2)以及“保存”和“取消”按钮的用户表单。我的目标是,每当我选择一个组合框中的一个项目时,另一个应该被“阻止”或禁用。因此,当按下保存按钮时,它只能从这两个组合框之一中保存一个项目。 这就是我已经走了多远: 现在的问题是,当我为combobox1选择一个项目,为combobox2选择一个项目时,它仍然保存它。
问题内容: 我已经编写了此函数,用于将元组列表转换为列表列表。有没有更优雅的/ Pythonic的方式来做到这一点? 问题答案: 您可以使用列表推导:
问题内容: 我如何转换 至 问题答案: 使用简单的列表理解: 会给你:
问题内容: 我需要将列表转换为一列熊猫数据框 当前列表(len = 3): 所需的熊猫DF(形状= 3,): 请注意,这些数字代表上述“必需熊猫” DF中的索引。 问题答案: 采用: 谢谢DYZ:
我正在尝试将列表转换为元组。 Google上的大多数解决方案提供以下代码: 但是,当我运行代码时,它会产生一条错误消息: TypeError:“tuple”对象不可调用 我如何解决这个问题?