| 
    
     |  | 今まで重たいながらも何とか動いていたUser_Formが、あるcomboboxに係るコードを追加したら、「実行時エラー380 Valueプロパティを設定できません。プロパティの値が不正です。」とのエラーメッセージが表示され動かなくなりました。 「ヘルプ」をクリックしても「このトピックは存在しません。製造元に・・・・(129)」と表示されます。(excel97を使用しています。)
 
 以下に1.しようとしたこと と、2.コードを記述しますので、対処方法をご教示ください。
 
 1.毎月の月給処理用のUser_Formです。
 A列〜CR列、80行(名、行は毎月若干の増減があります)のリストデータ形式のsheet("支給台帳")にUser_Formを使って入力しています。5月分はうまく入力できました。
 が、試行してみて、基本給や通勤費、社会保険料や所得税の扶養家族数等、毎月毎月変動のないものは、別シート(”給与マスター”)に登録させておいて、キーとなる社員IDをcomboboxで選択して、text基本給やtext通勤費等に取り込めるように改良しようと、以前この質問箱で回答いただいたComboboxの複数列表示と他のtextへの取り込みのVBAを盗用して加筆しました。加筆したとたんに動かなくなりました。
 
 2.以下にコードを記述しますので、改良点、対処法をご教示ください。
 (なお手書きのため、大文字、小文字等の混在をお許しください。)
 
 
 Option Explicit
 
 Dim TBL(1 to 90) as Control
 Dim データ範囲 as range
 Dim r as Range ←今回の追加
 
 Private sub Userform_initialize()
 
 '///////// ココから新規追加(質問箱から盗用)
 Set r = worksheets("仮マスター").Range("A1").CurrentRegion
 Set r = intersect(r,r.Offset(1))
 
 With Me.Combo社員ID
 .rowsource = r.address(external:=True)
 .ColumnHeads = True
 .TextColumn = 1
 .BoundColumn = 2
 .ColumnCount = 2
 .ColumnWidths = "40:60"
 End with
 '////// ココまで
 
 Spin移動.Max=レコード数取得 + 1
 
 set TBL(1) = text支給年月日
 set TBL(2) = text種別
 set TBL(3) = Combo社員ID ←このIDにより以下の約20個のtextboxに値を取得
 set TBL(4) = text氏名
 ・
 ・
 set TBL(96) = text差引支給額 ’Combo社員ID以外は全てtextBoxです
 
 Set データ範囲 = worksheets("支給台帳").Range("A1").currentRegion
 
 if データ範囲.Rows.Count = 1 then
 Else
 データ表示 2
 End If
 End Sub
 
 Pubulic Finction レコード数取得() as integer
 レコード数取得 = worksheets("支給台帳").Range("A1").currentRegion.Rows.Count -1
 End Function
 
 Public Sub データ表示(行数 as integer)
 Dim Cnt as integer,vntData as Variant
 vntData = worksheets("支給台帳").Range("A1").currentRegion.Rows(行数).value
 For Cnt = 1 to 96 Step 1
 TBL(Cnt) = vntData(1,Cnt) ←エラーメッセージのとき、ここが黄色に反転
 Next
 Textレコード.value = Spin移動.value -1 &"/"&レコード数取得
 End Sub
 
 Private Sub Spin移動_change()
 if データ範囲.Rows.Count<> 1 then
 データ表示(Spin移動.Value)
 End if
 End sub
 
 Private Sub button追加_Click()
 Dim addrow As integer
 addrow= worksheets("支給台帳").Range("A1").currentRegion
 
 データ書き込み (addrow)
 Set データ範囲 = worksheets("支給台帳").range("A1").CurrentRegion
 Spin移動.Max = データ範囲.Rows.Count
 Spin移動.value = データ範囲.Rows.Count
 データ表示 (addrow)
 End Sub
 
 Public Sub データ書き込み(行数 as integer)
 Dim Cnt As integer,vntData() as Variant
 Application.screenupdating = false
 Redim vntData(1 to 1,1 to96)
 For Cnt = 1 to 96
 vntData(1,cnt)=TBL(cnt).value
 Next
 worksheets("支給台帳").Range("A1").currentRegion.Rows(行数).value = vntData
 Application.screenupdating = true
 End Sub
 
 Public Sub button更新_click()
 データ書き込み (Spin移動.value)
 End Sub
 
 private Sub button削除_click()
 データ範囲.Rows (Spin移動.value).Delete
 データ表示 (Spin移動.value)
 Set データ範囲 =worksheets("支給台帳").Range("A1").CurrentRegion
 Spin移動.Max = データ範囲.Rows.Count
 End sub
 
 private Sub button終了_click()
 
 activeworkbook.Save
 unload me
 
 End sub
 '////////////////////////// ココから新規追加(質問箱から盗用)
 Private sub Combo社員ID_Change()
 Application.screenupdating = False
 With Me.Combo社員ID
 if .ListIndex < then Exit Sub
 Combo社員ID.value = .List(.ListIndex, 0)
 Text氏名.value = .List(.ListIndex, 1)
 Text所属.value = .List(.ListIndex, 2)
 ・
 ・
 ・
 Text標準報酬月額.value = .List(.ListIndex, 22)
 Text市県民税.value = .List(.ListIndex, 23)
 End With
 set r = Noting
 Application.screenupdating = True
 End Sub
 
 長々と記述してしましましたが、以上がUserForm上の、追加、更新、削除、終了のcommandbuttonと新規追加したCombo社員IDに係るコードです。
 まだまだ続くのですが、以下は各textbox間で、入力した数値により、afterupdateで、それぞれ時間外手当や各種手当て、合計、社会保険料算出、源泉徴収税計算のVBAを記述しています。
 
 エラー時に黄色に反転する"TBL(Cnt) = vntData(1,Cnt)"のコードとCombo社員IDから取得する値(value)との整合性がとれていないためでしょうか?
 なんとか基本的(固定的)項目は、給与マスターの値をCombo社員IDから取得したID(数値データ)で、Vlookup的に取得できればと考えています。
 ご教示お願いします。
 
 あと欲張って申し訳ありませんが、うまく入力できていたときも、User_Formの表示場所を移動すると幾重もの影?が画面に残ります。処理が重いからではと素人判断しているのですが、もっと早くなるコードはあるでしょうか?
 
 
 |  |