0

我正在尝试填充大小未知的范围,因为用户可以在第一组中选择多达 15 个项目。这将被插入到某一行。

我有一个带有以下名称/值的复选框:

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

例如,如果用户选择chk_week1chk_week2chk_week4chk_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)

deptCodeSplit = Split(cbo_deptCode.Value, " ")

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

End Sub
4

1 回答 1

1

已标记复选框的值显示在 Linkedcell 中。两者都可以从复选框属性中分配。

让我们为每个单独的复选框分配从 1 到 15 的值,Linkedcells 在单元格 A1 到 A15 中,对于勾选的复选框具有从 1 到 15 的唯一值,或者对于未选中的复选框为空白。

B列中的相应单元格将用于顺序合并:

B1:

=IF(A1<>"",A1,"") 

B2 至 Bn:

=IF(AND(A2<>"",B1<>""),B1&" ,"&A2,IF(AND(B1="",A2<>""),A2,B1))

公式可以无限向下复制,所需的字符串将在最后一行。

要在 VBA 中完成相同的操作:

Function ValuesFromRange(Rng As range, Optional Delimiter As String)

Dim c As range
Dim txt As String

If Delimiter = "" Then Delimiter = ","
  txt = ""

   For Each c In Rng
     If Len(c.Value) > 0 Then
       If Len(txt) = 0 Then
          txt = c.Value
        Else
          txt = Trim(txt) & Delimiter & c.Value
        End If
     End If
   Next

 ValuesFromRange = txt

End Function

电子表格示例: http ://www.bumpclub.ee/~jyri_r/Excel/ValuesFromRange.xls

于 2012-10-29T12:21:19.943 回答