|
こんにちは。
またまたお世話になります。
下記のように時間割シートに
A B C D E F G H I J
1 4/1 4/2 4/3 4/4 4/5 4/6 4/7 4/8 ・・・・
2 金 土 日 月 火 水 木 金 ・・・・
3 1 国 国 算 国 算 国 ・・・・
4 2 算 算 国 算 国 算 ・・・・
5 3 社 社 音 理 体 社 ・・・・
6 4 理 理 体 社 家 理 ・・・・
7 5 体 体 家 総 国 体 ・・・・
8 6 音 音 総 ク 音 ・・・・
9
10 5/1 5/2 5/3 5/4 5/5 5/6 5/7 ・ ・ ・ ・
11 1 日 月 火 水 木 金 土
12 2
13 3
これを
ユーザーホームに取り込みたいと考えています。
ユーザーホームに
スピンボタン2つ(月と週の変更)
テキストボックス2つ(月と週の表示)
ラベルを横に5つ(日付表示用)
その下にテキストボックスを5列6行の30個(各時間割表示)
コマンドボタン3つ
(時間割表示用、更新用、閉じる)
を配置し、
スピンボタンで、月と週を選び、表示ボタンをクリックすると、
その週の時間割を表示し、変更をして、更新ボタンをクリックすると、
変更した内容が、シートに反映されるという仕組みを作りたいと考えているのですが、
シートは毎年使うため、年によって始まる曜日が違います。
土日を除いて月曜から始まるときから、火、水、・・の場合を考え、第一週のラベルを表示させることはできました。後オフセットして下の時間割を取得してテキストボックスに表示させることに挑戦していますが、考え方がまずいのか膨大な量のコードに成ります。
また、汎用性がなく、すべて一つ一つコードを書いていかなければ成りません。
何とかうまく取得して更新する方法は、ないものでしょうか?
よろしくお願いします。
Private Sub CommandButton4_Click()
Dim SPN_x As Integer
Dim SPN_y As Integer
Dim myTxt As MSForms.TextBox
Dim mylbl As MSForms.Label
SPN_x = SpinButton1.Value
SPN_y = SpinButton2.Value
Select Case SPN_x
Case 4 ’4月の時
For p = 1 To 5
Select Case SPN_y
Case p '第p週
SHMD = Worksheets("sheet1").Cells(2, 2).Value
Select Case SHMD
Case 2 ’月曜から始まるときは
For j = 1 To 5
Set mylbl = Form時間割確定.Controls("Label" & j)
mylbl.Caption = Format(Worksheets("sheet1").Cells _
(1, j + 1).Value, "m/d")
Next j
For i = 1 To 6
Set myTxt = Form時間割確定.Controls("TextBox" & i)
myTxt.Value = Worksheets("sheet1").Cells(1, j + 1) _
.Offset(i + 1, -5).Value
Next i
Case 3 ’火曜から始まるときは
For j = 2 To 5
Set mylbl = Form時間割確定.Controls("Label" & j)
mylbl.Caption = Format(Worksheets("sheet1").Cells _
(1, j).Value, "m/d")
Next j
Case 4 ’水曜から始まるときは
For j = 3 To 5
Set mylbl = Form時間割確定.Controls("Label" & j)
mylbl.Caption = Format(Worksheets("sheet1").Cells _
(1, j - 1).Value, "m/d")
Next j
Case 5 ’木曜から始まるときは
For j = 4 To 5
Set mylbl = Form時間割確定.Controls("Label" & j)
mylbl.Caption = Format(Worksheets("sheet1").Cells _
(1, j - 2).Value, "m/d")
For i = 1 To 6
Set myTxt = Form時間割確定.Controls("TextBox" & i + 18)
myTxt.Value = Worksheets("sheet1").Cells(1, j - 2) _
.Offset(i + 1, -1).Value
Next i
For i = 7 To 12
Set myTxt = Form時間割確定.Controls("TextBox" & i + 18)
myTxt.Value = Worksheets("sheet1").Cells(1, j - 2) _
.Offset(i - 5, 0).Value
Next i
Next j
Case 6 ’金曜から始まるときは
For j = 5 To 5
Set mylbl = Form時間割確定.Controls("Label" & j)
mylbl.Caption = Format(Worksheets("sheet1").Cells _
(1, j - 3).Value, "m/d")
Next j
End Select
End Select
Next p
End Select
End Sub
|
|