之前已经描述分别描述了Excel VBA的窗体、控件和Excel本身的对象(也就是数据的承载者)。本章主要描述Excle VBA中如何将控件和excel中的数据相关联。
其实这个就是如何使用Vba打开已有的Excel文件。这其实是我们关联excel和Excel最早要干的事,如果不打开文件,你还做毛线的操作。
使用workbooks.open方法:
表达式.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
括号里的都是参数
Sub open_test()
Workbooks.Open "D:\pbxtest.xlsx"
Workbooks(2).Activate
End Sub
上面示例是表示打开文件pbxtest.xlsx,并激活。为什么使用 Workbooks(2).Activate呢,因为你打开excel本身就会有一个workbook,用workbooks(1)表示。(可以参考前面章节)
注意:open方法带的路径是一个绝对路径。
目前我找到两个方法:
rowsource 指定为组合框或列表框提供列表的来源
示例1:
下例在列表框中使用工作表单元格(A1:E4)的区域,文本框使用工作表单元格(A1)。这个代码示例使用了 RowSource 、BoundColumn 和 ControlSource 属性。
若要使用该示例,请将示例代码复制到某窗体的声明变量部分。请确保该窗体包含名为 LIstBox1 的列表框,命名为TextBox1的文本框。在工作表单元格的 A1:E4 中输入数据。
Private Sub UserForm_Initialize()
Workbooks(2).Activate
TextBox1.ControlSource = "a1"
ListBox1.ColumnCount = 5
ListBox1.RowSource = "a1:e4"
End Sub
运行结果如下:
红色框表示Textbox内的数据已经和excel的A1内容关联上了,蓝色框标识listbox的数据与Excel的A1:E4的数据关联上了,此时修改A1的内容,窗口内控件的值也会跟着动
如下图:
上个例子比较死板,Textbox只能对应显示某一个Excel的单元格,且只能做如下动作:修改单元格然后触发TextBox的内容变化。我想更近一步的操作,比如我想鼠标选定哪个单元格,哪个单元格的内容就显示到TextBox(文本框),并且当修改文本框的内容时,Excel当前选定的单元格内容也会随之改变,该怎么弄?分三步:
首先,写一个选定单元格的方法,并在窗体初始化时调用:
目的:初始化时文本框就能显示已经选定单元格的内容。
'选定Excel单元格
Public Sub select_test()
Dim rng As Range
Set rng = ActiveCell.Cells
UserForm1.TextBox1.Value = rng.Value
End Sub
'初始化窗口
Private Sub UserForm_Initialize()
Workbooks(1).Activate
Call select_test
End Sub
第二,改变文本框内容时,选定的单元格内容同步修改
使用TextBox的Change方法。
Private Sub TextBox1_Change()
Set rng = ActiveCell.Cells
rng.Value = UserForm1.TextBox1.Value
End Sub
第三,文本框显示选定单元格的内容
使用worksheet的SelectionChange方法。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call select_test
End Sub
选定单元格显示到文本框
修改文本框内容,EXCEL选定的单元格内容同步修改
不会弄gif图,凑合着看吧。