Board logo

標題: [發問] 程式碼 濃縮 [打印本頁]

作者: mark15jill    時間: 2015-8-16 16:36     標題: 程式碼 濃縮

本帖最後由 mark15jill 於 2015-8-16 16:38 編輯

附件程式碼 是否可以有效率的濃縮呢?
是有關於 日期判斷的程式碼....
因此種方法不用考慮二月是否為閏月(28、29)的部分
只是程式會很長
若完成將會弄完整程式碼上來

[程式太長超過論壇的限制... 只好用附件]

[attach]21729[/attach]
作者: stillfish00    時間: 2015-8-17 15:11

本帖最後由 stillfish00 於 2015-8-17 15:33 編輯

回復 1# mark15jill
1.  日期判斷是判斷什麼,這段程式的目的是什麼,好歹要說明一下
2.  宣告語法有錯,這不是VBA合法的宣告
3.  用到的 dtp、d7labx,這些無法得知內容是什麼
4.  Function qqa 無傳回值,無法判斷程式目的

我只是路過而已,你要的答案可能很簡單,但是你問得不對。
作者: mark15jill    時間: 2015-8-17 17:30

本帖最後由 mark15jill 於 2015-8-17 17:32 編輯
回復  mark15jill
1.  日期判斷是判斷什麼,這段程式的目的是什麼,好歹要說明一下
2.  宣告語法有錯,這 ...
stillfish00 發表於 2015-8-17 15:11



   謝謝大大的回覆..
1.此帖主要的目的在於 濃縮程式碼... 因在下對於濃縮程式碼能力很差,想說是否有其他方法可以濃縮
2.dtp 主要是 日期插件的宣告  d7labx為 label的宣告
3.語法的部份請忽略... 因這的確不是VBA的 ... 只是想詢問濃縮的方法...
4.function qqa 為共用副程式碼區域(有點類似 VBA的 副程式)



在下詢問的其實很簡單...
程式碼濃縮
僅僅如此而已...

至於一開始說的那些  其實只是想說 如果這個問題解決後,我會將成品(完整版程式) 放上論壇供參考...


謝謝
作者: c_c_lai    時間: 2015-8-17 21:14

回復 1# mark15jill
去除         For maa = 1 To 12
以及        For daa = 1 To 31
而直接使用 mma 以及 dda 之變數:
  1.         Select Case mma
  2.             Case 1
  3.                 Select Case dda
  4.                     Case 1
  5.                         dlab(0).Text = yya - 1 & "/" & 12 & "/" & 29
  6.                         dlab(1).Text = yya - 1 & "/" & 12 & "/" & 30
  7.                         dlab(2).Text = yya - 1 & "/" & 12 & "/" & 31
  8.                         dlab(3).Text = yya & "/" & mma & "/" & dda
  9.                         dlab(4).Text = yya & "/" & mma & "/" & dda + 1
  10.                         dlab(5).Text = yya & "/" & mma & "/" & dda + 2
  11.                         dlab(6).Text = yya & "/" & mma & "/" & dda + 3
  12.                     Case 2
  13.                         dlab(0).Text = yya - 1 & "/" & 12 & "/" & 30
  14.                         dlab(1).Text = yya - 1 & "/" & 12 & "/" & 31
  15.                         dlab(2).Text = yya & "/" & mma & "/" & dda - 1
  16.                         dlab(3).Text = yya & "/" & mma & "/" & dda
  17.                         dlab(4).Text = yya & "/" & mma & "/" & dda + 1
  18.                         dlab(5).Text = yya & "/" & mma & "/" & dda + 2
  19.                         dlab(6).Text = yya & "/" & mma & "/" & dda + 3
  20.                     Case 3
  21.                         .
  22.                         .
  23.                         .
  24.                     Case 31
  25.                          dlab(0).Text = yya & "/" & mma & "/" & dda - 3
  26.                          dlab(1).Text = yya & "/" & mma & "/" & dda - 2
  27.                          dlab(2).Text = yya & "/" & mma & "/" & dda - 1
  28.                          dlab(3).Text = yya & "/" & mma & "/" & dda
  29.                          dlab(4).Text = yya & "/" & mma + 1 & "/" & 1
  30.                          dlab(5).Text = yya & "/" & mma + 1 & "/" & 2
  31.                          dlab(6).Text = yya & "/" & mma + 1 & "/" & 3
  32.                 End Select
  33.             Case 2
  34.                 Select Case dda
  35.                         .
  36.                         .
  37.                         .
  38.         End Select
