Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

excel - OptionButton index issue

I have five option button(Form control) on first five cell of each row. The option button are linked to sixth cell respectively for each row and i want to get the index number in sixth cell.

(The Option Button Form Control returns the value of the Option Button indicating its status to a linked cell.)

Now issue is from the second row onwards the index number of option button is greater than 5 so the value in sixth cell is greater than 5. I want them to be between 1 to 5.

(Index is readonly property of OptionButton class)

How can this be achieved ? (preferably without vba)

Thanks for looking into it.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

AS stated in the Comment using a GroupBox Around each set of Buttons will allow each set to operate independently of each other. In the picture below I removed the GroupBox Names and lined the boarder of the groupboxes with the cell boarders then used cell boarders to almost mask the groupbox so you can't tell they are even there except for the one that is actively selected (the top most one):

enter image description here

On request here is some VBA code. I would suggest that before running this code so set the height of the rows to a minimum of 20 points. AS the groupbox minimum height is 19.5, Also the width of the cell will beused to determine the width of the OptionButtons, so make sure to use a width that will be roomy enough for the text of the OptionButton.

Sub Sample()

Dim Top As Variant, Left As Variant, Height As Variant, Width As Variant
Dim rngActiveRowA As Range, rngEndOfBox As Range
Dim lngActiveRow As Long, lngActiveColumn As Long

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False
End With

For lngActiveRow = 1 To 5

Set rngActiveRowA = Range("A" & lngActiveRow)

Set rngEndOfBox = Range("F" & lngActiveRow + 1)

Top = rngActiveRowA.Top
Left = rngActiveRowA.Left
Height = rngEndOfBox.Top - Top
Width = rngEndOfBox.Left - Left

ActiveSheet.GroupBoxes.Add(Left, Top, Width, Height).Caption = ""

    For lngActiveColumn = 1 To 5

    With ActiveSheet
        Top = .Cells(lngActiveRow, lngActiveColumn).Top
        Left = .Cells(lngActiveRow, lngActiveColumn).Left
        Height = .Cells(lngActiveRow + 1, lngActiveColumn + 1).Top - Top
        Width = .Cells(lngActiveRow + 1, lngActiveColumn + 1).Left - Left
    End With

    With ActiveSheet.OptionButtons.Add(Left, Top, Width, Height)
        .Characters.Text = "OB" & lngActiveColumn
        .LinkedCell = "$F$" & lngActiveRow
    End With

    Next lngActiveColumn

Next lngActiveRow


With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
End With

End Sub

This code will create a groupbox around the first 5 columns of each row for the first 5 rows. It will also populate a Option Button within each cell of that area linked to the F cell in its respective row. and Rename each button to OB + the column number it is in.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...