为您推荐:
精华内容
最热下载
问答
  • 5星
    49KB weixin_58444518 2021-05-21 11:46:39
  • 5星
    1.45MB zhangjin7422 2021-04-07 09:24:30
  • Sub CopyRandomRows() Windows("sample rnd.xlsm")....在此先感谢VBA /宏代码获取文本框的 +0 'TextBox1'位于何处?它在一张纸上吗?哪张?它是否在表单中(表单的名称)?你使用表单控件还是ActiveX控件? –

    Sub CopyRandomRows()

    Windows("sample rnd.xlsm").Activate

    Rows("1:1").Select

    Selection.Copy

    Application.CutCopyMode = False

    Selection.Copy

    Windows("rnd sample draft.xlsm").Activate

    Sheets("Random Sample").Select

    Rows("1:1").Select

    ActiveSheet.Paste

    Dim source As Range, target As Range, randCount&, data(), value, r&, rr&, c&

    Set source = Workbooks("sample rnd.xlsm").Worksheets("Sheet1").Range("A2:L5215")

    Set target = Workbooks("rnd sample draft.xlsm").Worksheets("Random Sample").Range("A2")

    randCount = 5

    data = source.value

    For r = 1 To randCount

    rr = 1 + Math.Round(VBA.rnd * (UBound(data) - 1))

    For c = 1 To UBound(data, 2)

    value = data(r, c)

    data(r, c) = data(rr, c)

    data(rr, c) = value

    Next

    Next

    target.Resize(randCount, UBound(data, 2)) = data

    End Sub

    这是我的代码。我的问题是,如果我更改代码randCount = 5,我只能更改所需数据的数量。我希望能够使用我的TextBox并使用它来定义要获取的数据量。我试过randCound = TextBox1.value和randCount = TextBox1.Text,但似乎没有工作。我错过了什么?我如何得到它的工作。在此先感谢VBA /宏代码获取文本框的值

    +0

    'TextBox1'位于何处?它在一张纸上吗?哪张?它是否在表单中(表单的名称)?你使用表单控件还是ActiveX控件? –

    展开全文
    weixin_32644565 2021-06-13 11:35:12
  • 如何建立窗体,并通过窗体向该表内添加订单。 序号 姓名 科室 级别 身份 职称 受聘专业 性别 出生年月 年龄 参工时间 工作年限 入院时间 入院年限 职务 等级 ...

    目录

     码

    窗体控件与工作表的交互

    窗体的事件

    窗体中ControIs集合访问控件

    控件的排列

    使用控件数组进行赋值


    如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成的序列号。如何建立窗体,并通过窗体向该表内添加订单。

    编号客户名称订单日期需求日期型号数量
    1上海依柯塞尔有限公司2012/1/12012/1/8A112
    2上海依柯塞尔有限公司2012/1/22012/1/9A213
    3上海依柯塞尔有限公司2012/1/32012/1/10A314
    4上海依柯塞尔有限公司2012/1/42012/1/11A415
    5上海依柯塞尔有限公司2012/1/52012/1/12A516
    6上海依柯塞尔有限公司2012/1/62012/1/13A617
    7上海依柯塞尔有限公司2012/1/72012/1/14A718
    8上海依柯塞尔有限公司2012/1/72012/1/14A718

     码

        创建一个窗体,并在窗体中添加与工作表所需填写的数据列数相等的文本框与标签控件,然后添加一个按钮作为“保存”按钮。在“保存”按钮中添加Click事件,逐个读取文本框的Value属性,将其赋值给工作表中的各列。

    步骤1  按组合键【Alt+F11】打开VBE。
    步骤2  选择菜单“插入”→“用户窗体”,并在窗体中添加5个Label控件和5个TextBox控件,以及1个CommandButton控件。
    步骤3  在“工程资源管理器”中右键单击之前插入的窗体,选择“查看代码”,然后在代码编辑框中输入以下代码。

    Option Explicit
    '窗体初始化事件
    Private Sub UserForm_Initialize()
        Dim ctlIndex As Integer
        With Me
            .Caption = "数据录入"
            .CommandButton1.Caption = "录入"
            
            For ctlIndex = 1 To 5
                'label控件
                With .Controls("Label" & ctlIndex)
                    .Left = 22
                    .Top = 22 * (ctlIndex - 1) + 12
                    .Height = 18
                    .Width = 50
                    .Caption = Sheet1.Cells(1, ctlIndex + 1).Value
                End With
                
                'textbox控件
                With .Controls("TextBox" & ctlIndex)
                    .Left = 80
                    .Top = 22 * (ctlIndex - 1) + 12
                    .Height = 18
                    .Width = 100
                End With
            Next ctlIndex
        End With
    End Sub
    
    '按钮事件
    Private Sub CommandButton1_Click()
        Dim rowNew As Long
        Dim ctlIndex As Integer
        With Sheet1
            '获取添加新数据的行号
            rowNew = .Columns.Find("*", .Range("A1"), SearchDirection:=xlPrevious).Row + 1
            '填写序号
            .Cells(rowNew, 1).Value = rowNew - 1
            '遍历数据列和TextBox控件
            For ctlIndex = 1 To 5
                .Cells(rowNew, ctlIndex + 1).Value = Me.Controls("Textbox" & ctlIndex).Text
            Next ctlIndex
        End With
    End Sub
    
    

    步骤4  返回工作表界面,添加一个ActiveX按钮控件“显示窗体”,并为其添加单击事件代码如下,然后退出“设计模式”。

    Option Explicit
    
    Private Sub CommandButton1_Click()
        UserForm1.Show
    End Sub
    

    步骤5 单击“显示窗体”按钮,在窗体的文本框中输入内容后,单击“录入”按钮,即可将窗体中的内容写入工作表中,如图。

    窗体控件与工作表的交互

            窗体控件与工作表是可以进行交互的。开发者可以通过窗体控件的属性,方便地读取其中所需的值,然后赋值给工作表中的单元格或者任何希望赋值的对象;也可以将其他对象中所需传递的值赋值给工作表中的单元格。
            本例中,由于使用可以输入字符的TextBox控件,可以通过其Text属性或者Value属性获取在文本框中的内容。为了便于赋值,一般可以将TextBox控件取名为TextBoxN的形式,其中N表示该文本框相应的数据在工作表中的列。因而,可以通过循环进行批量赋值。

    窗体的事件

            本例中,窗体的Initialize事件中添加了读取各个数据标题的代码以赋值给Label控件,并对其中的各个控件进行了排列。该Initialize事件在窗体加载时发生,一般可以在其中进行窗体的一些初始化工作,尤其是一些排版或者标签赋值的工作。窗体还有许多非常有用的事件,见表。 

        事  件

        说  明

    Click()

      单击窗体区域(标题除外)事件

    DblClick(ByVal Cancel As MSForms.ReturnBoolean)

      双击窗体区域(标题除外)事件

    Activate()

      激活事件。当窗体获取焦点后被触发,类似于工作表的Activate事件

    Deactivate()

      失去激活状态事件。当窗体失去焦点后被触发,类似于工作表的Deacitvate事件

    Initialize()

    初始化事件。当窗体装载时触发

    QueryClose(Cancel As Integer,CloseMode as Integer)

    关闭事件。在窗体关闭前而未真正关闭时触发,可以通过Cancel参数取消关闭

    Terminate()

    终止事件,当窗体卸载后触发

    KeyDown(ByVal KeyCode As MSForms.RetunInteger,ByVal Shift As lnteger)

      键盘键接下事件。当健盘键按下后触发

      KeyUp(ByVal KeyCode As MSForms.ReturnInteger,ByVal Shift As Integer)

      键盘键弹起事件。当键盘键弹起后触发

      KeyPress(ByVal KeyAscii As MSForms.Returninteger)

      敲击键盘键事件。当敲击键盘键后触发,一个完整的敲击事件包括键盘键按下和键盘键弹起

      MouseDown(Byval Button As integer, ByVal Shift As integer, ByVal X As Single,ByvaL Y As Singe)

      鼠标按下事件.当鼠标的某个键被按下时触按

      MouseUp(ByVal Button As integer, ByVal Shift As integer, ByVal X As Single,ByVaL Y As  Single)

      鼠标键弹起事件。当鼠标的某个键弹起时触发

      MouseMove(ByVal Button As integer, ByVal Shift As integer, ByVal X As Single,ByVal Y As  Single)

      鼠标移动事件。当鼠标在控件上移动时触发。

    窗体中ControIs集合访问控件

        窗体中的所有控件都属于窗体Controls集合。当需要访问各个控件时,可以使用以下表达式:

    UserForm.Controls(index)

    该表达式可以返回一个窗体控件对象,其中,UserForm为窗体对象。
    参数index可以为控件的顺序号(从0开始),或者可以是控件的名称。
          默认情况下,窗体中控件的名称与工作表中ActiveX控件的名称命名一致,采用“控件类型”+顺序号组成(从1开始)的格式。因而本例中,实际使用了控件的名称来访问各个控件,从而更改其属性。

    控件的排列

        本例演示了如何使用代码排列各个控件。当控件的位置和名称具有规律时,则该过程只需要一个简单的图示和一些简单的数学计算就能完成。如图所示的实例演示了如何计算控件的Top属性。 

    使用该方法可以准确地排列各个控件,并调整窗体的大小。

    使用控件数组进行赋值

            本例使用了循环的方式将控件的值赋值给单元格区域。当单元格连续时,实际上可以采用控件数组完成。控件数组的概念实际上是VB中的一个概念,在Excel VBA中并不具备此功能。此处所描述的控件数组实际是将数组中各个控件对象组成一个数组。当需要赋值给工作表时,则可以使用该数组进行直接赋值。但该数组的作用域必须是整个窗体(即声明在窗体中,并独立于各个过程之外)。可以参考以下窗体代码实现赋值:

    '定义控件数组
    dim arrCtl(1 to 5) As Object
    '窗体初始化事件
    Private Sub UserForm_Initialize
        '变量声明,控件序号
        Dim ctlIndex As Integer
        '操作窗体
        With Me
            ...
        
            For ctlIndex =1 To 5
                Set arrctl(cltIndex)=.Controls("TextBox" & ctlIndex)
            Next ctlIndex
        End With
    End Sub
    
    '按钮单击事件
    Private Sub Commandbutton1_Click()
        dim rowNew As Long
        ...
        Sheet1.cells(rowNew,2).resize(1,5).value=arrCtl
    End Sub

    展开全文
    ngbshzhn 2021-11-01 15:43:16
  • 14 日志导出 15 excle文件格式转换 16 VBA隐藏表格 17 改变窗体外观 18 更改Sheet名 19 对文件夹中多个文件进行操作 20 合并单元格 21 插入一行单元格 22 在指定单元格内输入字符 23 调整行高和列宽 24 跳转到该列...
    											目   录
    
    编号名称编号名称编号名称编号名称编号名称
    1错误类2全局变量3开关4弹窗5换行
    6调试打印7引用8延时9日志窗口显示(全局文本)10调用外部软件
    11按钮状态改变12调用参数13路径选择14日志导出15excle文件格式转换
    16VBA隐藏表格17改变窗体外观18更改Sheet名19对文件夹中多个文件进行操作20合并单元格
    21插入一行单元格22在指定单元格内输入字符23调整行高和列宽24跳转到该列最后一个数值25获取当前单元格所在的行号和列号
    26格式刷(公式复用)27筛选28查找替换29单元格颜色30字符居中
    31添加公式32复制某个单元格33单元格引用34单元格边框35复选框执行
    36取消(退出软件)37If Else38For Next39While wend40Do Loop
    41附 录:42434445
    											 代   码
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    1、错误类
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    错误类:
    On Error Resume Next '忽略运行过程中可能出现的错误(添加在函数的前面)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    2、设置全局变量
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    设置全局变量:
    public i '将i设置成全局变量
    sub 全局变量()
    end sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳、
    3、开关
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    开关:
    	public i '将i设置成全局变量
    	sub 点击一下开再点击一下关()
    	if i = 0 then
    		'编写需要的代码满足何种条件后将i置为1
    		i = 1
    	else
    		'编写需要的代码满足何种条件后将i置为0
    		i = 0
    	end if
    	end sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    4、弹窗
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    弹窗:
    sub 弹窗()
    	MsgBox("这里编写弹出的提示框显示内容")
    end sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    5、换行
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    换行显示:
    & chr(10)
    长代码连写:
     _
    If i = 1 _
    Then
    i = 0
    End If
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    6、调试打印
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    打印参数值:
    Debug.print *'*为变量、引用值、固定字符等
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    7、引用
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    引用:
    x = 1
    msgbox("这是要引用值x显示的地方") & x’文本后引用
    MsgBox ("文件执行" & x & "日志已导出到")'这是中间引用
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    8、延时
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    延时:
    Application.Wait Now + TimeValue("00:00:1")'最低延时为1秒
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    9、日志窗口显示(全局文本)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    日志:
    public x '将x设置成全局日志内容
    sub 日志()
    日志.text = "这是日志类容"'固定日志(方法1)
    全局日志.text = x + "这是新日志类容"'x为之前日志类容(方法2)
    x = 全局日志.text
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    10、调用外部软件
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    调用外部软件:
    sub 调用外部软件()
    On Error Resume Next '忽略运行过程中可能出现的错误
    Set oShell = CreateObject("WSCript.shell")
    ret = oShell.Run(Application.ActiveWorkbook.Path & "\调用软件名称.exe " & " 传入的参数", 0, True) 
    Set oShell = Nothing
    end sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    11、按钮状态改变
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    按钮控件状态改变:
    '总窗口名称为该用户窗体最外层的背景窗口
    总窗口名称.Controls("按钮控件名称").Value = False'False为关
    总窗口名称.Controls("按钮控件名称").Value = True'True为开
    判断复选框是否被选中:
    if 总窗口名称.Controls("按钮控件名称").Value = True Then'True为选中
    '这里写被选中后要执行的代码
    else
    '这里写没被选中时要执行的代码
    End if
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    12、调用参数
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    调用参数:
    调用.text = "在对应窗口显示这一段字符"'在文本窗口显示文字(调用为控件名称)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    13、路径选择
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    路径选择:
    public x '将x设置成全局路径变量
    Private Sub 路径选择_Click()
    Set objFD = Application.FileDialog(msoFileDialogFolderPicker)
    With objFD
    If .Show = -1 Then
    ' 如果单击了确定按钮,则问将选取的路径保存在变量中
    x = .SelectedItems(1)
    End If
    End With
    Debug.Print x
    文件路径.Text = x'输出文件路径日志
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    14、日志导出
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    导出日志txt:
    public x '将x设置成全局路径变量
    public i '将i设置成全局日志变量
    Private Sub 日志导出_Click()
    Dim Fso, Fil
    日志导出.Caption = "日志已导出"'将按钮文字变成日志已导出
    日志导出.Enabled = False'日志导出按钮不可编辑
    Application.Wait Now + TimeValue("00:00:5")'按钮文字改变延时
    myPath1 = "" & x  '导出的日志所在的文件夹路径
    Set Fso = CreateObject("Scripting.FileSystemObject") '访问系统文件
    Set Fil = Fso.OpenTextFile(myPath2, 8, 1) '打开文本文件
        Fil.Write i '将i中所含所有字符写入文本
        Fil.WriteBlankLines (5) '换5行
    Fil.Close '关闭文本文档
    日志导出.Caption = "导出日志"'将日志导出按钮文字变成导出日志
    日志导出.Enabled = True'日志导出按钮不可编辑
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    15、excle文件格式转换
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Private Sub CSV转xlsx_Click() 'CSV转Xlsx
         Dim sDir As String
         Dim curdir As String
         curdir = "设置文件路径" '找到需要转换的文件路径
         sDir = Dir(curdir & "\*.csv")'显示文件列表
         While Len(sDir)'循环当前文件夹中文件个数
         Workbooks.Open FileName:=curdir & "\" & sDir'打开当前文件夹中符合条件的文件
         Dim temp As String'(这个定义需要在循环内部)
         temp = Left(sDir, Len(sDir) - 4)
         'Left函数从给定输入字符串的左侧返回指定数量的字符
         '语法:Left(String, Length)
         'String - 必需的参数。 输入从左侧返回指定数量的字符的字符串
         'Length - 必需的参数。 一个整数,指定要返回的字符数
         ActiveWorkbook.SaveAs FileName:=curdir & "\" & temp & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False'另存为 & temp & .xlsx类型的文件
            ActiveWorkbook.Save'保存当前显示文件
            ActiveWindow.Close'关闭当前显示文件
         sDir = Dir
         Wend
    End If
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    16、自动打开excle中用户窗体和隐藏VBA中excle表格(只显示用户窗体)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻
    样例

    自动打开excle中用户窗体和隐藏VBA中excle表格(只显示用户窗体)
    在Microsoft excle 对象中的ThisWorkbook中
    Private Sub WORKBOOK_OPEN()
    用户主窗体名称.Show'自动打开用户窗体
    Application.Visible = False '隐藏EXCEL主窗口
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    17、改变窗体外观(背景色,是否隐藏等)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    改变窗体外观(背景色,是否隐藏等)
    Private Sub 改变外观_Click() 
        窗体控件1.BackStyle = fmBackStyleOpaque '背景显示白色
        窗体控件2.BackStyle = fmBackStyleTransparent '背景显示为透明
        窗体控件1路径显示.BackStyle = fmBackStyleOpaque '背景显示白色
        窗体控件2路径显示.BackStyle = fmBackStyleTransparent '背景显示为透明
        窗体控件1路径显示.SpecialEffect = fmSpecialEffectSunken '路径显示背景框
        窗体控件2路径显示.SpecialEffect = fmSpecialEffectFlat '路径不显示背景框
        窗体控件1.Enabled = True '可以点击操作
        窗体控件2.Enabled = False '不可点击操作
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    18、更改Sheet名
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    更改Sheet名
    Private Sub 更改Sheet名_Click() 
    Dim sDir As String
    Dim curdir As String
    curdir = "" & sPath1 '找到需要转换的文件路径
    If Dir(curdir & "\*.csv") = "" Then'判断文件后缀
    sDir = Dir(curdir & "\*.xlsx")
    Else
    sDir = Dir(curdir & "\*.csv")
    End If
    While Len(sDir)'遍历文件后依次操作
    Workbooks.Open FileName:=curdir & "\" & sDir
    Dim temp As String
    temp = Left(sDir, Len(sDir) - 4)
    ActiveWorkbook.SaveAs FileName:=curdir & "\" & temp & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        Sheets(1).Name = "Sheet1" '修改文件表的Sheet名称为Sheet1
        ActiveWorkbook.Save
        ActiveWindow.Close
    sDir = Dir
    Wend
    End If
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    19、对文件夹中多个文件进行操作
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Dim sPath1 As String'定义的sPath1为全局变量
    Private Sub 多文件操作_Click()
            Dim aList() As String
                curdir1 = "" & sPath1 '文件夹目录
                sDir1 = Dir(curdir1 & "\*.xlsx") '不同后缀记得替换:(csv、xlsx、xlsm)
                '可以将sDir1增加判断对不同类型的文件进行操作。
            Do While sDir1 <> 'sDir1不等于空
            If sDir1 = "" Then '用来判断文件夹中是否还存在文件,如果没有文件则跳出循环
            MsgBox ("当前文件夹中没有符合筛选条件的文件,请确认路径是否正确")
            Exit Sub'退出当前函数
            End If
                    ReDim Preserve aList(0 To i) As String  '重定义数组大小
                    aList(i) = sDir1 '列表a
                    Workbooks.Open FileName:=curdir1 & "\" & aList(i) '打开文件
                    Application.WindowState = xlMaximized '窗口最大化
                    '在这里添加操作代码,例如增、删、改、查等
    				ActiveWorkbook.Save
                    ActiveWindow.Close
    		i = i + 1
    		sDir = Dir()'查找下一个目录
    		Loop
    	end Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    20、单元格格式设置(合并单元格)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

     Range("A1:B1").Select'单元格A1到B1
            With Selection
                .HorizontalAlignment = xlCenter '水平对齐
                .VerticalAlignment = xlCenter '垂直对齐
                .WrapText = False '文字换行(居中为True)
                .Orientation = 0 '方向(文本方向)
                .AddIndent = False '添加缩进
                .IndentLevel = 0 '缩进量(范围0-15)
                .ShrinkToFit = False '收缩到合适(自动调整)
                .ReadingOrder = xlContext '读写次序(从左往右写还是从右往左写)
                .MergeCells = False '合并单元格
            End With
            Selection.Merge'选择并合并
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    21、插入一行单元格
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

     Rows("1:1").Select'插入首行
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    22、在指定单元格内输入字符
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "这是需要输入的字符"
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    23、调整行高和列宽
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Rows("1:1").Select'调整第一行行高
    Selection.RowHeight = 90'行高90
    Columns("Z:Z").ColumnWidth = 7 '设置Z列单元格列宽为7
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    24、跳转到该列最后一个数值
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Range("A1").Select'从A1开始
    Selection.End(xlDown).Select '到有字符的最后一行,相当于按住ctlr+shift+↓
    x = Selection.Row() '获取当前选择框所在的行号
    y = Selection.Column() '获取当前选择框所在的列号
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    25、获取当前单元格所在的行号和列号
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    x = Selection.Row() '获取当前选择框所在的行号
    y = Selection.Column() '获取当前选择框所在的列号
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    26、格式刷(公式快速复用)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    该方法一般需要配合获取当前单元格所在的行号和列号使用
    先找有数据的单元格,使用Selection.End(xlDown).Select '到有字符的最后一行,相当于按住ctlr+shift+↓方法跳转到最后一行,然后使用x = Selection.Row() '获取当前选择框所在的行号, y = Selection.Column() '获取当前选择框所在的列号。然后让单元格在需要写入公式的最后一行中写入1(1没有任何意义,只是为了让该单元格有字符)其他需要同样操作的单元格类似,然后使用下面的代码,将该列所需要复用的公式进行复用。
    公式复用演示

    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=RC[-6]-RC[-4]" '以当前单元格(I2)为坐标,用负轴(-6)单元格减去(-4)单元格(从后往前数6个格子和4个格子)
    Range("J2").Select
    ActiveCell.FormulaR1C1 = "= RC[-7]-RC[-4]" '以当前单元格(J2)为坐标,用负轴(-7)单元格减去(-4)单元格(从后往前数7个格子和4个格子)
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "=RC[-8]-RC[-4]"
    Range("K3").Select
    Range("I2:K2").Select '选中I2,J2,K2单元格(三个连在一起全选)
    Range(Selection, Selection.End(xlDown)).Select '将上面的三个全选单元格选中后按住ctlr+shift+↓到有数值的最后一行(之前写的3个1)
    Selection.FillDown '按ctrl+D实现前面三个单元格同样的公式操作
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    27、筛选
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    添加筛选
                Range("A1:K1").Select '选中A1到K1
                Selection.AutoFilter '增加筛选功能
    筛选条件
                Columns("E:E").Select '选择E列
                '单项筛选
                ActiveSheet.Range("$A$1:$K$" & x).AutoFilter Field:=5, Criteria1:="=" '选择5列进行筛选,筛选值为空
                '多项筛选
                ActiveSheet.Range("$A$1:$K$" & x).AutoFilter Field:=5, Criteria1:="=null", _
                  Operator:=xlOr, Criteria2:="=" '选择第5列筛选值为null(Criteria1:="=null")和空白值(Criteria2:="=" )
                e = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 '返回筛选后的符合条件的个数
    
    取消筛选(全选显示)
     			Columns("G:G").Select
                ActiveSheet.Range("$A$1:$K$" & x).AutoFilter Field:=7 '全选第7列筛选(取消第7列的筛选)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    28、查找替换
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Cells.Replace What:="null", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False '查找并替换null值为空白(不写入任何字符)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    29、单元格颜色
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    去除颜色
                Columns("A:K").Select'选择A列到K列
                With Selection.Interior '循环将填充颜色去除
                    .Pattern = xlNone
                End With
    

    添加颜色
    Range(“L3:P3”).Select’L3到P3这些单元格添加绿色
    With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent6
    .TintAndShade = 0.799981688894314
    '07***为浅绿,0.599993896298105中浅绿,0.399975585192419浓绿
    .PatternTintAndShade = 0
    End With

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    30、单元格设置(字符居中)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    '这段代码是录制的,单元格格式参数如果懒得一一百度就使用录制
    Columns("A:K").Select
                Selection.Borders(xlDiagonalDown).LineStyle = xlNone'选择。边框(xl对角线向下)。线条样式 = xlNone
                Selection.Borders(xlDiagonalUp).LineStyle = xlNone'选择。边框(xl对角线向上)。线条样式 = xlNone
                With Selection.Borders(xlEdgeLeft)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeTop)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeRight)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlInsideVertical)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlInsideHorizontal)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection '循环被选中的单元格设置居中
                    .HorizontalAlignment = xlCenter’水平对齐
                    .VerticalAlignment = xlCenter‘垂直对齐
                End With
                HorizontalAlignment = xlCenter
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    31、在单元格内添加公式(SUMPRODUCT)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Range("AA3").Select
         ActiveCell.FormulaR1C1 = _
            "=SUMPRODUCT((R2C9:R" & x4 - dy & "C9>-1)*(R2C9:R" & x4 - dy & "C9<1))"
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    32、复制某个单元格
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Range("AB3").SelectTr
    Application.CutCopyMode = True
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    33、单元格引用
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Range("T5:AA5").Select '将表格T5至AA5
       ActiveCell.FormulaR1C1 = "=R" & x4 + 1 & "C[-12]" '上一行代码需要取值的单元格(该单元格值等于哪一个单元格值)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    34、单元格边框
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Selection.Merge '将表格加边框
                Range("L1:AS5").Select
                Selection.Borders(xlDiagonalDown).LineStyle = xlNone
                Selection.Borders(xlDiagonalUp).LineStyle = xlNone
                With Selection.Borders(xlEdgeLeft)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeTop)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlEdgeRight)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlInsideVertical)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
                With Selection.Borders(xlInsideHorizontal)
                    .LineStyle = xlContinuous
                    .ColorIndex = xlAutomatic
                    .TintAndShade = 0
                    .Weight = xlThin
                End With
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    35、复选框执行
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Private Sub Checkbox1_Click()
    if box1 = True and w1 = 1 Then'这里使用判断来控制复选框执行。用户只点击复选框时,复选框可以被勾选但不执行。必须要点击下面的执行按钮才能剩下执行。(这是折中方案)
    '这里写入该模块的功能代码
    end if
    end sub
    

    Private Sub Checkbox2_Click()
    if box2 = True and w2 = 2 Then'这里使用判断来控制复选框执行。用户只点击复选框时,复选框可以被勾选但不执行。必须要点击下面的执行按钮才能剩下执行。(这是折中方案)
    '这里写入该模块的功能代码
    end if
    end sub
    

    Private Sub Checkbox3_Click()
    if box3 = True and w3 = 3 Then'这里使用判断来控制复选框执行。用户只点击复选框时,复选框可以被勾选但不执行。必须要点击下面的执行按钮才能剩下执行。(这是折中方案)
    '这里写入该模块的功能代码
    end if
    end sub
    

    Pubilc w1, w2, w3'定义三个全局变量
    Private Sub 执行_Click() '
    j = "" '初始化为空
    For m = 1 To 3 '开始循环,有几个复选框选项则写几。该项目中有3个选项所以写3
        If 用户主窗体名称.Controls("Checkbox" & m).Value = True Then '如果复选框被选中(""&m)引号给的是复选框名字
        If m = 1 Then
        box1 = True
        End If
        If m = 2 Then
        box2 = True
        End If
        If m = 3 Then
        box3 = True
        End If
        If j = "" Then '并且字符串当时为空
        j = 用户主窗体名称.Controls("Checkbox" & m).Caption '就将复选框的名字即j存放到char中
        Else: j = j & "," & 用户主窗体名称.Controls("Checkbox" & m).Caption '如果字符串已经有个1或2或3了,那么将新的内容用逗号与字符串中已经有的值连接起来
        End If
        End If
        Next
        if box1 = True Then'如下注释1
         用户主窗体名称.Controls("Checkbox1").Value = False'将Checbox1变成去勾选状态
         w1 = 1'将w1赋值为1
         用户主窗体名称.Controls("Checkbox1").Value = True'将Checbox1变成勾选状态
         w1 = 0'将w1赋值为1
         end if
         '注释1:这里之所以这样写是没有找到勾选复选框时不执行,只有点执行时才会执行的办法,所以选择了
         '折中先判断复选框是否被勾选了,如果勾选了将下面的box置为True。然后在所有的条件判断完成后再
         '将已被勾选的窗体去勾选,由于不满足执行条件,该控件下的代码不会执行,紧接着将w赋值后再将窗体
         '勾选,这样控件执行的条件满足后就能够正常执行控件下面的代码。而去勾选和再勾选的过程因为时间极
         '短用户基本无感知。也可以不用该方法直接把代码放在执行模块下面直接执行。(技术有限,勿喷)
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    36、取消(退出软件)
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Unload Me'退出软件
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    37、If Else
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    sub ifelse()
    i = 0
    If i = 0 Then
    i = 1'这里编写需要执行的代码
    ElseIf i = 1 Then
    i = 2'这里编写需要执行的代码
    Else
    i = 0'这里编写需要执行的代码
    End If
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    38、For Next
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    Sub forNext()
    Dim i%, j%
    For i = 1 To 10
    j = j + i
    Next
    MsgBox j
    End Sub
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    39、While wend
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    i = 0
    while i < 10
    i = i + (i+1)
    wend
    

    ┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳
    40、Do Loop
    ┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻

    当条件成立,开始循环:
    sub Do()
    Dim i%
    Do While i<3
        i = i + 1
        MsgBox i
    Loop
    End Sub
    直到条件成立,跳出循环:
    sub Dountil()
    i  = 0
    Do Until i > 10:
    	i = i+1
    Loop
    msgbox("")  & i
    

    														  附     录:
    

    不同Sub含义:
    Public 表示 Sub 过程可被所有其他地方引用。和Sub性质一致,等价于Sub。
    Private 表示 Sub 过程只能被当前页或者窗体引用,所以只能在本模块内部可以访问。


    变量或字符串类型:
    Variant:变体型变量(类型可变),能够表除了定长string数据和用户自定义类型外可以包含任何种类的 数据,也可以包含empty、error、nothing、null等特殊值。使用该类型定义会导致代码执行时间变长。非必要时不要用。
    String:字符串类型。
    integer:整数(范围:-32768~32768)
    integer1:初始化是一个Variant类型的空值,随着对其的操作变成任意类型。
    integer2:会被正常的初始化为0。
    Dim integer1 as interger,integer2 as integer’这样1和2都为空值
    Long:长整型(范围:-214743648 ~ 214743648)
    Single 和 Double:单精度浮点数(Single) 和双精度浮点数(Double)
    Currency:货币型
    Byte:字节型
    Boolean:布尔型(表示逻辑值True或False)
    Date:日期(范围100年 ~ 9999年,0:00:00 ~ 23:59:59)
    object:对象型。利用set语句,声明为对象型的变量可以赋值为任何对象引用
    枚举型:

    Public Enum words 'Pubilc(公共)或Private(私有)
        中国
        英国
        美国
        法国
    End Enum
    Sub ad()
    	Dim from As words
    	from = 英国
    	from = 法国
    End Sub
    

    枚举型
    用户自定义类型:

    Type i
    i as Double
    End Type
    

    展开全文
    hyd_csdn 2020-06-05 14:56:21
  • 一、窗体的基本操作 1、窗体插入 2、运行窗体 要么直接在窗体的界面点击运行按钮 要么用代码调用窗体的 show 方法 3、关闭窗体 代码关闭是 unload testform方法 4、显示设置 窗体标题:caption 背景色:...

    基础部分

    一、窗体的基本操作

    1、窗体插入

    2、运行窗体

    • 要么直接在窗体的界面点击运行按钮
    • 要么用代码调用窗体的 show 方法

    3、关闭窗体

    • 代码关闭是 unload testform方法

    4、显示设置

    • 窗体标题:caption
    • 背景色:backcolor
    • 背景图片:picture,代码里面可以使用loadpicture()方法进行加载

    属性窗口里面可以查看

    5、位置大小

    • top、left、height、width
    • startupPosition 启动显示位置

    6、显示行为

    • showModal 的值就是 true 或者false 可以设置显示窗体的时候是否可以进行其他的操作

    7、删除窗体

    二、控件的基本操作

    1、控件插入

    在这里插入图片描述

    2、删除

    3、对齐

    • 菜单栏格式里面
    • 可以选中多个控件进行布局的操作

    4、tab键相关

    在这里插入图片描述

    5、控件循环

    • 所有控件集合 controls
    • controls(index) controls("name")可以选定具体的控件

    6、控件类型判断

    • typename 判断控件类型
    Private Sub UserForm_Click()
        For i = 0 To Controls.Count - 1
            If TypeName(Controls(i)) = "TextBox" Then
                MsgBox Controls(i).Value
            End If
        Next i
    End Sub
    

    窗体事件

    • 和前面讲的工作表事件等是一样的,只需要特别注意一下键盘事件和鼠标事件
      在这里插入图片描述

    一、键盘事件

    1、keydown

    • keyCode 唯一,shift 参数不同的值分别代表ctrl、shift、alt
    Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ''''''''''''''code
    End Sub
    

    2、keyup

    Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ''''''''''''''code
    End Sub
    

    3、keypress

    Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ''''''''''''''code
    End Sub
    

    keydown keypress 都是按键按下,但是一般使用keydown,功能更加强大

    二、鼠标事件

    1、mousedown

    • button不同的值分别代表左右和中键
    • shift 也是和上面一样
    • x 和 y 就是鼠标的位置坐标
    Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    End Sub
    

    2、mouseup

    Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    End Sub
    

    3、mousemove

    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    End Sub
    

    vba一行的代码很长的话可以使用空格加下划线然后enter的方式进行换行


    标签和按钮

    一、按钮

    1、快捷键设置

    • 就是设置 Accelerator 属性,然后通过 alt 键加设置的键就可以激活按钮的 click 事件

    2、enter 和 esc 响应

    • 就是 default 和 cancel 属性都设置为true,然后窗体显示并且焦点在按钮上的时候按 esc 和 enter 就会激发按钮的 click 事件

    二、标签

    • label 标签基本就是用来显示一定的提示内容
    • 具体的属性使用的时候可以通过属性窗口进行摸索

    文字框

    • maxLength 和 autoTab 属性可以实现输入多少个字符自动切换
    • 基本的事件也是可以通过名字完全看懂的,不多说
    • 其他的使用基本上也是琢磨属性窗口的内容

    列表和组合框

    • 这两个的用法基本是一致的,就是下拉框比一般的列表更加节省空间而已
    • 选项的填充可以使用 additem 方法,可以用数组赋值给 list 属性,可以直接引用单元格区域赋值到RowSource 属性
    • 选项的移除使用 removeitem 方法

    一、combobox

    • listIndex 代表当前选中项的索引:ComboBox1.List(ComboBox1.ListIndex, 2)
    • list 可以获取到具体的某个行列的值,第一个参数是行数,后一个是列数

    二、listbox

    • multiselect 设置是否可以选中多行
    • selected 方法可以判断选项是否选中
    Private Sub ComboBox1_Change()
        Label1.Caption = "选中项的返回值是:" & ComboBox1.Value
    End Sub
    
    Private Sub CommandButton1_Click()
        Dim arr
        arr = Sheets(1).Range("a8:e15")
        ComboBox1.ColumnCount = 5 '设置下拉框显示的列数
        ComboBox1.BoundColumn = 3 '设置选中返回的列的数据
        ComboBox1.TextColumn = 3 '设置选中下拉框的显示列
        ComboBox1.List = arr
    End Sub
    Private Sub CommandButton2_Click()
        ListBox1.RowSource = "Sheet1!A8:E12"
        ListBox1.ColumnCount = 5
        ListBox1.ColumnHeads = True
        ListBox1.BoundColumn = 3
        ListBox1.TextColumn = 2
    End Sub
    
    Private Sub CommandButton3_Click()
        MsgBox ComboBox1.List(ComboBox1.ListIndex, 2)
    End Sub
    
    Private Sub CommandButton4_Click()
        For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) Then
                MsgBox ListBox1.List(i, 2)
            End If
        Next i
    End Sub
    

    在这里插入图片描述


    单选、复选、框架、多页

    一、单选、复选、框架

    • 单选和复选必须要通过框架才能成组
    • 不然对于单选框一个窗体的话只能有一个被选中
    Private Sub Frame1_Click()
        If 男.Value Then sr = "you sex:" & 男.Caption
        If 女.Value Then sr = "you sex:" & 女.Caption
        If 中.Value Then sr = "you sex:" & 中.Caption
        TextBox1.Value = sr
    End Sub
    
    Private Sub Frame2_Click()
        Dim sr As String
        sr = "爱好:"
        If 唱歌.Value Then sr = sr & 唱歌.Caption & Chr(10)
        If 跳舞.Value Then sr = sr & 跳舞.Caption & Chr(10)
        If 篮球.Value Then sr = sr & 篮球.Caption & Chr(10)
        TextBox2.Value = sr    
    End Sub
    

    在这里插入图片描述

    二、微调、滚动调节

    • 二者基本的使用都是一致的
    • 都包含 max 、min最大最小值属性
    • 滚动条支持步长 smallChange 和 largeChange 属性,微调只支持前者
    • 对滚动条来说 smallChange 设置的是点击箭头按钮的该表量,largeChange 是设置直接点击滚动条的改变量
    Private Sub ScrollBar1_Change()
        ScrollBar1.SmallChange = 2
        ScrollBar1.LargeChange = 10
        ScrollBar1.Min = 10
        ScrollBar1.Max = 80
        TextBox4.Value = ScrollBar1.Value
    End Sub
    
    Private Sub SpinButton1_Change()
        SpinButton1.SmallChange = 2
        TextBox3.Value = SpinButton1.Value
    End Sub
    

    在这里插入图片描述

    vba 中的Me变量代表代码所在的对象,如果是工作表代码就代表该工作表,如果是窗体代码就代表窗体

    三、多页

    1、图片控件

    Private Sub Image1_Click()
        f = Dir("C:\Users\user\Desktop\*.jpg")
        Do
            ListBox1.AddItem f
            f = Dir
        Loop While (Len(f) <> 0)
    End Sub
    Private Sub ListBox1_Click()
        Dim path As String
        path = "C:\Users\user\Desktop\" & ListBox1.Value
        Image1.Picture = LoadPicture(path)
    End Sub
    

    在这里插入图片描述

    2、多页

    • 选项卡的索引是从 0 开始的
    • style 属性设置为 2 可以隐藏上面的 tab 卡
    Private Sub Label1_Click()
        MultiPage1.Style = 2
    End Sub
    
    Private Sub MultiPage1_Change()
        MsgBox MultiPage1.Value
        MultiPage1.Value = 3
    End Sub
    

    ListView控件


    TreeView控件


    日期和进度条(略)


    综合实例


    命令栏操作(略)
    功能区操作(略)
    代码操作代码(略)

    展开全文
    stanwuc 2020-04-29 16:36:58
  • 5星
    9KB eightxuanfeng 2013-06-27 10:53:52
  • alexbnlee 2011-10-28 11:03:07
  • weixin_29846499 2021-01-13 00:57:13
  • weixin_29040367 2021-08-13 09:29:50
  • weixin_33691817 2019-02-27 15:22:00
  • 257KB scz467 2013-03-19 17:34:16
  • weixin_29628479 2021-01-26 13:01:07
  • weixin_39716044 2020-11-22 21:49:21
  • weixin_39633383 2017-11-23 17:28:37
  • weixin_30244681 2017-10-10 23:41:00
  • qq_16034997 2018-12-07 10:50:59
  • Rubicon_Chen 2020-09-18 15:22:55
  • weixin_30439067 2019-07-21 02:14:43
  • weixin_39737317 2020-12-22 15:16:45
  • Di77HaoWenMing 2020-08-17 22:09:45
  • 3星
    19.94MB wangjinnangz 2014-12-21 16:39:28
  • dockerVBA 2016-06-25 09:16:00
  • andylin02 2007-08-04 13:20:00
  • weixin_39702400 2020-12-10 10:24:15
  • weixin_40514373 2020-09-03 14:25:27
  • Gordennizaicunzai 2017-06-25 23:05:10
  • ivy8228 2011-04-13 01:12:00
  • ngbshzhn 2021-11-24 15:53:02
  • Rubicon_Chen 2020-08-11 22:43:20

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,017
精华内容 406
关键字:

vba获取用户通过窗体输入的值