Board logo

標題: [發問] UserForm表單相關問題 [打印本頁]

作者: v03586    時間: 2015-11-14 01:47     標題: UserForm表單相關問題

小弟嘗試撰寫一個庫存管理系統
希望使用者操作介面就在Main 這個資料欄就好
我目前寫出來的程式碼需要 跳到FMC Input Database 資料欄才能執行
Q1: 請問大大們如何修改呢?
Q2: 請問輸入完畢點選ok後能自動關閉表單嗎? 程式碼如何加呢? 我加了exit sub 似乎無法關閉
Q3: 請問Cancel按鈕 如何寫入功能(關閉表單)
Q4: 請問我的判斷式寫在後面對嗎? 我執行後,假設我輸入漏掉其中一項,資料庫是顯示漏掉那項空白 ,其他是有資料的

如果修改完成!! 在放上來跟大家分享!!! 但我資料庫的建立是用最笨的方式...(新手)
[attach]22438[/attach]
目前如果在Main執行會跳出來的錯誤
[attach]22439[/attach]
我的Userform配置圖
[attach]22440[/attach]
  1. Private Sub CommandButton1_Click()
  2. Sheets("FMC Input Database").Range("A2").Select
  3. Selection.End(xlDown).Select
  4. If OptionButton1.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "201"
  5. If OptionButton2.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "Setup Return"
  6. If OptionButton3.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "261"

  7. Sheets("FMC Input Database").Range("B" & ActiveCell.Cells.Row + 1) = TextBox1.Text
  8. Sheets("FMC Input Database").Range("C" & ActiveCell.Cells.Row + 1) = TextBox2.Text
  9. Sheets("FMC Input Database").Range("D" & ActiveCell.Cells.Row + 1) = TextBox3.Text
  10. Sheets("FMC Input Database").Range("E" & ActiveCell.Cells.Row + 1) = TextBox4.Text
  11. Sheets("FMC Input Database").Range("F" & ActiveCell.Cells.Row + 1) = TextBox5.Text

  12. If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or TextBox5.Text = "" Or OptionButton1.Value = False And OptionButton2.Value = False And OptionButton3.Value = False Then
  13.     MsgBox ("資料未輸入完整, 『 * 』 必須輸入" & vbCrLf & _
  14.     "Data is not enter the full , 『 * 』 you must fill ")
  15. Exit Sub
  16. End If
  17. End Sub
複製代碼

作者: v03586    時間: 2015-11-14 01:51

Q5: 以上表單輸入後想在G欄加上輸入時間 =Now() , 請問要加在哪裡呢?
[attach]22441[/attach]
作者: v03586    時間: 2015-11-15 09:12

附上檔案
Q4 問題已解決!!! 條件式要放在最前面!!!
剩下問題請求協助

[attach]22455[/attach]
作者: v03586    時間: 2015-11-15 09:57

稍早爬文亂試
終於將Q2~Q5 解決

剩下Q1問題要麻煩這裡高手協助

我目前寫出來的程式碼需要 跳到FMC Input Database 資料欄才能執行
希望使用者操作介面就在Main 這個資料欄就好
請問程式碼如何做修改呢?
  1. Private Sub CommandButton1_Click()
  2. Sheets("FMC Input Database").Range("A2").Select
  3. Selection.End(xlDown).Select
  4. If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or TextBox5.Text = "" Or OptionButton1.Value = False And OptionButton2.Value = False And OptionButton3.Value = False Then
  5.     MsgBox ("資料未輸入完整, 『 * 』 必須輸入" & vbCrLf & _
  6.     "Data is not enter the full , 『 * 』 you must fill ")
  7. Exit Sub
  8. End If
  9. If OptionButton1.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "201"
  10. If OptionButton2.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "Setup Return"
  11. If OptionButton3.Value = True Then Sheets("FMC Input Database").Range("A" & ActiveCell.Cells.Row + 1) = "261"

  12. Sheets("FMC Input Database").Range("B" & ActiveCell.Cells.Row + 1) = TextBox1.Text
  13. Sheets("FMC Input Database").Range("C" & ActiveCell.Cells.Row + 1) = TextBox2.Text
  14. Sheets("FMC Input Database").Range("D" & ActiveCell.Cells.Row + 1) = TextBox3.Text
  15. Sheets("FMC Input Database").Range("E" & ActiveCell.Cells.Row + 1) = TextBox4.Text
  16. Sheets("FMC Input Database").Range("F" & ActiveCell.Cells.Row + 1) = TextBox5.Text
  17. Sheets("FMC Input Database").Range("G" & ActiveCell.Cells.Row + 1) = Now()
  18. UserForm1.Hide
  19. End Sub
