返回列表 上一主題 發帖

[發問] 用勾選讓儲存格不能等於

回復 1# j88141
既然不想讓 王小平 出現在 表一 的星期一早上的名單中,
那為何要在 表二 的星期一早上中放置  王小平 的核取方塊?

TOP

  1. 'Sheets("可排課時段")
  2.    
  3. Private Sub CommandButton1_Click()
  4.    Dim x, y As Object
  5.    Dim obj As OLEObject
  6.    Dim c終點, r終點, i, j, k As Integer
  7.    Dim tf As Boolean
  8.    Set x = Sheets("可排課時段")
  9.    Set y = Sheets("大課表")
  10.    
  11.    x.Range("B50:R100").ClearContents
  12.    r終點 = x.[A4].End(xlDown).Row
  13.    c終點 = x.[B4].End(xlToRight).Column
  14.    For C = 2 To c終點
  15.       k = 49
  16.       For r = 4 To r終點
  17.          If x.Cells(r, C) Then
  18.             k = k + 1
  19.             x.Cells(k, C) = x.Cells(r, 1)
  20.          End If
  21.       Next
  22.    Next
  23.    
  24.    j = 2
  25.    For Each obj In y.OLEObjects
  26.       If TypeOf obj.Object Is MSForms.ComboBox Then
  27.          obj.Object.Clear
  28.          c1 = x.Cells(49, j).End(xlDown).Row
  29.          For i = 50 To c1
  30.             obj.Object.AddItem x.Cells(i, j)
  31.          Next
  32.          j = j + 1
  33.          If j > j1 Then Exit Sub
  34.       End If
  35.    Next
  36. End Sub
複製代碼
圖:可排課時段(執行結果)
  1. 'Sheets("大課表")
  2. Private Sub ComboBox1_Change()
  3.    Dim x, y As Object
  4.    Set x = Sheets("大課表")
  5.    Set y = Sheets("可排課時段")
  6.    
  7.    c1 = 3
  8.    c2 = 22
  9.    If ActiveCell.Column < r1 Or ActiveCell.Column > r2 Then Exit Sub
  10.    
  11.    r1 = 5
  12.    r2 = 10
  13.    If ActiveCell.Row < c1 Or ActiveCell.Row > c2 Then Exit Sub
  14.    
  15.    ActiveCell = ComboBox1.Text
  16. End Sub

  17. Private Sub ComboBox2_Change()
  18.    Dim x, y As Object
  19.    Set x = Sheets("大課表")
  20.    Set y = Sheets("可排課時段")
  21.    
  22.    c1 = 23
  23.    c2 = 38
  24.    If ActiveCell.Column < r1 Or ActiveCell.Column > r2 Then Exit Sub
  25.    
  26.    r1 = 5
  27.    r2 = 10
  28.    If ActiveCell.Row < c1 Or ActiveCell.Row > c2 Then Exit Sub
  29.    
  30.    ActiveCell = ComboBox2.Text
  31. End Sub

  32. '以下請自行複製, 自行改
複製代碼
圖:大課表(執行結果)

TOP

本帖最後由 yen956 於 2014-2-8 17:55 編輯

因為無權下載檔案, 故只好自已另外構想,
根據第一篇文章, 板主好像準備直接
在班級課表上排課, 這易排出某教師
在同時段在不同兩班授課的課表, 宜避免

電腦排課是一大工程, 市上許多現成的(附原代碼), 可參考參看看!
如:
簡易電腦排課系統【周文光】
https://www.google.com.tw/url?sa ... q-s4qn92Ls_9Xd0In2w
附原程式列表(節錄)
  1. #include <stdio.h>

  2. FILE *fp;                                     /* 宣告檔案指標,提供開啟存放輸出結果的檔案 */
  3. int mask_array[8][5];                         /* 宣告mask_array陣列,提供程式判斷可供排課的時段 */
  4. int data_array[20][12];                       /* 宣告data_array陣列,提供存放輸入資料 */

  5. struct class_unit {                           /* 宣告class_unit的結構,提供存放: */
  6.   int teacher_level;                          /* 教師職等(teacher_level) */
  7.   int teacher_no;                             /* 教師編號(teacher_no) */
  8.   int score_no;                               /* 科目編號(score_no) */
  9.   int flag;                                   /* 用來判斷教室是否可供排課的旗標(flag) */
  10. };

  11. struct class_unit classroom[4][8][5];         /* 以class_unit的結構宣告一個classroom陣列 */

  12. void clear_classroom() {                      /* clear_classroom()副程式 */
  13.   int i, j, k;                                /* 用來設定classroom陣列的初始值為0 */

  14.   for(i=0; i<4; i++) {
  15.     for(j=0; j<8; j++) {
  16.       for(k=0; k<5; k++) {
  17.         classroom[i][j][k].teacher_level=0;   /* 設定教師職等(teacher_level)為0 */
  18.         classroom[i][j][k].teacher_no=0;      /* 設定教師編號(teacher_no)為0 */
  19.         classroom[i][j][k].score_no=0;        /* 設定科目編號(score_no)為0 */
  20.         classroom[i][j][k].flag=0;            /* 設定用來判斷教室是否可供排課的旗標(flag)為0 */
  21.       }
  22.     }
  23.   }
  24. }
複製代碼

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題