|
今まで重たいながらも何とか動いていた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の表示場所を移動すると幾重もの影?が画面に残ります。処理が重いからではと素人判断しているのですが、もっと早くなるコードはあるでしょうか?
|
|