0

選択したチェックボックスのリストをスプレッドシートに挿入しようとしています。このユース ケースでは、ユーザーは最大 15 項目を選択できます。これは、以下で定義した特定のセルに挿入されます。

次の名前/値のチェックボックスがあります。

Name         Value
==========   =====
chk_week1    1
chk_week2    2
...          ...
...          ...
chk_week15   15

たとえば、ユーザーが chk_week1、chk_week2、chk_week4、および chk_week5 を選択した場合、1,2,4,5 としてセルに挿入する必要があります。

それをよりよく示すために、どのように見えるかの画像を含めました:

ここに画像の説明を入力

各チェックボックスには、上の表にリストされている名前と値があります。これまでに使用したコードは次のとおりです。

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)

' Having difficulty adding the code here
' rng1.Offset(1, 7) = weeks

End Sub

前もって感謝します。

4

2 に答える 2

3

この関数は、セルに入れたい文字列を返します。

Function CheckBoxValues() As String
    For x = 1 To 15
        If Sheets("Main").Shapes("chk_week" & x).OLEFormat.Object.Object.Value Then
            CheckBoxValues = CheckBoxValues & x & ","
        End If
    Next
    if Len(CheckBoxValue <> 0) then
       CheckBoxValues = Left(CheckBoxValues, Len(CheckBoxValues) - 1)
    end if
End Function

または、ループしない方法については、Francis Dean のソリューションを確認してください。

于 2012-10-30T15:24:23.830 に答える
2

関数を使用してチェック ボックスを通過し、目的の形式で文字列を返すことができます (残りのチェック ボックスを追加してください!)。

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)

    ' Having difficulty adding the code here
    rng1.Offset(1, 7) = GetWeeks

End Sub

Private Function GetWeeks() As String

    Dim weeks As String

    'Add values to the string if condition is true
    If chk_week1.Value = True Then weeks = weeks & "1,"
    If chk_week2.Value = True Then weeks = weeks & "2,"
    If chk_week3.Value = True Then weeks = weeks & "2,"
    '...
    If chk_week14.Value = True Then weeks = weeks & "14,"
    If chk_week15.Value = True Then weeks = weeks & "15,"

    'Remove the trailing comma
    If Right(weeks, 1) = "," Then weeks = Left(weeks, Len(weeks) - 1)

    GetWeeks = weeks

End Function

于 2012-10-30T15:22:38.010 に答える