0

チェックボックス、ラジオ、ドロップダウンの値を VBA フォームから Excel スプレッドシートに挿入することに関して、多面的な質問があります。現在、コードでいくつかのケース シナリオに対応しようとしています。

挿入したい項目の最初のセットは、次の名前/値を持つチェックボックスです。

Name         Value
==========   =====
chk_week1    1
chk_week2    2
chk_week3    3
chk_week4    4
chk_week5    5
chk_week6    6
chk_week7    7
chk_week8    8
chk_week9    9
chk_week10   10
chk_week11   11
chk_week12   12
chk_week13   13
chk_week14   14
chk_week15   15

ユーザーが複数のチェックボックスを選択した場合、フォームに挿入する必要があります。1,2,4,5たとえば、ユーザーが を選択した場合chk_week1, chk_week2, chk_week4 and chk_week5です。


挿入する項目の 2 番目のセットは、フレーム内に次の名前/値を持つラジオ グループからの単一の選択ですfr_Priority

Name         Value
==========   =====
priority_y   Yes
priority_n   No

したがって、ユーザーが選択すると、Excel スプレッドシートpriority_yYes挿入されます。


挿入したい項目の 3 番目のセットは、3 つのドロップダウンからのものです。これはかなり簡単ですが、ユーザーは 3 つのドロップダウンすべてで選択を行う必要があります。好みに興味がない場合は、 を選択します'No Preference'。ユーザーがこの決定を下した場合、セルには何も挿入されません。次の名前/値が存在します。

Name         
==========   
cbo_fac1   
cbo_fac2
cbo_fac3   

たとえば、ユーザーが cbo_fac1 、 cbo_fac2 、 cbo_fac3 で選択した場合挿入れる111,222,No Preferenceだけです。が選択されている場合は、挿入されるだけです。111,222111,No Preference,No Preference111


これは私が今使っているコードです:

Private Sub btnSubmit_Click()

Dim ws As Worksheet
Dim rng1 As Range
Set ws = Worksheets("main")

' Copy the data to the database
' Get last empty cell in column A
Set rng1 = ws.Cells(Rows.Count, "a").End(xlUp)

deptCodeSplit = Split(cbo_deptCode.Value, " ")

rng1.Offset(1, 0) = deptCodeSplit(0)
rng1.Offset(1, 1) = cbo_moduleCode.Value
rng1.Offset(1, 2) = cbo_moduleName.Value
rng1.Offset(1, 3) = txt_studentNo.Value
rng1.Offset(1, 4) = cbo_day.Value
rng1.Offset(1, 5) = cbo_period.Value
' rng1.Offset(1, 6) = weeks
rng1.Offset(1, 7) = cbo_weeks.Value
rng1.Offset(1, 8) = cbo_semester.Value
rng1.Offset(1, 9) = cbo_rounds.Value
rng1.Offset(1, 10) = cbo_priority.Value
' rng1.Offset(1, 11) = lectureStyle
rng1.Offset(1, 12) = txt_noRooms.Value
rng1.Offset(1, 13) = cbo_park.Value
' rng1.Offset(1, 14) = fac
' rng1.Offset(1, 15) = pref
rng1.Offset(1, 16) = txt_specialReq.Value

End Sub

よろしくお願いします!

4

1 に答える 1

1

あなたが何に問題を抱えているのかを明確にすることで、より良い答えを得ることができます。ユーザーは最初のセットで最大15個、2番目のセットで1個、3番目のセットで最大3個のアイテムを選択できるため、サイズが不明な範囲を埋めようとしているように聞こえます。したがって、最初に、ユーザーが選択したアイテムを次のように保持する配列を作成します。

      Dim group1 as arraylist
      Dim group2 as arraylist
      Dim group3 as arraylist

      ' Go through checkboxes and add values if they are checked
      if checkbox1.checked = true then
       group1.add(1)
      end if ' do that for each checkbox or if you have a checklistbox do 

      for each thing in checklistbox1
        if thing.checked=true then
        group1.add(checklistbox1.indexof(thing)-1)
        end if
        next

グループ2とグループ3に対して同じタイプの手順を実行します

        if not dropdown1.selecteditem = "no preference" then
          group3.add(...)
         end if ' so an and so forth

これで、group1、group2、group3を次のようにシートに追加できます。

         Dim StartingRange as range = ws.Cells(Rows.Count, "a").End(xlUp)
         Dim total_items as integer = (group1.items.count + group2.items.count + group3.items.count)

行と列のどちらの方法でアイテムを追加するかはわかりませんが、開始範囲のサイズを...で指定できます。

           startrange.resize(totalitems, 1) ' resizes range to 1 column and total items in rows

それから

           Dim cell as variant

          for each cell in startrange
            cell.value = group1.item(0)
            group1.removeat(0)   ' this effectively moves the item at index 1, to index 0
             next 

残りのグループのために行う

それが役に立たない場合は私に知らせてください。私のVBAは少し錆びているので、「Set」範囲などのコードでいくつかのことを見逃している可能性があります。そのため、お詫び申し上げます。

于 2012-10-29T03:15:24.967 に答える