複製代碼
試試看是否對你有幫助?
作者: mark15jill    時間: 2015-8-18 09:39

回復  mark15jill
去除         For maa = 1 To 12
以及        For daa = 1 To 31
而直接使用 mma 以及 ...
c_c_lai 發表於 2015-8-17 21:14



    謝謝您的回覆
    剛有試驗過 若將for 迴圈移除  直接以select case 代表的話 則會造成select case 的參數錯誤(讀不到maa or daa)
    進而導致後續的參數都有問題..
作者: stillfish00    時間: 2015-8-18 09:48

回復 3# mark15jill
好吧,我就講白了。
我的意思是你完全沒說明這段程式是在做甚麼
如果今天你的問題是:
dtp 為輸入的日期,將該日與前三天、後三天的日期放到 dlab(0) 到 dlab(6)
那麼我就可以很快地告訴你,用Dateadd就可以很快做到,
而不是再去看你的程式碼慢慢推測到底要做甚麼功能。
  1. Sub test()
  2.     For i = 0 To 6
  3.         dlab(i) = DateAdd("d", i - 3, CDate(dtp.Value))
  4.     Next
  5. End Sub
複製代碼

作者: mark15jill    時間: 2015-8-18 10:48

本帖最後由 mark15jill 於 2015-8-18 11:11 編輯
回復  mark15jill
好吧,我就講白了。
我的意思是你完全沒說明這段程式是在做甚麼
如果今天你的問題是: ...
stillfish00 發表於 2015-8-18 09:48

    大大您好....
關於這段程式是做甚麼的
我在發帖時就已經有說明...
請參考發帖時的第二行文字和...是有關於 日期判斷的程式碼....
至於前三天旱後三天
若依照您所提供的公式
會造成
1.2月閏月
2.前一年 後一年...

而我所詢問的程式碼則是 不用以上兩點所提的問題
如果都不考慮 我知道是可以寫成
For uu = -3 to 3
    dlab(uu+3).Text = yya & "/" & mma & "/" & dda+uu
next
'yya =年 : mma=月 : dda=日
造成您的困擾 抱歉
[下次關鍵詞 在下會用大紅字標示 以避免造成困擾 ]
作者: stillfish00    時間: 2015-8-18 13:24

回復 7# mark15jill
若依照您所提供的公式
會造成
1.2月閏月
2.前一年 後一年...

DateAdd("d",-1,"2015/3/1")  => 2015/2/28
DateAdd("d",-1,"2016/3/1")  => 2016/2/29
DateAdd("d",-1,"2016/1/1")  => 2015/12/31
DateAdd("d",1,"2014/12/31") => 2015/1/1
何來問題?
作者: mark15jill    時間: 2015-8-18 14:19

回復  mark15jill

DateAdd("d",-1,"2015/3/1")  => 2015/2/28
DateAdd("d",-1,"2016/3/1")  => 2016/2 ...
stillfish00 發表於 2015-8-18 13:24


To stillfish00大大...
    很謝謝您多次的指教...
    但..
     此帖的主要目的在於 濃縮程式碼...
     您的那個方式 如果套用在我目前所撰寫的程式內(程式環境並非office excel vba)  的確會發生我說的那種情形..(應該是我學藝不精)
   
    再次感謝您~
作者: mark15jill    時間: 2015-8-18 17:22

本帖最後由 mark15jill 於 2015-8-18 17:28 編輯

唔...
我自己找到不算方法的方法了
雖然這樣僅僅減少一些..
需要再找規律進行第二次濃縮..

謝謝各位大大
  1.                                 Case iia - 2
  2.                                     If dda = daa Then
  3.                                         dlab(0).Text = yymm & daa - 3
  4.                                         dlab(1).Text = yymm & daa - 2
  5.                                         dlab(2).Text = yymm & daa - 1
  6.                                         dlab(3).Text = yymm & daa
  7.                                         dlab(4).Text = yymm & daa + 1
  8.                                         dlab(5).Text = yymm & daa + 2
  9.                                         dlab(6).Text = yymm1 & 1
  10.                                     End If
複製代碼
可以濃縮成
  1.                                 Case iia - 2
  2.                                     If dda = daa Then
  3.                                         For das = 0 To 5
  4.                                             dlab(das).Text = yymm & daa + das - 3
  5.                                         Next
  6.                                         dlab(6).Text = yymm1 & 1
  7.                                     End If
複製代碼
目前是整理到濃縮(part 1) 之後 準備有相同的濃縮程式碼就要丟去副程式...




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