ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

[¤À¨É] ½L¤¤ DDE ¦sÀÉ»P VBA ªº¹ê»ÚÀ³¥Î½d¨Ò

[¤À¨É] ½L¤¤ DDE ¦sÀÉ»P VBA ªº¹ê»ÚÀ³¥Î½d¨Ò

¶K¤W½L¤¤ DDE ¦sÀÉ»P VBA ªº¹ê»ÚÀ³¥Î½d¨Ò¡A¨Ñ¤j®a°Ñ¦ÒÀ³¥Î (¬è¯à´¶´ç²³¥Í)
³o¤]¬O¤@¯ë¤H¦b¹ê°È¹B¥Î¤W±`¸I¨ìªº°ÝÃDª¼ÂI¡A»P¨ä­W«ä§x´b¤£ª¾¦p¦ó°_µ§
¤£¦p¤À¨É©Òª¾¨Ï¤HÁŵM¹y®©¡C
§Æ±æ¤j®a¥H«á³£¯à¦¨¬°°ª¤H¡A¨Ã¬è«ü¾É«ü¥¿¡I
½L¤¤ DDE ¦sÀɪº¹ê»ÚÀ³¥Î½d¨Ò.rar (1.11 KB)

§Ú®tÂI§Ñ¤F»P§Ú¾Ö¦³¤p¾Ç¥Íµ¥¯Åªº¦P¾Ç­Ì¬OµLªk¤U¸üªþ¥óªº¡A
©Ò¥H§Ú¤S±N¥¦ª½±µ¶K¤F¥X¨Ó¡A¤è«K¤j®a¾\Äý¡C
  1. ' ½L¤¤ DDE ¦sÀɪº¹ê»ÚÀ³¥Î½d¨Ò

  2. Option Explicit

  3. Dim actEnabled As Boolean
  4. Dim index As Single

  5. Private Sub Workbook_Open()
  6.     If (Sheets("¤u§@ªí1").Range("AA1").Value = "") Then Sheets("¤u§@ªí1").Range("AA1").Value = "08:45:00"   ' °²³]AA1Äæ¦ì¬°ªÅ¥Õ¡A«h¼g¤J¶}½L°_©l®É¶¡
  7.     If (Sheets("¤u§@ªí1").Range("AA2").Value = "") Then Sheets("¤u§@ªí1").Range("AA2").Value = "13:45:59"   ' AA2Äæ¦ì¥ç¦P¡C(¦¹¨âÄæ¬ö¿ý°_©l²×¤î®É¶¡)
  8.     If (Sheets("¤u§@ªí1").Range("AA3").Value = "") Then Sheets("¤u§@ªí1").Range("AA3").Value = 0            ' ¬ö¿ý³Ì«á¸ê®Æ¶×¤J¤§¦C¸¹ (Rows)¡C
  9.     If (Sheets("¤u§@ªí1").Range("AA4").Value = "") Then Sheets("¤u§@ªí1").Range("AA4").Value = "00:00:10"   ' ¬ö¿ý¸ê®Æ¶×¤J¬Û¹j®É¶¡¡A¦p¨C¹j¤Q¬í¼g¤J¤@¦¸¡C

  10.     If (TimeValue(Now) > Sheets("¤u§@ªí1").Range("AA2").Value) Then       ' ¦pªG¥Ø«e®É¶¡·~¤w¶W¹LAA2ªº®É¬q¡A«h©I¥s.......
  11.         Call stopProcedure
  12.     Else                                                                  ' ¤Ï¤§¡A«h©I¥s.......
  13.         Call startProcedure
  14.     End If
  15. End Sub

  16. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  17.     On Error Resume Next
  18.     Call actStop
  19. End Sub


  20. Private Sub startProcedure()       ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  21.     Call actStart
  22. End Sub

  23. Private Sub stopProcedure()        ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  24.    Call actStop
  25. End Sub

  26. Sub Starter()
  27.     If (actEnabled = True And TimeValue(Now) >= Sheets("¤u§@ªí1").Range("AA1").Value And TimeValue(Now) <= Sheets("¤u§@ªí1").Range("AA2").Value) Then
  28.         index = Sheets("¤u§@ªí1").Range("AA3").Value

  29.         If (Index = 0) Then Call newTitle  '°²³]newTitleµ{§Ç(¥Ñ¨Ï¥ÎªÌ¦Û¦æ©w¸q)¬O±N²Ä¤@¦Cªº¸ê®Æ©ïÀY¦WºÙ¼g¤J¨ì¤u§@ªí2¡C ¦p¡G¤é´Á¡B®É¶¡¡BR1C5ªº¹ïÀ³Äæ¦ì¸ê®Æµ¥¡C

  30.         Sheets("¤u§@ªí1").Range("AA3").Value = index + 1       ' ¬ö¿ý¦C¸¹¥[¤@¡C
  31.         Sheets("¤u§@ªí2").Cells(index + 2, 1).Value = Date
  32.         Sheets("¤u§@ªí2").Cells(index + 2, 2).Value = TimeValue(Now)
  33.         ' Sheets("¤u§@ªí2").Cells(index + 2, 3).Value = Sheets("¤u§@ªí1").Cells(1, 5).Value
  34.         '
  35.         ' ½Æ»s±q¨é°ÓDDE¶×¤J¤§¬Û¹ïÀ³¦ì¸m¸ê®Æ¡A¦p R1C5 ¹ïÀ³ªº¥i¯à¬O¦¬½L»ùµ¥µ¥¡C
  36.         '
  37.     End If
  38. End Sub


  39. Sub onStarter()
  40.     Call Starter
  41.     If actEnabled Then Call actStart
  42. End Sub

  43. Sub actStart()
  44.     actEnabled = True
  45.     Application.OnTime (Now + Sheets("¤u§@ªí1").Range("AA4").Value), "ThisWorkBook.onStarter"   ' ¼g¤J¸ê®Æªº±Æµ{ (¥Ø«e¬O¨C¹j¤Q¬í¼g¤J¤@¦¸)
  46. End Sub

  47. Sub actStop()
  48.     actEnabled = False

  49.     On Error Resume Next
  50.     Application.OnTime Now, "ThisWorkBook.onStarter", , False
  51. End Sub
½Æ»s¥N½X

TOP

¦^´_ 3# ajagow
³o­Ó¼Ò²Õ¦®¦b´£¨Ñ§A¦p¦ó¦b¹ê°È¤W¼¶¼g¤@­ÓÄÝ©ó§A­Ó¤Hªºµ{¦¡½X½d¨Ò¡A
¥¦ªº½T¬O¤@²Õ¯uªºµ{¦¡¼Ò²Õ¡A§A¥u¬O§â¹ïÀ³ªºÄæ¦ì¥[¥H­×¹¢¡A¦A¥[¤W§A­Ó¤Hªº«ä¦Ò¼Ò¦¡¥[¥H®M¤J²Õ¦X¡A
´N¦¨¤F§A©Ò»Ý­nªº§¹¾ã¤§µ{¦¡½X¤F¡C
§Ú¦A§â¥¦¶K¤@¦¸¡Aµ{¦¡½X½Ð½Æ»s¨ì ThisWorkbook ¤º¡Aª½±µ½sĶ¤]µL°ÝÃDªº¡C
  1. ' ½L¤¤ DDE ¦sÀɪº¹ê»ÚÀ³¥Î½d¨Ò

  2. Option Explicit

  3. Dim actEnabled As Boolean
  4. Dim index As Single

  5. Private Sub Workbook_Open()
  6.     If (Sheets("¤u§@ªí1").Range("AA1").Value = "") Then Sheets("¤u§@ªí1").Range("AA1").Value = "08:45:00"   ' °²³]AA1Äæ¦ì¬°ªÅ¥Õ¡A«h¼g¤J¶}½L°_©l®É¶¡
  7.     If (Sheets("¤u§@ªí1").Range("AA2").Value = "") Then Sheets("¤u§@ªí1").Range("AA2").Value = "13:45:59"   ' AA2Äæ¦ì¥ç¦P¡C(¦¹¨âÄæ¬ö¿ý°_©l²×¤î®É¶¡)
  8.     If (Sheets("¤u§@ªí1").Range("AA3").Value = "") Then Sheets("¤u§@ªí1").Range("AA3").Value = 0            ' ¬ö¿ý³Ì«á¸ê®Æ¶×¤J¤§¦C¸¹ (Rows)¡C
  9.     If (Sheets("¤u§@ªí1").Range("AA4").Value = "") Then Sheets("¤u§@ªí1").Range("AA4").Value = "00:00:10"   ' ¬ö¿ý¸ê®Æ¶×¤J¬Û¹j®É¶¡¡A¦p¨C¹j¤Q¬í¼g¤J¤@¦¸¡C

  10.     If (TimeValue(Now) > Sheets("¤u§@ªí1").Range("AA2").Value) Then       ' ¦pªG¥Ø«e®É¶¡·~¤w¶W¹LAA2ªº®É¬q¡A«h©I¥s.......
  11.         Call stopProcedure
  12.     Else                                                                  ' ¤Ï¤§¡A«h©I¥s.......
  13.         Call startProcedure
  14.     End If
  15. End Sub

  16. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  17.     On Error Resume Next
  18.     Call actStop
  19. End Sub


  20. Sub startProcedure()       ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  21.     Call actStart
  22. End Sub

  23. Sub stopProcedure()        ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  24.    Call actStop
  25. End Sub

  26. Sub nnewTitle()
  27.    ' ®M¤W§A±ý¶×¤J¸ê®ÆªºªíÀY¦WºÙ
  28. End Sub

  29. Sub Starter()
  30.     If (actEnabled = True And TimeValue(Now) >= Sheets("¤u§@ªí1").Range("AA1").Value And TimeValue(Now) <= Sheets("¤u§@ªí1").Range("AA2").Value) Then
  31.         index = Sheets("¤u§@ªí1").Range("AA3").Value

  32.         If (index = 0) Then Call newTitle  '°²³]newTitleµ{§Ç(¥Ñ¨Ï¥ÎªÌ¦Û¦æ©w¸q)¬O±N²Ä¤@¦Cªº¸ê®Æ©ïÀY¦WºÙ¼g¤J¨ì¤u§@ªí2¡C ¦p¡G¤é´Á¡B®É¶¡¡BR1C5ªº¹ïÀ³Äæ¦ì¸ê®Æµ¥¡C

  33.         Sheets("¤u§@ªí1").Range("AA3").Value = index + 1       ' ¬ö¿ý¦C¸¹¥[¤@¡C
  34.         Sheets("¤u§@ªí2").Cells(index + 2, 1).Value = Date
  35.         Sheets("¤u§@ªí2").Cells(index + 2, 2).Value = TimeValue(Now)
  36.         ' Sheets("¤u§@ªí2").Cells(index + 2, 3).Value = Sheets("¤u§@ªí1").Cells(1, 5).Value
  37.         '
  38.         ' ½Æ»s±q¨é°ÓDDE¶×¤J¤§¬Û¹ïÀ³¦ì¸m¸ê®Æ¡A¦p R1C5 ¹ïÀ³ªº¥i¯à¬O¦¬½L»ùµ¥µ¥¡C
  39.         '
  40.     End If
  41. End Sub


  42. Sub onStarter()
  43.     Call Starter
  44.     If actEnabled Then Call actStart
  45. End Sub

  46. Sub actStart()
  47.     actEnabled = True
  48.     Application.OnTime (Now + Sheets("¤u§@ªí1").Range("AA4").Value), "ThisWorkBook.onStarter"   ' ¼g¤J¸ê®Æªº±Æµ{ (¥Ø«e¬O¨C¹j¤Q¬í¼g¤J¤@¦¸)
  49. End Sub

  50. Sub actStop()
  51.     actEnabled = False

  52.     On Error Resume Next
  53.     Application.OnTime Now, "ThisWorkBook.onStarter", , False
  54. End Sub
½Æ»s¥N½X

TOP

¦^´_ 5# Hsieh
ÁÂÁ±zªº«ü¥¿¡I
¤µ«á§Ú·|¯S§O¥h¯d·NVBAªº«O¯d¦r¡A §Ú¤w±N index §ó§ï¦¨ cIndex (Check Index ¤§·N¡A¥i¨Ì¨C­Ó¤H½s½X²ßºD¦Û¦æ¥h©w¸q)
¯u¤£¦n·N«ä¯d¤U¤F¤£¦nªº¿ù»~¥Ü½d¡C

TOP

¦^´_ 7# ajagow
¹ï¤£°_¡I
¦b½d¨Ò¤¤ Sub newTitle()  (¤§«e¥»·Q¥Ñ¨Ï¥ÎªÌ¦Û¦æ¥[¤W¡A¦ý¬°¼W¶i§AªºÁA¸Ñ¡AÁ{®É¥[¤Jªº) »~¥´¦¨ Sub nnewTitle() ½Ð§A¦Û¦æ§ó¥¿¡A
½Ð¯d·N ThisWorkBook.onStarter¡A¦b ThisWorkBook.onStarter¤¤¬O¦³¤@ÂI "." ªº (ThisWorkBook + "." +  onStarter)¡A
¦¹·N§Y¬O "·í³]©w®É¬q¨ì®É§Y¤©°õ¦æ onStarter¦¹µ{¦¡¬q"

Sub onStarter()
    Call Starter
    If actEnabled Then Call actStart
End Sub

onStarter µ{¦¡¬q·|¥h°õ¦æ Starter (¦¹µ{¦¡¬q­t³d±N±qDDE¶×¤J¤§½L¤¤¸ê°T¡A¹ê»Ú¼g¤J¨ì§A«ü©w½s¼gªº¤u§@ªí³æ¤º)¡A
°õ¦æ§¹²¦¤S·|¨ì actStart ªº±Æµ{¡C ¦p¦¹¤£Â_´`Àô§@·~¡Aª½¨ì±ø¥óº¡¨¬¬°¤î¡C

