Board logo

標題: Excel設定彈跳視窗-?(已解決) [打印本頁]

作者: fmsc168    時間: 2011-9-24 14:44     標題: Excel設定彈跳視窗-?(已解決)

本帖最後由 fmsc168 於 2011-9-25 23:59 編輯

想請問一下!
如果我要設定ㄧ按到某分頁(比如業績)便會出現小視窗要我輸入日期確定後P3就等於剛剛輸入之日期~
那要怎麼做阿?

以上再麻煩大家了~

感謝!
作者: diabo    時間: 2011-9-24 20:43

問題1

對「業績」工作表標籤,按滑鼠右鍵選「檢視程式碼」

貼上下列程式碼...
  1. Private Sub Worksheet_Activate()

  2.     [p3].Value = InputBox("請輸入日期")

  3. End Sub
複製代碼

作者: luhpro    時間: 2011-9-24 21:54

本帖最後由 luhpro 於 2011-9-24 22:07 編輯
想請問一下!
如果我要設定一按到某分頁(比如業績)便會出現小視窗要我輸入日期確定後P3就等於剛剛輸入之日期 ...
fmsc168 發表於 2011-9-24 14:44

我想第一個問題解決的關鍵應該是在 :
要如何在切換頁簽(即你所說的分頁)時觸發開啟輸入日期的小視窗,
並且能正確的將日期文字放到該頁簽指定的儲存格上.

在思考解決方案時可先確認變動項目(需要於切換頁簽時觸發事件)與共同母體(頁簽的 Parent 為 ThisWorkBook)
故而可以在 ThisWorkBook 上尋找是否有合適的觸發事件可以運用,
可能的事件有 SheetChange 與 SheetActivate.

在ThisWorkBook的左邊選單選 ThisWorkBook, 右邊再分別選上述兩個事件即可自動產生相應的程序,
  1. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  2. End Sub
複製代碼
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. End Sub
複製代碼
從上述程序抬頭的()內容中可以看出來 Sh 可能就是我們想要的 SheetName,
接著只要分別放入 MsgBox 秀出 Sh 內容就可以確認哪個是我們想要的事件,
然後就是試著實際切換頁簽看看以確認到底是會觸發那一個程序了.
  1. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  2.   MsgBox ("你選擇了 " & Chr(34) & Sh.Name & Chr(34) & "頁簽")
  3. End Sub
複製代碼
一般來說接受使用者輸入日期可以用輸入框、選單也可以用Calendar,
因為採用輸入框輸入日期可能需要作輸入內容的錯誤處理,
而選單則需要設定選單各選項初值,
故建議用 Calendar 較簡單.

只要注意開檔時隱藏,觸發時顯示出來,選擇日期後應如何抓取該日期並再次隱藏即可.
因需要在各頁簽都能使用故應放在 Sheet 外(即Module <共用程序或整體變數宣告> 或 UserForm<元件>),
可先建立表單(UserForm)再放入 MonthView 元件來達成,
而因該頁簽名稱需要在表單與頁簽間傳遞故應在模組中宣告其為 Public 以便整個檔案中都能共用. (Public 要放在模組的最上面)

(以下程式放在 ThisWorkBook)
  1. Private Sub Workbook_Open()
  2.   UserForm1.Hide ' 檔案開啟時隱藏 UserForm(Calendar)
  3. End Sub
  4. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  5.   Shn = Sh.Name ' 保存所點選的 Sheet 名稱, 以便選擇日期後將日期傳給該頁簽
  6.   UserForm1.Show ' 顯示 Calendar 以便選日期
  7. End Sub
複製代碼
(以下程式放在 UserForm1)
  1. Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
  2.   Sheets(Shn).Range("P3") = DateClicked ' 將日期設定給所選頁簽的 P3 儲存格內
  3.   UserForm1.Hide ' 隱藏 UserForm(Calendar)
  4. End Sub
複製代碼
(以下宣告放在 Module 內)
  1. Public Shn$ ' 宣告 Sheet 名稱可以在各程序中共用
複製代碼
至於第二個問題印象中本網站之前有人討論過, 建議你可以找找看.
作者: GBKEE    時間: 2011-9-25 08:28

本帖最後由 GBKEE 於 2011-9-25 09:01 編輯

回復 1# fmsc168
問題1:將程式碼 複製到VBA 視窗的 ThisWorkbook 中
  1. Private Sub Workbook_Open()
  2.     Call Workbook_SheetActivate(ActiveSheet)
  3. End Sub
  4. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  5.     Dim AA
  6.     Do While Not IsDate(AA) Or AA = ""
  7.         AA = InputBox("請輸入日期", , Date)
  8.     Loop
  9.     Sh.[P3] = AA
  10. End Sub
複製代碼





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