Han991212 / vba_process_bar

vba_process_bar
0 stars 0 forks source link

用户交互界面设计 #2

Open Han991212 opened 1 year ago

Han991212 commented 1 year ago
Option Explicit

Dim btnClicked As Boolean ' 用于标记按钮是否已点击

Sub ShowCustomForm()
    Dim frm As Object ' 表单对象
    Dim tbInput As Object ' 输入框对象
    Dim dtPickerStart As Object ' 开始时间选择框对象
    Dim dtPickerEnd As Object ' 结束时间选择框对象
    Dim btnConfirm As Object ' 确认按钮对象
    Dim btnCancel As Object ' 取消按钮对象

    ' 创建表单对象
    Set frm = ThisWorkbook.VBProject.VBComponents.Add(3)

    ' 设置表单属性
    With frm
        .Properties("Caption") = "自定义窗体"
        .Properties("Width") = 300
        .Properties("Height") = 200
    End With

    ' 创建输入框
    Set tbInput = frm.Designer.Controls.Add("Forms.TextBox.1")
    With tbInput
        .Name = "tbInput"
        .Left = 10
        .Top = 10
        .Width = 280
    End With

    ' 创建开始时间选择框
    Set dtPickerStart = frm.Designer.Controls.Add("MSComCtl2.DTPicker")
    With dtPickerStart
        .Name = "dtPickerStart"
        .Left = 10
        .Top = 40
        .Width = 135
        .Format = 3 ' 格式为日期和时间
    End With

    ' 创建结束时间选择框
    Set dtPickerEnd = frm.Designer.Controls.Add("MSComCtl2.DTPicker")
    With dtPickerEnd
        .Name = "dtPickerEnd"
        .Left = 155
        .Top = 40
        .Width = 135
        .Format = 3 ' 格式为日期和时间
    End With

    ' 创建确认按钮
    Set btnConfirm = frm.Designer.Controls.Add("Forms.CommandButton.1")
    With btnConfirm
        .Name = "btnConfirm"
        .Caption = "确认"
        .Left = 10
        .Top = 80
        .Width = 280
    End With

    ' 创建取消按钮
    Set btnCancel = frm.Designer.Controls.Add("Forms.CommandButton.1")
    With btnCancel
        .Name = "btnCancel"
        .Caption = "取消"
        .Left = 10
        .Top = 120
        .Width = 280
    End With

    ' 显示表单
    frm.Designer.Show

    ' 清除表单对象
    ThisWorkbook.VBProject.VBComponents.Remove frm

    ' 检查按钮是否已点击
    If btnClicked = True Then
        ' 在这里执行确认操作
        MsgBox "确认操作已执行。"
    Else
        ' 在这里执行取消操作
        MsgBox "取消操作已执行。"
    End If
End Sub

Sub btnConfirm_Click()
    btnClicked = True ' 标记按钮已点击
    Unload UserForm1 ' 关闭表单
End Sub

Sub btnCancel_Click()
    btnClicked = False ' 标记按钮未点击
    Unload UserForm1 ' 关闭表单
End Sub
Han991212 commented 1 year ago
Sub ReadSheetsFromExcelFile()
    Dim filePath As String
    Dim targetWorkbook As Workbook
    Dim sourceWorkbook As Workbook
    Dim targetSheet1 As Worksheet
    Dim targetSheet2 As Worksheet
    Dim sourceSheet1 As Worksheet
    Dim sourceSheet2 As Worksheet

    ' 设置文件路径
    filePath = "C:\Path\To\Your\File.xlsx" ' 将文件路径替换为实际的路径

    ' 打开目标工作簿
    Set targetWorkbook = ThisWorkbook ' 将目标工作簿替换为你的目标工作簿

    ' 打开源工作簿
    Set sourceWorkbook = Workbooks.Open(filePath)

    ' 获取源工作簿中的第一个和第二个工作表
    Set sourceSheet1 = sourceWorkbook.Sheets(1)
    Set sourceSheet2 = sourceWorkbook.Sheets(2)

    ' 获取目标工作簿中的目标工作表
    Set targetSheet1 = targetWorkbook.Sheets("HZH") ' 将 "HZH" 替换为你的目标工作表名称
    Set targetSheet2 = targetWorkbook.Sheets("ZLJ") ' 将 "ZLJ" 替换为你的目标工作表名称

    ' 将源工作表的数据复制到目标工作表
    sourceSheet1.UsedRange.Copy targetSheet1.Range("A1")
    sourceSheet2.UsedRange.Copy targetSheet2.Range("A1")

    ' 关闭源工作簿,不保存更改
    sourceWorkbook.Close SaveChanges:=False

    ' 清除对象引用
    Set sourceSheet1 = Nothing
    Set sourceSheet2 = Nothing
    Set sourceWorkbook = Nothing
    Set targetSheet1 = Nothing
    Set targetSheet2 = Nothing
    Set targetWorkbook = Nothing
