1

行または列を挿入するのは、一般的にvbaを使用すると簡単です。ただし、ユーザー入力に応じてロックされたセルで自動的に行うのは簡単ではありません。私の質問は 、xlsmとして保存されたロックされたExcelシートにフォーマットされたスタイルの行または列を自動的に挿入する方法です。

説明:

「Sheet1」というシートがパスワード「ABCD」でロックされています。ユーザーは色付きの領域にのみデータを入力できます。ただし、リストが短い場合と長い場合があります。Visual Studioのデータグリッドのように、行と列を自動的に挿入することをお勧めします。

写真をご覧ください。ユーザーが色付きの領域の行9に何かを入力すると、フォーマットされたスタイルの行10が自動的に作成されます(コンポーネントリスト1の場合)。ユーザーが空の行14に何かを入力すると、コンポーネントリスト2に行15が挿入されます。

ユーザーが列Hに何かを入力した場合も同じことで、列Iを作成します

ここに画像の説明を入力してください

構文の書き方はわかりませんが、デザインについての私の考えは次のとおりです。

コンポーネントリスト1(Com1)、コンポーネントリスト2(Com2)、および青い領域(Part_quality)で領域の名前を定義して、プログラムがユーザー入力をチェックする必要がある領域を認識できるようにする必要があります。

ユーザーが定義された名前の範囲でデータを入力したかどうかを確認します。はいの場合、ユーザーが最後の行と最後の列にデータを入力したかどうかを確認します。はいの場合、メモリに保存されている所定のパスワードでファイルのロックを解除し、行/列を挿入してからロックします

4

1 に答える 1

1

ここにリンクの説明を入力してください

これはあなたがしようとしていることですか?

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MRange As Range, rng As Range

    On Error GoTo Whoa

    Set MRange = Range("InputRange")

    '~~> Get the last Row of the range
    Set rng = MRange.Range(MRange.Cells(MRange.Rows.Count, 1), _
    MRange.Cells(MRange.Rows.Count, MRange.Columns.Count))

    '~~> Trap changes in the last row of the range
    If Not Intersect(Target, rng) Is Nothing Then
        'If Application.WorksheetFunction.CountA(rng) > 0 Then
            'Application.EnableEvents = False

            'rng.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        'End If
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

コードはSiddharthRoutによって作成されました

于 2012-05-15T16:28:26.183 に答える