0

私はマクロを初めて使用するので、これが VBA で可能かどうかわかりません。

4行で構成された多くのミニテーブルで構成されたドキュメントを作成しようとしています. 1 行はタイトルで、チェックボックスがあり、常に表示されます。その下の 3 行には、関連するチェックボックスを選択したときにのみ表示されるデータが含まれています。

このドキュメントには多くのミニ テーブルがあるため、多くのチェック ボックスがあります。同じマクロを適用できるチェックボックスの汎用セレクターがあるかどうか疑問に思っていました。

次のマクロを見たことがありますが、これは 1 つのチェック ボックスにのみ適用され、行 4 のチェックボックスが選択されている場合に行 5、6、および 7 を表示するというすべてのチェックボックスに 1 つを適用する方法があるかどうか疑問に思っていました。行 8 のチェックボックスが選択されている場合、行 9、10、および 11 などが表示されます。

Private Sub CheckBoxRow4_Click()
 Rows("5:6:7").Hidden = CheckBoxRow4.Value
End Sub

より良いアイデアについては、スクリーンショットを参照してください。 エクセル表

ドキュメントを開くときに、デフォルトで下の 3 行を非表示にする方法を教えていただければ幸いです。

違いがある場合は、Excel 2011 for Mac を使用しています。

前もって感謝します。

4

1 に答える 1

1

これにはいくつかのアプローチがあると確信しています。私が最初に考えたのは、チェックボックスを追加して、それらすべてを 1 つのマクロにリンクすることです。アクティブ化すると、いくつかのことを行う必要があります。

  1. 誰がサブを呼び出しているかを調べます (どのチェックボックス)。

  2. その特定のチェックボックスがどこにあるか (どの行) を見つけます。

  3. その下の行を非表示/再表示します。


1:

チェックボックスの名前は簡単です。Application Callerあなたにそれを与えるでしょう。

2:

ここでの本当の問題は場所です。チェックボックスにそのような特定の名前を付けて、それがどの行にあるかを明確にする以外に、ここでは簡単な解決策は見当たりません。チェックボックスを追加すると、「名前付き範囲」入力フィールドに名前を付けることができます。非表示にする必要がある行を指定する名前を付けると、さらに効果的です。のようなもの: HIDE_4_7チェックボックスが行 4 から 7 を非表示/非表示にする必要があることを示します。

3:

行の非表示が簡単になりました。


トータルソリューション:

Sub HideRows()
Dim cbName As String
Dim cbValue As Boolean
Dim s() As String
Dim firstRow As Long
Dim lastRow As Long

On Error Resume Next
cbName = Application.Caller
If Err.Number <> 0 Then Exit Sub 'sub is not called from an application object
cbValue = (ActiveSheet.CheckBoxes(cbName) = xlOn)
If Err.Number <> 0 Then Exit Sub 'sub is not called from a checkbox
On Error GoTo 0


s = Split(cbName, "_")
If s(LBound(s)) <> "HIDE" Then Exit Sub 'name of the shape is not valid
firstRow = Val(s(LBound(s) + 1))
lastRow = Val(s(LBound(s) + 2))

Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = Not cbValue

End Sub

チェックボックスを呼び出して、HIDE_*firstrow*_*lastrow*このサブにリンクする必要があります。それは私の側で動作します。


編集

開いたときにすべての行を非表示にするには、Workbook_Open サブ (ワークブック コード ストレージ内) を使用できます。このようなもの:

Private Sub Workbook_Open()
Dim shp As Shape
Dim s() As String
Dim firstRow As Long
Dim lastRow As Long

Dim cbValue As Boolean
For Each shp In Sheets(1).Shapes
    Debug.Print shp.Name
    s = Split(shp.Name, "_")
    If s(LBound(s)) <> "HIDE" Then GoTo nextShp
    'set checkbox off:
    Sheets(1).CheckBoxes(shp.Name) = xlOff
    firstRow = Val(s(LBound(s) + 1))
    lastRow = Val(s(LBound(s) + 2))

    Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = True


nextShp:
Next shp

End Sub
于 2014-06-01T22:42:28.817 に答える