End Sub
Han991212 commented 1 year ago
Sub DownloadExcelFromWebsite()
    ' 创建 InternetExplorer 对象
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")

    ' 打开网页
    IE.Visible = True
    IE.navigate "https://www.example.com" ' 将网址替换为实际的网站链接

    ' 等待网页加载完成
    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop

    ' 查找并填写用户名和密码
    Dim userName As Object
    Dim password As Object
    Set userName = IE.document.getElementById("username") ' 将 "username" 替换为实际的用户名输入框的 ID
    Set password = IE.document.getElementById("password") ' 将 "password" 替换为实际的密码输入框的 ID
    userName.Value = "your_username" ' 将 "your_username" 替换为实际的用户名
    password.Value = "your_password" ' 将 "your_password" 替换为实际的密码

    ' 提交表单(如果需要)
    ' IE.document.forms(0).submit

    ' 等待登录完成和页面加载
    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop

    ' 查找并点击下载链接
    Dim downloadLink As Object
    Set downloadLink = IE.document.getElementById("download-link") ' 将 "download-link" 替换为实际的下载链接的 ID
    downloadLink.Click

    ' 等待下载完成
    ' 请根据实际情况等待下载完成,例如等待文件保存对话框出现或下载完成的提示信息出现

    ' 关闭 InternetExplorer
    IE.Quit

    ' 清除对象引用
    Set downloadLink = Nothing
    Set password = Nothing
    Set userName = Nothing
    Set IE = Nothing
End Sub
Han991212 commented 1 year ago

「IE.Busy」と「IE.readyState <> 4」は、Internet Explorer オブジェクトの読み込み状態を確認するためのプロパティです。

「IE.Busy」プロパティは、Internet Explorer がビジー状態(忙しい状態)かどうかを判断するために使用されます。Internet Explorer がページを読み込んでいるか、他の操作を実行中の場合、値は True となります。Internet Explorer がビジーでない場合は、値は False となります。

「IE.readyState」プロパティは、Internet Explorer の準備状態を判断するために使用されます。以下の値が存在します:

0: 初期化されていない - 「navigate」メソッドがまだ呼び出されていません。 1: 読み込み中 - 「navigate」メソッドが呼び出され、読み込みが完了していません。 2: 読み込み完了 - 読み込みは完了しましたが、一部のコンテンツがまだ読み込まれています。 3: インタラクティブ - 読み込みが完了し、ページとの対話が可能です。 4: 完全に読み込まれました - ページが完全に読み込まれ、すべてのコンテンツが使用可能です。 「Do While IE.Busy Or IE.readyState <> 4」は、Internet Explorer の完全な読み込みと対話可能な状態になるまでループするための条件です。

具体的には、このコードは、IE.Busy の値が False(つまり、Internet Explorer がビジーでなくなる)かつ IE.readyState の値が 4(つまり、ページが完全に読み込まれ、対話可能な状態になる)まで、指定したコードブロックを繰り返し実行します。「DoEvents」ステートメントは、システムが他のイベントを処理できるようにするために使用され、プログラムの応答性を保ちます。

このような待機プロセスにより、後続の操作を実行する前に、ページが完全に読み込まれ、対話可能な状態であることが保証されます。