VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联

引言:

之前已经描述分别描述了Excel VBA的窗体、控件和Excel本身的对象(也就是数据的承载者)。本章主要描述Excle VBA中如何将控件和excel中的数据相关联。

一、如何关联已有的Excel文档和VBA

其实这个就是如何使用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方法带的路径是一个绝对路径。

二、如何关联控件和Excel数据

目前我找到两个方法:

  • 1.使用控件的controlsource,rowsource属性,能使用controlsource属性的控件如下图。

VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联_第1张图片

 rowsource 指定为组合框或列表框提供列表的来源

示例1:

下例在列表框中使用工作表单元格(A1:E4)的区域,文本框使用工作表单元格(A1)。这个代码示例使用了 RowSourceBoundColumnControlSource 属性。

若要使用该示例,请将示例代码复制到某窗体的声明变量部分。请确保该窗体包含名为 LIstBox1 的列表框,命名为TextBox1的文本框。在工作表单元格的 A1:E4 中输入数据。

Private Sub UserForm_Initialize()
Workbooks(2).Activate
TextBox1.ControlSource = "a1"

ListBox1.ColumnCount = 5
ListBox1.RowSource = "a1:e4"

End Sub

运行结果如下:

VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联_第2张图片

红色框表示Textbox内的数据已经和excel的A1内容关联上了,蓝色框标识listbox的数据与Excel的A1:E4的数据关联上了,此时修改A1的内容,窗口内控件的值也会跟着动

如下图:

VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联_第3张图片

  • 2.使用Change方法 

 上个例子比较死板,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
  • 注意:select_test()方法要定义成public方便不同的模块调用。 

第二,改变文本框内容时,选定的单元格内容同步修改

使用TextBoxChange方法。

Private Sub TextBox1_Change()
    Set rng = ActiveCell.Cells
    rng.Value = UserForm1.TextBox1.Value
End Sub

第三,文本框显示选定单元格的内容

使用worksheetSelectionChange方法。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Call select_test
End Sub

选定单元格显示到文本框 

VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联_第4张图片

修改文本框内容,EXCEL选定的单元格内容同步修改 

 VBA Excel 实践(五)Excel窗体、控件与excel数据(单元格)的关联_第5张图片

不会弄gif图,凑合着看吧。 

你可能感兴趣的:(VBA)