0

テーブルにデータを書き込むいくつかのユーザーフォームコードを使用して実験しています(コードは機能します)。ST は名前付きの範囲です。

With Range(ST)
    .Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
    .Resize(Range(ST).Rows.Count + 1).Name = ST
    .Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1
    .Cells(Range(ST).Rows.Count, 2) = TextBox2.Text
End With

私の質問は:

最終結果に影響を与えることなく、次のように2行目と3行目を書き換えることができるのはなぜですか

    .Cells(.Count).Offset(1, 0).EntireRow.Insert
    .Resize(.Rows.Count + 1).Name = ST

しかし、他の行の変更など

    .Cells(.Rows.Count, 2) = TextBox2.Text

含まれているはずのテーブルの Entry がTextBox2.Text空白のセルを返すようにします。

ありがとう(コードに関するその他のコメントも歓迎します)

編集:

残念ながら、あなたが言ったように動作しないという理由だけで、この質問を投稿しました。ヘルプファイルを詳細に読んだ後、次の行を信じています:

「式は、ブロックに入ると一度評価されます。With ブロック内から式を再割り当てすることはできません。」

次のことを意味します。

.Resize(Range(ST).Rows.Count + 1).Name = ST 

が問題で、2行かかりました:

.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
.Resize(Range(ST).Rows.Count + 1).Name = ST

with ブロックの外で、すべてが期待どおりに機能しました! 私はこれを正しく解釈しましたか?私がファイルをアップロードした場合、誰かが興味を持ちますか? (おもちゃの実験コードは数行未満です)

4

2 に答える 2

2

このWith ... Endステートメントは非常に便利です。コーディングとプログラムの実行を高速化するのに役立ちます。詳細はこちら

あなたの質問に関して; ステートメントRange(ST)内のすべての行で削除できるはずです。With ... End

于 2012-11-22T14:01:23.920 に答える
1

私のコメントに加えて、これらの方法のいずれかでコードを書くことができます。それらはすべて同じことをします。

With Range(ST)
    .Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert
    .Resize(Range(ST).Rows.Count + 1).Name = ST
    .Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1
    .Cells(Range(ST).Rows.Count, 2) = TextBox2.Text
End With

また

With Range(ST)
    .Cells(.Count).Offset(1, 0).EntireRow.Insert
    .Resize(.Rows.Count + 1).Name = ST
    .Cells(.Rows.Count, 1) = .Rows.Count - 1
    .Cells(.Rows.Count, 2) = TextBox2.Text
End With

また

With Range(ST)
    Dim nCount As Long

    nCount = .Rows.Count

    .Cells(.Count).Offset(1, 0).EntireRow.Insert
    .Resize(nCount + 1).Name = ST
    .Cells(nCount, 1) = nCount - 1
    .Cells(nCount, 2) = TextBox2.Text
End With
于 2012-11-22T14:02:39.727 に答える