返回列表 上一主題 發帖

請高手指點一下,如何做出動態的行事曆及雙擊選擇輸入的功能?

請高手指點一下,如何做出動態的行事曆及雙擊選擇輸入的功能?

請高手指點一下,如何做出動態的年曆及雙擊選擇輸入的功能?

如附件

https://dl.dropboxusercontent.com/u/12575824/%E8%A1%8C%E4%BA%8B%E6%9B%86.xls

我需要一個日期輸入的功能,目前外觀大致上就像附件這樣。

我要在輸入頁 , 選擇一個 儲存格(基本上是 日期欄 下面),按下快速鍵後,會跳到年曆這一頁。(這部份應該ok)

年曆這一樣,我希望第一行第一個,是上個月,第二以才是 today()所在的月份。以此顯示12個月份。

一、因今天的月份會變,所以整個會變成是動態調整。請指教,這樣的功能該如何下手?

二、雙擊儲存格,會將該日期寫到輸入頁,選擇的儲存格之中。如果無法雙擊,改用快速鍵輸入也是可以。
目前不知道該如何做到這樣的功能,請指令一下。

三、目前年曆的 2013-12 2014-1~2014-10 這幾個是用 today() - 30 -60 -90-120 -150 ... 這樣的『爛』方法做出來的
請指教,該怎麼做比較好~~
公開經驗,創造智慧(我又不靠這過活)

如附件
https://dl.dropboxusercontent.com/u/12575824/%E8%A1%8C%E4%BA%8B%E6%9B%86.xls

每個月的第一天,我用 =eomonth(TODAY(),quotient(COLUMN()-2,8)+quotient(ROW()-2,9)*4-5)+1 解決了

每個月的每一天,我用
                OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)
-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)
+ MOD(ROW()-4,9)*7
+MOD(COLUMN()-2,8)

解決了
為了要好看,又加上了
=if(        month(OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,))<>
        month(OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8)),
        "",
        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8))



※現在的問題
不難發現,指令太長了,又臭又長
OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8)
太長了,我原本想要用 插入->名稱->定義 的方式解決,但是定義 month_first_day -->OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)

再將每日的計算公式寫成
=if(        month(        month_first_day)<>
        month(        month_first_day-(weekday(        month_first_day,1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8)),
        "",
                month_first_day-(weekday(        month_first_day,1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8))

無法使用,請指教、指點,謝謝
公開經驗,創造智慧(我又不靠這過活)

TOP

回復 3# GBKEE


謝謝大大的大力幫忙,我試著修改,目前已經『大致』ok了,

我參考你的範例,修改程式

如附件
https://dl.dropboxusercontent.com/u/12575824/%E8%A1%8C%E4%BA%8B%E6%9B%86.xls
  1. Option Explicit
  2. '工作表模組:雙擊儲存格程式
  3. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  4. Dim aa As Integer

  5.         Cells(7, 2).Value = Target.Cells(1, 1)                'copy to B2
  6.         'Cells(7, 2).NumberFormatLocal = "G/通用格式"

  7.         Ex Cells(7, 2), Target.Parent
  8. 'Target.Select
  9. End Sub

  10. Private Sub Ex(Rng As Range, sh As Worksheet)
  11.         Dim E As Range

  12.         If Rng = "" Then Exit Sub
  13.         If IsNumeric(Rng) Then
  14.                 Sheets("Sheet1").Activate
  15.                 If Selection.Row > 1 And Selection.Row < 52 And Selection.Column >= 6 And Selection.Column <= 7 Then
  16.                         Selection.Value = Rng
  17.                 End If
  18.         End If
  19. End Sub
複製代碼
加到 sheet 月曆之中,並在 sheet1 之中加入
  1. Option Explicit
  2. '工作表模組:雙擊儲存格程式
  3. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  4.         If Target.Cells(1).Row > 1 And Target.Cells(1).Row < 52 And Target.Cells(1).Column >= 6 And Target.Cells(1).Column <= 7 Then
  5.                 Sheets("月曆").Activate
  6.         End If
  7. End Sub
複製代碼
如此一來,我便可以在兩個sheet 中,用 雙擊做切換。(這部份功能ok了,十二萬分的感謝)

現在我不了解的是

一、原本提供的程式是

Ex Target.Cells(1), Target.Parent

這個 Target.Cells(1) 我怎麼改,都改不出原始值(都是經過格式化的資料),最後我沒折,只好將值寫到b2 ,再將b2 的值丟出來(看不到值是因為字型顏色我調整白色)

二、
計算日期
=if(        month(OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,))<>
        month(OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8)),
        "",
        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,)-(weekday(        OFFSET($B$2,QUOTIENT(ROW()-4,9)*9,QUOTIENT(COLUMN()-2,8)*8,,),1)-1)+ MOD(ROW()-4,9)*7 +MOD(COLUMN()-2,8))
這個熱熱長的程式,有機會縮短嗎? (例如用 名稱 定義)
公開經驗,創造智慧(我又不靠這過活)

TOP

追求完全的最後一關,將右側表列的休假日,在左側的月曆中,將字型改用紅色

如附件
https://dl.dropboxusercontent.com/u/12575824/%E8%A1%8C%E4%BA%8B%E6%9B%86.xls

因為日期都是用算的,位置不固定,我不知如何下手

就算用 『設定格式化的條件』也只能有三個條件,無法將數十個日期加上去,請高手指點~~謝謝
公開經驗,創造智慧(我又不靠這過活)

TOP

回復 6# GBKEE


   呵~~我的眼力也很差,寫的時候,我是用 ultraedit 一段一段拼出來後,才貼到 excel

目前我用眼不見為淨的方式,儲存格格式->保護->隱藏 加上工具->保護 將公式隱藏起來(不然一點儲存格,整個畫面#$$^%)
公開經驗,創造智慧(我又不靠這過活)

TOP

回復 6# GBKEE

我試過 Ex Target, Target.Parent



雙擊時target 變成 1/23/2014 經過格式化的值而不是 41662 ,以致於後面我的檢查程序都無法運作。

日曆上的日期都是正確的日期,只是透過儲存格格式 自定成 DD 或 YYYY-MM ,原始資料都還是 數值

利用這樣的特性,我在雙擊儲存格時,我就知道使用者點擊的是不是日期。
公開經驗,創造智慧(我又不靠這過活)

TOP

回復 9# stillfish00


Dear Sir,
麻煩再幫一下

如附件
https://dl.dropboxusercontent.com/u/12575824/%E8%A1%8C%E4%BA%8B%E6%9B%86.xls

quotient 到底是那出了問題?
公開經驗,創造智慧(我又不靠這過活)

TOP

回復 12# stillfish00

最後的解法: =OFFSET($B$2,int((ROW()-4)/9)*9,int((COLUMN()-2)/8)*8,,)

用 int(a/b) 取代 quotient(a,b)

出問題的原因因該是 excel 2003 quotient 屬於增益集,非excel 本生的function.

出錯的原因應該是  quotient ( row()-4,9)  row()-4 算出來的值不是數字,is nonnumeric .

將quotient 用 int(a/b)取代之後就可以被 名稱定義取代。

換成更高版本應該就不會有這樣的怪現象。
公開經驗,創造智慧(我又不靠這過活)

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題