TOP

¦^´_ 9# ajagow
³Â·Ð¤W¶ÇÀɮסI

TOP

¦^´_ 11# ajagow
Äæ¦ìªº½T»{«D±`­«­n¡A§Aªº»yªk§Úµy¥[­×§ï¤F¤@¤U¡A¤jÅé¤W¤]³£¤£¿ù¡A¥u¬O®É¶¡Äæ¦ìªº»{©w¼Ò½k¦Ó¤w¡A
§Ú±N­×§ï¤§³B¥Î  ' ******** ¥[¥H¼Ð¥Ü¥X¨Ó¡A¤è«K§AÁA¸ÑµLªk°õ¦æªº­ì¦]¡A¤U¦^§A´N·|¹ê»ÚÀ³¥Î¤F¡C
ªþ¤W¤w°õ¦æªº½d¨Ò¡A¥H¤Î§Aªº­×§ï«á¤§µ{¦¡½X (¦]§A©|µLªk¤U¸ü¡A©Ò¥H±N¥¦¶K¥Ü¥X¨Ó)¡A§A±Nµ{¦¡½X½Æ»s¨ì ThisWorkbook ¤º¡A¦Ó±N¼Ò²Õ²¾°£±¼¡C
  1. ' ½L¤¤ DDE ¦sÀɪº¹ê»ÚÀ³¥Î½d¨Ò
  2. Option Explicit
  3. Dim actEnabled As Boolean
  4. Dim CIndex As Single

  5. Private Sub Workbook_Open()
  6.     If (Sheets("¤u§@ªí1").Range("A1").Value = "") Then Sheets("¤u§@ªí1").Range("A1").Value = "01:11:00"   ' °²³]A1Äæ¦ì¬°ªÅ¥Õ¡A«h¼g¤J¶}½L°_©l®É¶¡
  7.     If (Sheets("¤u§@ªí1").Range("A2").Value = "") Then Sheets("¤u§@ªí1").Range("A2").Value = "13:45:59"   ' A2Äæ¦ì¥ç¦P¡C(¦¹¨âÄæ¬ö¿ý°_©l²×¤î®É¶¡)
  8.     If (Sheets("¤u§@ªí1").Range("A3").Value = "") Then Sheets("¤u§@ªí1").Range("A3").Value = 0            ' ¬ö¿ý³Ì«á¸ê®Æ¶×¤J¤§¦C¸¹ (Rows)¡C
  9.     If (Sheets("¤u§@ªí1").Range("A4").Value = "") Then Sheets("¤u§@ªí1").Range("A4").Value = "00:00:10"   ' ¬ö¿ý¸ê®Æ¶×¤J¬Û¹j®É¶¡¡A¦p¨C¹j¤Q¬í¼g¤J¤@¦¸¡C

  10.     ' If (TimeValue(Now) > Sheets("¤u§@ªí1").Range("A2").Value) Then     ' ********  §A¥´ºâ¦ó®É¶}©l¹B§@¡H13:45:59 ¥H«á¡H
  11.     If (TimeValue(Now) > Sheets("¤u§@ªí1").Range("A1").Value) Then       ' ¦pªG¥Ø«e®É¶¡·~¤w¶W¹LA2ªº®É¬q¡A«h©I¥s.......
  12.         ' Call stopProcedure         ' ***** ®É¶¡¨ì¤F¡AÃø¹D§A¤£­n°õ¦æ¡H
  13.         Call startProcedure
  14.     Else                                                                  ' ¤Ï¤§¡A«h©I¥s.......
  15.         Call stopProcedure
  16.         ' Call startProcedure        ' ***** ½Ð°Ý§A¬O­n¥¦¦b 14:00 ~ 01:09 ¶¡°õ¦æ¡H
  17.     End If
  18. End Sub

  19. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  20.     On Error Resume Next
  21.     Call actStop
  22. End Sub

  23. Sub startProcedure()       ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  24.     Call actStart
  25. End Sub

  26. Sub stopProcedure()        ' «O¯d§@¬°±±¨î¶µ¤§À³¥Îµ{§Ç¡A¦p«ö¶s¤§¥¨¶°À³¥Îµ¥¡C
  27.    Call actStop
  28. End Sub

  29. Sub newTitle()
  30.    ' ®M¤W§A±ý¶×¤J¸ê®ÆªºªíÀY¦WºÙ
  31. End Sub

  32. Sub Starter()
  33.     If (actEnabled = True And TimeValue(Now) >= Sheets("¤u§@ªí1").Range("A1").Value And TimeValue(Now) <= Sheets("¤u§@ªí1").Range("A2").Value) Then
  34.         CIndex = Sheets("¤u§@ªí1").Range("A3").Value

  35.         If (CIndex = 0) Then Call newTitle  '°²³]newTitleµ{§Ç(¥Ñ¨Ï¥ÎªÌ¦Û¦æ©w¸q)¬O±N²Ä¤@¦Cªº¸ê®Æ©ïÀY¦WºÙ¼g¤J¨ì¤u§@ªí2¡C ¦p¡G¤é´Á¡B®É¶¡¡BR1C5ªº¹ïÀ³Äæ¦ì¸ê®Æµ¥¡C

  36.         Sheets("¤u§@ªí1").Range("A3").Value = CIndex + 1       ' ¬ö¿ý¦C¸¹¥[¤@¡C
  37.         Sheets("¤u§@ªí2").Cells(CIndex + 2, 1).Value = Date
  38.         Sheets("¤u§@ªí2").Cells(CIndex + 2, 2).Value = TimeValue(Now)
  39.         ' Sheets("¤u§@ªí2").Cells(CIndex + 2, 3).Value = Sheets("¤u§@ªí1").Cells(1, 5).Value
  40.         Sheets("¤u§@ªí2").Cells(CIndex + 2, 3).Value = Sheets("¤u§@ªí1").Cells(6, 1).Value         ' ´ú¸Õ¡A ¦]¤µ¤Ñ¤£½æ³½¡A §Aªº«ü©wÄæ¦ì¦³ÂI..........

  41.         '

  42.         ' ½Æ»s±q¨é°ÓDDE¶×¤J¤§¬Û¹ïÀ³¦ì¸m¸ê®Æ¡A¦p R1C5 ¹ïÀ³ªº¥i¯à¬O¦¬½L»ùµ¥µ¥¡C

  43.         '
  44.         CIndex = Sheets("¤u§@ªí1").Range("A3").Value      ' ********* ¼W¥[³¡¤À  (Counter ­n¥[¤@¡A§_«h¥Ã»·¬°¹s)
  45.     End If
  46. End Sub

  47. Sub onStarter()
  48.     Call Starter
  49.     If actEnabled Then Call actStart
  50. End Sub

  51. Sub actStart()
  52.     actEnabled = True
  53.     ' Application.OnTime (Now + Sheets("¤u§@ªí2").Range("A4").Value), "ThisWorkBook.onStarter"   ' ***** ¤u§@ªí 2 ªº A4 ­þ¨Ó­Ó®É¶¡³]©w¡H
  54.     Application.OnTime (Now + Sheets("¤u§@ªí1").Range("A4").Value), "ThisWorkBook.onStarter"     ' ¼g¤J¸ê®Æªº±Æµ{ (¥Ø«e¬O¨C¹j¤Q¬í¼g¤J¤@¦¸)
  55. End Sub

  56. Sub actStop()
  57.     actEnabled = False

  58.     On Error Resume Next
  59.     Application.OnTime Now, "ThisWorkBook.onStarter", , False
  60. End Sub
½Æ»s¥N½X
DDE-4-14 ½L¤¤ DDE ¦sÀÉ»P VBA ªº¹ê»ÚÀ³¥Î½d¨Ò.rar (14.01 KB)

TOP

¦^´_ 16# ajagow
½Ð±z¯d·N¬Ý¬Ý¡A¦b±zµ{¦¡°õ¦æªº¶¥¬q¬O§_¦P®É·|¥h°õ¦æ§O¤ä Excel µ{¦¡¡H
¦pªG¦³ªº¸Ü¡A½Ð¤Å¾Þ§@§O¤ä Excel¡A¦]¬°¥¦­Ìªº°õ¦æ§Ç¥i¯à³Q¤zÂZ¨ì¤F¡C

TOP

¦^´_  c_c_lai


    ¨º½Ð¸û¤@¤U¡A­Y¦P®É¨ú¥Î¤£¦P°T¸¹¨Ó·½®É¡A­n¦p¦ó³WÁ×±z©Ò»¡ªº¿ù»~­·ÀI©O?
ribbits µoªí©ó 2012-9-9 11:07

«D "¤£¦P°T¸¹¨Ó·½"¡A§Ú«üªº¬OºÉ¥i¯à¤£­n¦b¦P¤@®É¬q¥h
¦P®É°õ¦æ¤@¤ä¥H¤W±a¦³VBAµ{¦¡°õ¦æ½Xªº Excel ÀɮסC
ªþ¤W¹Ï¤ù§Æ±æ¯àÀ°§U§A¤F¸Ñ¡G

§A¥i¥H¦b¤@ªí³æ¤º¦P®É¶×¤J¤@¤ä¥H¤W¤£¦P DDE °T¸¹¨Ó·½¡A³oµ´¹ï¬O OK ªº¡A
¦ý¬O¦pªG§A¦b¦P¤@®É¬q¦P®É°õ¦æ¤@¤ä¥H¤WÃþ¦ü¦p¦¹¤§VBA
°õ¦æµ{¦¡¡AVBA µ{¦¡·¥¦³¥i¯à·|ÀH®É²ö¦W¨ä§®¦a³Q¤¤Â_ (Interrupt)¡C
(§Ú­Ó¤HÅéÅç¡A¹ð¸Õ¤£²n)    ¦]¦¹¤~·|¦p¦¹«Øijªº¡C

TOP

¦^´_ 24# ribbits
ºÝµø§Aµ{¦¡¼¶¼gªº§Þ¥©¡A¬O¥i¥H°µ¨ìªº¡I

TOP

        ÀR«ä¦Û¦b : ¡i¬°µ½Ävª§¡j¤H¥Í­n¬°µ½Ävª§¡A¤À¬í¥²ª§¡C
ªð¦^¦Cªí ¤W¤@¥DÃD