複製代碼

作者: 准提部林    時間: 2015-11-15 11:40

回復 4# v03586


Private Sub CommandButton1_Click()
Dim k&, Arr(1 To 7) '定一個〔陣列〕容納資料
For k = 1 To 5
  If k <= 3 Then If Me("OptionButton" & k) = True Then Arr(1) = Me("OptionButton" & k).Caption
  '_如果選項為 True,將其〔按鈕文字〕加入陣列1
  Arr(k + 1) = Me("TextBox" & k)
  '_將文字方塊內容加入陣列2∼6
  If Arr(k + 1) = "" Then Arr(1) = "": Exit For
  '_如果文字方塊為空,將陣列1清空,跳出迴圈
Next k
 
If Arr(1) = "" Then MsgBox ("資料未輸入完整, 『 * 』 必須輸入" & vbCrLf & _
      "Data is not enter the full , 『 * 』 you must fill "): Exit Sub
'_以〔陣列1〕當作檢查輸入是否完整的標的

Arr(7) = Now 
'_陣列7加入日期時間

Sheets("FMC Input Database").Cells(Rows.Count, "A").End(xlUp)(2).Resize(1, 7) = Arr
'_填入資料
 
Unload Me
End Sub

程式碼很簡單,請自行去揣模∼∼
作者: v03586    時間: 2015-11-16 08:01

回復 5# 准提部林


    感謝大大的指導!!!把我攏長且複雜的程式碼,簡短又同效果的呈現!!!
但是我還是想了解一下!!避免日後有相同的問題~~
因為我之前的方式都要跳到對應的資料表才能執行
請問是這段程式碼讓資料表不會跳過去嗎?

Sheets("FMC Input Database").Cells(Rows.Count, "A").End(xlUp)(2).Resize(1, 7) = Arr
作者: 准提部林    時間: 2015-11-16 09:34

回復 6# v03586


Sheets("FMC Input Database").Range("A2").Select 
Selection.End(xlDown).Select 

Select 會執行〔選取〕工作表的動作
Selection 只對〔當前〕工作表產生作用
所以,錄製之程式碼,都須再做修飾!
With Sheets("FMC Input Database").Range("A2").End(xlDown)
      .cells(2,1)=??
      .cells(2,2)=??
      ~~
      ~~
End With
作者: GBKEE    時間: 2015-11-16 11:28

回復 6# v03586
試試看
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim Rng As Range, Ar(1 To 2), i As Integer
  4.     Ar(1) = Array(OptionButton1, OptionButton2, OptionButton3) ', OptionButton4, OptionButton5, OptionButton6....
  5.     Ar(2) = Array(TextBox1, TextBox2, TextBox3, TextBox4, TextBox5) ', TextBox6, TextBox7, TextBox8, TextBox9....
  6.    
  7.     'Join 函數 傳回一個字串,該字串是透過連結某個(一維)陣列中的多個子字串而建立的。
  8.     If InStr(UCase(Join(Ar(1), "")), "TRUE") = 0 Or InStr(Join(Ar(2), ","), ",,") Then
  9.         MsgBox ("資料未輸入完整, 『 * 』 必須輸入" & vbCrLf & _
  10.         "Data is not enter the full , 『 * 』 you must fill ")
  11.         Exit Sub
  12.     End If
  13.     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  14.     Set Rng = Sheets("FMC Input Database").Range("a" & Rows.Count).End(xlUp).Offset(1)
  15.     With Rng  '物件Rng : 所指定的儲存格或儲存格範圍。(不必移動工作頁)
  16.         For i = 0 To UBound(Ar(1))
  17.             If Ar(1)(i).Value Then
  18.                 'Caption 屬性 出現在物件上的修飾文字 , 一般用來辨識或描述該物件
  19.                 .Value = Ar(1)(i).Caption
  20.                 Exit For
  21.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  22.             End If
  23.         Next
  24.         '.Range("B1")->這Rng 的 儲存格或儲存格範圍。
  25.         .Range("B1").Resize(, UBound(Ar(2)) + 1) = Ar(2)
  26.         .Range("G1") = Now
  27.         ''''''''''''''''''''''''''''''''''''''''''''
  28.     End With
  29. End Sub
複製代碼

作者: v03586    時間: 2015-11-18 00:25

回復  v03586
試試看
GBKEE 發表於 2015-11-16 11:28



    又多學一招...學程式真的跟講話一樣
一樣結果, 但可以用很多種意思表達!!!!! 感謝指導:)




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)