VBA窗体form和控件初接触(3): 窗体控件名加变量进行控制等

1 如果需要,窗体的控件加变量,实现控制

  •  Controls("Label" & (41 + I)).Caption = "中了第" & ws1.Range("g23") & "个" & Chr(10) & ws1.Range(" k23") & "*" & ws1.Range(" m23")
  • 重点就是
  • 方式1
  • Controls("")
  • Controls("Label" & (41 + I)).Caption
  • Controls("OptionButton" & i)
  • 方式2
  • OleObjects("Label" & a).Object.Caption 表示Label1.Caption
  • Sheet1.OleObjects("CommandButton" & a).Object.Caption

2

用户窗体有个文本框控件,想将它和某个单元格绑定,现在不知道如何去设置这个ControlSource属性,谢谢

  1. Me.TextBox1.ControlSource = _

  2. Application.Cells(1, 5).Address(True, True, , True)

ControlSource 属性
参阅          示例          应用于          特性

标识用于设置或储存控件中 Value 属性的数据位置。ControlSource 属性可接受 Microsoft Excel 工作表区域。

语法

object.ControlSource [= String]

ControlSource 属性的语法有以下几个成分:

成分 说明
object 必需。一个有效对象。
String 可选。指定链接到控件 Value 属性的工作表单元格。


说明

ControlSource 属性可标识某单元格或字段;但它不包含存储于该单元格或字段中的数据。如果更改控件的 Value 值,该更改将自动地反映在相链接的单元格或字段中。同样地,如果更改相链接的单元格或字段中的值,此更改也将自动地反映在控件的 Value 值中。

不能为 ControlSource 指定另一个控件,否则会产生错误。

ControlSource 的默认值为一空字符串。如果 ControlSource 包含一个非空的字符串,它将标识被链接的单元格或字段。当控件被加载时,该单元格或字段中的内容会被自动复制到 Value 属性中。

注意   如果 Value 属性为 Null,则由 ControlSource 所标识的位置中不存在任何数值。

Private Sub CommandButton1_Click()
ListBox1.AddItem 1
ListBox1.ControlSource = "a3"
End Sub


VBA中窗体插入的listbox 控件的 rowsource ="A2:F200",在VBA中运行良好
可是将该窗体转到VB,设置这个属性,却显示错误 "无法设置 rowsource 属性.属性值无效"
应该如何处理 ?

没有具体的对象。即:具体的工作表名称。

lstbooks.RowSource = "A2:F200"

   'Me.ListBox1.ControlSource = ws1.Range("h8:k8")
    'ListBox1.RowSource = ws1.Range("h8:k8")
    'ListBox1.ControlSource = Array(1, 2, 3)
    '''Me.TextBox1.ControlSource = "sheet1!G1"
    'ListBox1.ControlSource = "sheet1!a1:a4"
    'ListBox1.ControlSource = Application.Cells(1, 5).Address(True, True, , True)
    ''''''ListBox1.RowSource = "sheet1!a1:a4"
    ''''''ListBox1.RowSource = "new射击模拟!n7:n10"
    ComboBox1.RowSource = "new射击模拟!n7:n10"

特别注意点1
rowSource指定后,不可以在additem  removeitem
所以我在这个例子里,用的是 循环 additem的方式
特别注意点2
rowsource的指定是表格写法     rowsource="sheet1!A1:A9"
而不是VBA的写法                      rowsource= worksheets().range() 
 

赋值方法差别

 additem

deleteitem

rowSource 的不能改了

Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 2                                                  '设列表为2列
For i = 2 To Range("A65536").End(xlUp).Row                     '根据A列行数决定循环次数
    ListBox1.AddItem                                                             '添加一行记录.这一句是关键,
    ListBox1.List(ListBox1.ListCount - 1, 0) = Range("A" & i)  '新添加的一行第一列数据
    ListBox1.List(ListBox1.ListCount - 1, 1) = Range("D" & i)  '新添加的一行第二列数据
Next
End Sub
Private Sub ListBox1_Change()
TextBox1 = ListBox1.List(ListBox1.ListIndex, 0) & "   " & ListBox1.List(ListBox1.ListIndex, 1)                '——文本框=列表选中行
End Sub

TextBox1 = ListBox1.List(ListBox1.ListIndex, 0)

Private Sub UserForm_Initialize()                  '窗体加载事件
    Dim Arr, Res
    Res = Range("A2").CurrentRegion
    ReDim Arr(1 To UBound(Res), 1 To 2)
    For i = 1 To UBound(Res)
        Arr(i, 1) = Res(i, 1)
        Arr(i, 2) = Res(i, 4)
    Next i
    ListBox1.List = Arr
End Sub
 

rowSource 还可以指定 columncount 但是不能  columnSource

用ADDITEM 和 LIST(?,?)来赋值吧。
不知道有没有一步到位的做法。

3

ComboBox1.Value

 .caption

这几个很有用

controlsource

要先清除ComboBox2内容

Private Sub ComboBox1_Change()
If ComboBox1.Value = 1 Then
    With ComboBox2
        .Clear
        .AddItem "1"
        .AddItem "2"
        .AddItem "3"
    End With
  ElseIf ComboBox1.Value = 2 Then
        With ComboBox2
            .Clear
            .AddItem "4"
            .AddItem "5"
        End With
End If
End Sub

4
Private Sub UserForm_Initialize()    '坑爹的userform 和 userform1

    Set ws1 = Worksheets("new射击模拟")

5 常用判断

Select Case ComboBox1.Value
    
    Case Is = "库1"
        Label32.Caption = "这边选的是:" & ComboBox1.Value
    Case Is = "库2"
        Label32.Caption = "这边选的是:" & ComboBox1.Value
    Case Is = "库3"
        Label32.Caption = "这边选的是:" & ComboBox1.Value
    Case Is = "库4"
        Label32.Caption = "这边选的是:" & ComboBox1.Value

End Select

选择型 if

排他性

你可能感兴趣的:(#,VBA实验,vba)