標題:
[發問]
餘額+textbox格式
[打印本頁]
作者:
lifedidi
時間:
2013-4-25 11:30
標題:
餘額+textbox格式
大大好:
1. 小弟有三個SHEET,要對照資料(時間格式)再USERFORM裡的TEXTBOX裡,
遇到幾個困難,請看附件檔。
2. 在textbox要KEY入時間(格式為[hh]:mm)請問該怎麼設定呢?
舉例 43:52(43小時:52分);結果key入後變1.82777777777778
[attach]14779[/attach]
作者:
GBKEE
時間:
2013-4-25 17:15
回復
1#
lifedidi
Private Sub UserForm_Initialize() '員工額度表單
名稱制定
End Sub
Private Sub ComboBox1_Change()
With Sheets("Sheet1")
.AutoFilterMode = False
.Range("A1").AutoFilter FIELD:=3, Criteria1:=ComboBox1
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
End With
End Sub
Private Sub CommandButton1_Click() '查詢鈕
If ComboBox1.ListIndex = -1 Then Exit Sub
Dim t(1 To 2) As Date, Rng As Range
Set Rng = Sheet2.[B:B].Find(ComboBox1, LookAT:=xlWhole)
If Rng Is Nothing Then
MsgBox "名稱錯誤", vbCritical + vbOKOnly, ""
Exit Sub
End If
t(1) = Rng.Offset(, 1)
TextBox1 = Application.Text(t(1), "[hh]:mm")
t(2) = Application.Sum(Sheet1.Range("D:D").SpecialCells(xlCellTypeVisible))
TextBox2 = Application.Text(t(2), "[hh]:mm")
With TextBox3
.ForeColor = vbBlack
.Text = Application.Text(IIf(t(1) > t(2), t(1) - t(2), t(2) - t(1)), "[hh]:mm")
If t(2) > t(1) Then
.Text = "-" & .Text
.ForeColor = vbRed
End If
End With
End Sub
Private Sub 名稱制定()
With Sheets("SHEET1")
.Cells(1, .Columns.Count).EntireColumn.Clear
.[A1].CurrentRegion.Columns(3).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Cells(1, .Columns.Count), Unique:=True
ComboBox1.List = .Range(.Cells(2, .Columns.Count), .Cells(2, .Columns.Count).End(xlDown)).Value
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("Sheet1").AutoFilterMode = False
End Sub
複製代碼
Private Sub UserForm_Initialize() '工具額度表單
名稱制定
End Sub
Private Sub ComboBox1_Change()
With Sheets("Sheet1")
.AutoFilterMode = False
.Range("A1").AutoFilter FIELD:=2, Criteria1:=ComboBox1
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
End With
End Sub
Private Sub CommandButton1_Click() '查詢鈕
If ComboBox1.ListIndex = -1 Then Exit Sub
Dim t(1 To 2) As Date, Rng As Range
With Sheet2
Set Rng = .[A:A].Find(ComboBox1, LookAT:=xlWhole)
If Rng Is Nothing Then
MsgBox "名稱錯誤", vbCritical + vbOKOnly, ""
Exit Sub
End If
If Rng.End(xlDown).Row <> .Rows.Count Then
Set Rng = .Range(Rng.Offset(, 2), Rng.End(xlDown).Offset(-1, 2))
Else
Set Rng = .Range(Rng.Offset(, 2), Rng.Offset(, 2).End(xlDown))
End If
End With
t(1) = Application.Sum(Rng)
TextBox1 = Application.Text(t(1), "[hh]:mm")
t(2) = Application.Sum(Sheet1.Range("D:D").SpecialCells(xlCellTypeVisible))
TextBox2 = Application.Text(t(2), "[hh]:mm")
With TextBox3
.ForeColor = vbBlack
.Text = Application.Text(IIf(t(1) > t(2), t(1) - t(2), t(2) - t(1)), "[hh]:mm")
If t(2) > t(1) Then
.Text = "-" & .Text
.ForeColor = vbRed
End If
End With
End Sub
Private Sub 名稱制定()
Dim E As Range
With Sheets("Sheet2").[A:A] '汽,機 額度
For Each E In .SpecialCells(xlCellTypeConstants)
ComboBox1.AddItem E
Next
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("Sheet1").AutoFilterMode = False
End Sub
複製代碼
作者:
lifedidi
時間:
2013-4-26 09:27
Dear GBKEE 大大:
感謝你的幫忙!!
請問一下Q2的問題
在userform裡的textbox要顯示[hh]:mm該怎麼表示呢?
【我有對應到儲存格的資料】
舉例:
儲存格D1資料為【500:00】[hh]:mm
在userform裡的textbox要顯示【500:00】
這樣的格式該如何編寫呢?
3q~
作者:
Hsieh
時間:
2013-4-26 10:41
本帖最後由 Hsieh 於 2013-4-26 11:00 編輯
回復
3#
lifedidi
Private Sub CommandButton1_Click() '員工額度查詢鈕
Dim a As Range, hh#
With Sheets("SHEET3")
hh = Application.SumIf(.[C:C], ComboBox1, .[D:D])
End With
TextBox2.Value = Application.Text(hh, "[hh]:mm")
Set a = Sheet2.[B:B].Find(ComboBox1).Offset(, 1)
TextBox1 = a.Text
TextBox3.Value = Application.Text(a - hh, "[hh]:mm") '剩餘額度
End Sub
複製代碼
作者:
GBKEE
時間:
2013-4-26 13:57
回復
3#
lifedidi
TextBox1 = ActiveSheet.Range("D1").Text
複製代碼
作者:
lifedidi
時間:
2013-4-26 14:00
回復
4#
Hsieh
大大你好:
請參考附件檔,
如同附件TEXTBOX4對應儲存格E欄的資料,
但是在USERFORM顯示出來卻是數值,
如何能讓他為時間呢?
[attach]14793[/attach]
作者:
GBKEE
時間:
2013-4-26 14:27
回復
6#
lifedidi
Dim d1 As Object, d2 As Object
Dim Rng As Range
Private Sub ListBox1_Change()
If ListBox1.Text = "" Then Exit Sub
arr = Filter(d2.keys, ListBox1.Value)
ListBox2.Clear
For i = 0 To UBound(arr)
ListBox2.AddItem Replace(arr(i), ListBox1.Value & "-", "")
Next i
For i = 2 To 4
UserForm1.Controls("TextBox" & i).Value = ""
Next i
End Sub
Private Sub ListBox2_Change()
If ListBox2.Text = "" Then Exit Sub
R = d2(ListBox1.Value & "-" & ListBox2.Value)
'ec = (Rng, 1)
For c = 3 To Rng.Rows.Count
UserForm1.Controls("TextBox" & c - 1).Value = Rng(R, c).Text
Next c
End Sub
Private Sub UserForm_Initialize()
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
With Sheets("sheet1")
Set Rng = .[A1].CurrentRegion
End With
For R = 2 To Rng.Rows.Count
mycase = "-" & Rng(R, 2)
If Trim(Rng(R, 1)) <> "" Then
myname = Trim(Rng(R, 1))
br = R
d1(myname) = R & "-" & R
Else
d1(myname) = br & "-" & R
End If
d2(myname & mycase) = R
Next R
UserForm1.ListBox1.List = d1.keys
End Sub
複製代碼
作者:
lifedidi
時間:
2013-4-26 15:25
請問這兩個資料的變換,影響了哪些呢?
我以為是在textbox後面加個fromate(xxx)之類的簡單的程式碼=.=
作者:
lifedidi
時間:
2013-4-26 15:51
本帖最後由 lifedidi 於 2013-4-26 15:53 編輯
大大好!
我在Private Sub ListBox2_Change()最後面加上以下編碼
yy= TextBox4.Value
If TextBox4.Value <> "" Then TextBox4.Value = Format(yy, "hhh:mm")
結果18:00變成1818:00
假如改成500:15變成2020:15
很像是超過24h會進位的樣子,請問如何不進位呢?
作者:
GBKEE
時間:
2013-4-26 16:14
回復
8#
lifedidi
請詳看參考vba的說明
Format 函數則使用不同於 NumberFormat 和 NumberFormatLocal 屬性的格式代碼字串。
NumberFormatLocal 屬性。
套用至 Style 物件時用 NumberFormatLocal 屬性。
複製代碼
NumberFormat 屬性。
套用至 DataLabel、DataLabels、PivotField、Style 及 TickLabels 物件時用 NumberFormat 屬性。
複製代碼
Format 函數
傳回一 Variant (String),含有一個根據格式運算式來格式化的運算式。
複製代碼
作者:
lifedidi
時間:
2013-4-26 16:30
哦~有點了解了!
所以還是要照大大的方式去RUN才正確,
可是大大可以稍微說明一下改變哪裡才會變時間格式嗎?感謝~
作者:
GBKEE
時間:
2013-4-26 17:21
哦~有點了解了!
所以還是要照大大的方式去RUN才正確,
可是大大可以稍微說明一下改變哪裡才會變時間格式 ...
lifedidi 發表於 2013/4/26 16:30
MsgBox Application.Text("1900/1/2", "[hh]")
複製代碼
如要顯示正常的時間格式 用Format函數就可,
但你要的時間格式:小時的顯示 [hh]:mm ,Format函數 不可用
[hh]:mm 的格式,在儲存格上用儲存格格式指令 即可
TextBox是MSForms 的控制項,可用儲存格的Value(數值) 或 Text (格式後的字串)傳遞
ps: 回文時 請按 [回覆] 按鈕 答覆你的人才會得到通知
作者:
lifedidi
時間:
2013-4-29 10:20
本帖最後由 lifedidi 於 2013-4-29 10:21 編輯
回復
12#
GBKEE
大大好:
我把修改跟儲存的功能加上,
Initialize值OK,但是在儲存的時候都匯錯誤,
我有試著修改程式碼,但是一直失敗,
都會卡在【.ListBox1.Text = 部門】,煩請大大指教,謝謝!
[attach]14815[/attach]
作者:
Hsieh
時間:
2013-4-29 14:23
回復
13#
lifedidi
不是很懂你的邏輯,以我的邏輯觀念修改你參考看看
[attach]14817[/attach]
作者:
GBKEE
時間:
2013-4-29 15:35
回復
13#
lifedidi
在儲存的時候都會錯誤,如何錯誤???
Private Sub CommandButton4_Click()
With UserForm1
If myday <> "" And IsDate(myday) = False Then
MsgBox "您輸入的完工日期無法辨別", vbCritical + vbOKOnly, "請重新輸入"
Exit Sub
End If
.CommandButton2.Enabled = True
部門 = .ListBox1.Text
編號 = .ListBox2.Text
R = d2(部門 & "-" & 編號)
For i = 2 To 4
Sheets("SHEET1").Cells(R, i + 1).Value = .Controls("TextBox" & i).Value
.Controls("TextBox" & i).ForeColor = vbRed '色彩常數(紅)
.Controls("TextBox" & i).BackColor = vbWhite '色彩常數(白)
.Controls("TextBox" & i).Locked = True
Next i
' Call UpdateBox '***這程序是何作用
' .ListBox1.Text = 部門 '***為何重新給值
' .ListBox2.Text = 編號 '***為何重新給值
.CommandButton4.Enabled = False
End With
MsgBox "已經完成儲存", vbOKOnly, "請注意"
End Sub
複製代碼
作者:
lifedidi
時間:
2013-4-29 16:02
回復
15#
GBKEE
Dear GBKEE大大:
我改用Hsieh大大寫的程式碼測試OK!而且比我的有條理。
小弟的程式碼都是拼拼湊湊來的!所以亂糟糟,
目前還在學習階段,感謝你們的熱心指導^^
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)