返回列表 上一主題 發帖

各位大大,請問UserForm表單如何讀取子表單

回復 5# 准提部林


    謝謝 wsx1130前輩發表此主題與範例
謝謝 准提部林前輩指導
學習自訂表單是另一個範疇的學問,謝謝前輩

按按鈕 顯示UserForm1:

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'↑MouseDown、MouseUp 事件
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/mousedown-mouseup-events
'宣告變數:Button是短整數,Shift是短整數,X是單精度浮點數,Y是單精度浮點數

UserForm2.Show
'↑顯示名稱為 UserForm2 自訂表單
TextBox1.Text = xDate
'↑輸入窗文字顯示 xDate變數回傳的值
End Sub


點入UserForm1輸入窗,跳出當月月曆 UserForm2
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

Initialize 事件

USERFORM2_月份下拉清單:


USERFORM2_年份下拉清單:


Option Explicit
Dim i&
'↑宣告模組變數:i是長整數
Private Sub UserForm_Initialize()
'↑Initialize 事件,會在載入物件之後但顯示之前發生。
CB_Yr = Year(Date)
'↑令CB_Yr下拉式清單方塊顯示 以今天日期判斷出的 4碼西元年分
For i = 1 To 12
'↑設順迴圈!i從1到12
    CB_Mth.AddItem Application.Text(i, "[DBNum1]d月")
    '↑令CB_Mth下拉式清單方塊加入 迴圈數轉小寫月份文字字串的清單項目
    'Text()會傳回指定之物件的格式化文字。 唯讀的 String
    '[DBNum1]:中文小寫 ,[DBNum2]:中文大寫,大小寫要自己試才知道

Next i
For i = -20 To 20
'↑設順迴圈!i從-20到20
    CB_Yr.AddItem CB_Yr + i
    '↑令CB_Yr下拉式清單方塊加入 迴圈數加上CB_Yr值產生的41個年份文字字串的清單項目
Next i
'雖然增加了多個清單項目,但不影響一開始的顯示(以今天日期的年份)
CB_Mth = Application.Text(Date, "[DBNum1]m月")
'↑令CB_Mth下拉式清單方塊顯示 以今天日期判斷出的 小寫月份文字字串
Call Build_Calendar
'↑執行 Build_Calendar副程式
End Sub

Private Sub CB_Mth_Change()
'↑CB_Mth下拉式清單方塊_Change 事件
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/change-event

If UserForm2.Caption Like "*####*" Then Call Build_Calendar
'↑如果 UserForm2自訂表單 標題窗顯示文字 包含4個連續的數字!就執行 Build_Calendar副程式
End Sub

Private Sub CB_Yr_Change()
'↑CB_Yr下拉式清單方塊_Change 事件
If UserForm2.Caption Like "*####*" Then Call Build_Calendar
'↑如果 UserForm2自訂表單 標題窗顯示文字 包含4個連續的數字!就執行 Build_Calendar副程式
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 Andy2483 於 2022-12-27 11:10 編輯

再次謝謝 准提部林前輩指導

按鈕註解:


按按鈕後結果:


Private Sub Build_Calendar()
Dim Y0 As Date, Y1 As Date, Y2 As Date, Y3 As Date, Fb, Fc, Fu, Fs, Bc
'↑宣告變數:(Y0,Y1,Y2,Y3)是日期變數,其他是通用型變數
Y1 = DateSerial(CB_Yr, CB_Mth.ListIndex + 1, 1)
'↑令Y1這日期變數是 DateSerial(yyyy,m,d) 組合出想要的西元年/月/日(yyyy/m/d)(月初日)
'CB_Mth.ListIndex + 1 的意思用猜的:CB_Mth下拉式清單方塊顯示值所在的清單索引位置,而其清單索引是0~11 (猜的!)


'DateSerial 函數
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/dateserial-function

'ListIndex 屬性,識別 ListBox 或 ComboBox 中目前選取的專案。
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/listindex-property

Y2 = DateAdd("m", 1, Y1) - 1
'↑令Y2這日期變數是 DateAdd(m換算的天數:28、29、30或31,1m,Y1變數日期為基準日)(yyyy/m/d)(月尾日)
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/dateadd-function
Y0 = Y1 - (Y1 - 1) Mod 7
'↑令Y0是 [Y1變數(月初日) -  Y1變數(月初日)的前一天 除7 的餘數(先除出餘數再相減)] 的日期
'這是要算月曆的第一天
For i = 1 To 42
'↑設順迴圈!i從1到42
    Y3 = Y0 + i - 1
    '↑令Y3這日期變數是 月曆的第一天+i迴圈數 -1
    Fb = True
    '↑令Fb這通用變數是 布林值 True
    Fs = 12
    '↑令Fs這通用變數是 12
    Fu = False
    '↑令Fu這通用變數是 布林值 False
    Fc = &H80000012
    '↑令Fu這通用變數是 Windows 按鈕上的文字顏色代號
    '系統顏色常量
    '搜尋 VBA 系統顏色常量

    Bc = &H8000000F
    '↑令Bc是 BackColor 屬性的值設定為 Windows 表單中的預設值
    'https://learn.microsoft.com/zh-tw/office/vba/api/visio.viewer.backcolor
    If Y3 Mod 7 < 2 Then Fc = &HFF
    '↑如果Y3日期變數除7後的餘數 <2 ,就令Fu這通用變數是 255
    'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/hex-function

    If Y3 < Y1 Or Y3 > Y2 Then
    '↑如果Y3日期變數 < Y1日期變數(月初日) 或 Y3日期變數 >Y1日期變數(月尾日),
       Fb = False
       '↑令Fb這通用變數是 布林值 False
       Fu = True
       '↑令Fu這通用變數是 布林值 True
       Fs = 11
       '↑令Fs這通用變數是 11
       Bc = &H808080
       '↑令Bc這通用變數是 Windows 系統顏色代號(灰色的)
    End If
    With UserForm2("D" & i)
    '↑以下是關於UserForm2 42個日期按鈕的程序
         .Font.Bold = Fb '粗體
         .Font.Size = Fs '字體大小
         .Font.Underline = Fu '非本月-加底線
         .ForeColor = Fc '字體顏色
         .BackColor = Bc '背景顏色
         .Caption = Day(Y3)
         '↑令按鈕顯示文字是 Day()擷取Y3日期變數 日數字
         .ControlTipText = Format(Y3, "yyyy/mm/dd")
         '↑令按鈕註解是 Y3日期變數以 yyyy/mm/dd 顯示
         'ControlTipText 屬性
         'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/controltiptext-property

    End With
Next i
UserForm2.Caption = " " & CB_Yr.Value & "年" & CB_Mth.Text
'↑令UserForm2標題是 空白字元連接 CB_Yr下拉式清單方塊值連接 "年" ,最後連接 CB_Mth下拉式清單方塊值
End Sub

Sub 相反的_十六進位()
MsgBox &HFF
MsgBox &HA
MsgBox &HAA
End Sub

Private Sub D1_Click()
    xDate = D1.ControlTipText
    '↑這裡xDate = D2.ControlTipText 需要改為,xDate = D1.ControlTipText
    Unload Me
End Sub

~~~

Private Sub D42_Click()
    xDate = D42.ControlTipText
    Unload Me
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題