スプレッドの情報をクリアにするには?


ゆう  2006-10-26 21:59:47  No: 97035

昨日の投稿内容の続きです。
自分で設定できるところは、なんとかやりました。
ただ、何度かやってもうまくいかない箇所がありますので、そこだけ
お助けいただければ幸甚です。

【仕様】

①Clearコマンドボタン押下後、スプレッドの情報をクリアにする。

名前:cmd_Clear

②Insertボタン押下後、カーソルのあるスプレッドの行に挿入

名前:cmd_Insert

③Tab移動の手順を記した参考HPなどはありますか?
中々Hitしないものですから・・・。

よろしくお願いいたします。


通りすがり  2006-10-27 00:19:12  No: 97036

メーカーのサイトのFAQは目を通してますか?


KT  2006-10-27 00:52:55  No: 97037

> ①Clearコマンドボタン押下後、スプレッドの情報をクリアにする。
> 名前:cmd_Clear
  ActiveRowプロパティとClearRangeメソッドを使用すればいけると思います。
  (バージョンによりClearRangeはないかも)

> ②Insertボタン押下後、カーソルのあるスプレッドの行に挿入
> 名前:cmd_Insert
  ActiveRowプロパティとInsertRowメソッドを使用します。
  (バージョンによりInsertRowはないかも)

> ③Tab移動の手順を記した参考HPなどはありますか?
> 中々Hitしないものですから・・・。
  参考HPじゃないですけどスプレッドを使ったプログラムの開発時、
  スプレッドのオブジェクトを選択してF1押すとヘルプ出ます。
  キーワードで上記のプロパティやメソッドを入力して検索すれば
  いろいろわかると思いますよ。

今回はあえてコードの記述はしませんでした。
頑張ってくださいね。


ゆう  2006-10-27 01:43:23  No: 97038

通りすがり様、KT様

ゆうでございます。
お返事ありがとうございました。

to KT様

私のPCに入っているスプレッドは2.5Jとかいてあったのですが・・・。
KT様のご指摘どおり、オンラインヘルプで検索してみました。
私のコーディングの間違いは100も承知なのですが、どこをどう修正すれば
いいかご教示いただけないでしょうか?

①についてのコード

Private Sub cmd_Clear_Click()

    With spv_Main
        .ColHidden = True
        .RowHidden = True
    End With

End Sub

②についてですが、『InsertRows メソッド』というものを発見しました。
構文は、object.InsertRows (row, count)
というようになっていたのですが、設定がうまくいきません。

Private Sub cmd_Insert_Click()

Dim Row As Long
    With spv_Main
        .ActiveRow
    spv_Main.InsertRows(1,10)
    End With
    
End Sub

というようにお恥ずかしいコードに・・・。

③についても以下にコードを載せます。

Private Sub Form_Load()

    'Tab移動の設定
    spv_Main.ProcessTab = True
    
End Sub

以上になります。
お忙しいところ恐縮です。
何卒よろしくお願いいたします。


KT  2006-10-27 02:59:57  No: 97039

> ①についてのコード

> Private Sub cmd_Clear_Click()

>     With spv_Main
>         .ColHidden = True
>         .RowHidden = True
>     End With

> End Sub
  ColHidden、RowHiddenは"隠す"処理であってデータクリアの処理ではないです。(使用するプロパティが違います。)
  バージョンが2.5Jとのことですので…
  Actionメソッド(プロパティだったかも)を使用するかと思います。
  たしか…SS_CLEAR_TEXTとかを使ったような…
  
  With spv_Main
    .Col = -1           '-1は全部の列を指定
    .Row = .ActiveRow   '選択されている行を指定
    .Action = SS_CLEAR_TEXT  '←SS_CLEAR_TEXTは自信ありません…
  End With

> ②について

> Private Sub cmd_Insert_Click()

> Dim Row As Long
>     With spv_Main
>         .ActiveRow
>     spv_Main.InsertRows(1,10)
>     End With
>     
> End Sub
  これは記述が違いますね。
  With spv_Main
    spv_Main.InsertRows(.ActiveRow,10)  '10は"10行追加"という意味…
  End With

  10行追加するならこのままで。
  1行追加なら  10→1  にしてください。

> ③についても以下にコードを載せます。
  これに関しては目的がわからないのですが…。


ゆう  2006-10-27 06:09:42  No: 97040

KT様

ゆうでございます。
ご返信、本当に感謝致します。

>これに関しては目的がわからないのですが…。

言葉足らずで誠に申し訳ありませんでした。
どのような仕様かを記述しなければいけませんでしたね。

改めて③について・・・。
Tab移動順

①「Code」→「Name」→「Address」テキストボックス
②「Insert」→「Delete」→「Clear」→「End」ボタン

※使用オブジェクトについて
txt_Code
txt_Name
txt_Address

cmd_Insert
cmd_Delete
cmd_Clear
cmd_End

デフォルト(?)の状態では、普通にTabを押していくと、順番に移動していくのです。
でも、これじゃ意味がないのですよね?
これをコードで記述しろという内容なのでしょうから。

①と②については、KT様のコードを基に復習しておきます。
また明日、よろしくお願い申し上げます。
ゆっくりお休みくださいませ。


ゆう  2006-10-27 18:38:16  No: 97041

おはようございます。
ゆうでございます。

To KT様

昨日はご対応いただきありがとうございました。
今朝、早めに出社してコード記述してみました。
先に、②のInsertコマンドボタン押下時のコードを載せておきます。

【仕様】

「Code」「Name」「Address」テキストボックスの情報をカーソルの当たっているスプレッドの行に挿入する

Private Sub cmd_Insert_Click()
  
    With spv_Main
         .Action = SS_ACTION_INSERT_ROW
         .MaxRows = .MaxRows + 1
    End With

End Sub

このコードを基に実行すると、行だけ増えていくのです。
これだと仕様に反していることになるのですよね?

仕様は、元々テキストボックスに、例えば"a"という文字列が入っていた場合に、Insertボタンを押すとカーソルの当たっている行に反映されるようにコーディングしなさい、というふうに理解をしました。

.MaxRows = .MaxRows + 1ではなくて、挿入のプロパティがいるように思いましたが、適切なものが出てきません。

KT様にご教示いただいたInsertRowsが出てこなかったです。
プロパティ一覧に予め入っていないものについては、機能しないのでしょうか?


ぶぶ  2006-10-27 20:31:13  No: 97042

追加した行に、テキストの内容を入れればいいのではないのですか?


ゆう  2006-10-27 20:45:02  No: 97043

ぶぶ様

ご返信ありがとうございます。

>追加した行に、テキストの内容を入れればいいのではないのですか?

この意味がよく・・・。

With spv_Main
         .Action = SS_ACTION_INSERT_ROW
         .MaxRows = .MaxRows + 1
End With

上記のコードの中に追加をしろということでしょうか?


KT  2006-10-27 21:37:57  No: 97044

InsertRowsなかったですか…
Dim SelRow as Long

With spv_Main
  SelRow = .ActiveRow
  .Action = SS_ACTION_INSERT_ROW
  .MaxRows = .MaxRows + 1
  .SetText 1, SelRow, txtCode.Text
  .SetText 2, SelRow, txtName.Text
  .SetText 3, SelRow, txtAddress.Text
End With

多分こうですかねぇ…。
(SetTextがない場合はTextプロパティを使用すればいいと思います。)

Tabで移動する順番を変更するには
各オブジェクトにあるTabIndexプロパティを使用してください。


ゆう  2006-10-27 21:53:24  No: 97045

KT様

ゆうでございます。
す、すごいです・・・。
修正部分を加えてコード記述をし、その後テキストボックスに"a"とか適当に入力して実行したら、しっかり挿入されました!!
本当になんとお礼を申し上げたらいいか・・・。

Tab移動については今調べてみます。
取り急ぎご報告まで。
ありがとうございます。


ゆう  2006-10-27 22:38:47  No: 97046

ゆうでございます。
TabIndexプロパティの設定ですが、以下のように設定をいたしました。
補足と訂正をお願いいたします。

テキストボックスの設定

Private Sub txt_Code_Change()

    spv_Main.TabIndex = 1
    
End Sub

Private Sub txt_Name_Change()
    
    spv_Main.TabIndex = 2

End Sub

Private Sub txt_Address_Change()

    spv_Main.TabIndex = 3

End Sub

cmd_Insert,cmd_Delete,cmd_Clear,cmd_Endボタンに関しては、
With構文の中に、それぞれ

.TabIndex = 4
.TabIndex = 5
.TabIndex = 6
と追記して、最後の「End」ボタンに関しては

    'Tab移動の設定
    spv_Main.TabIndex = 7

というコード記述にしたのですが・・・。


KT  2006-10-27 22:58:00  No: 97047

> Private Sub txt_Code_Change()

>     spv_Main.TabIndex = 1
>     
> End Sub
これは日本語で書けば
"txtCodeの内容が変わったらspv_Mainのタブの順番を変更しなさい。"
となります。

ゆう様  の目的はおそらく
"起動時にタブ移動の順番を設定する。"  ということだと思いましたが…

もし上記目的に間違いなければ
Form_Loadイベントあたりで各オブジェクトのTabIndexを設定すればいいです。

Private Sub Form_Load()
  txtCode.TabIndex = 0
  txtName.TabIndex = 1
        :
        :
  cmdClear.TabIndex = 5
  cmdEnd.TabIndex = 6

End Sub

> TabIndexプロパティの設定ですが、以下のように設定をいたしました。
> 補足と訂正をお願いいたします。
  VBの情報を調べるということに対して慣れがないからかもしれませんが…
  なるべくなら調べてくださいね。


ゆう  2006-10-27 23:18:30  No: 97048

KT様

ゆうでございます。
ご指摘ありがとうございました。
調べてはいるものの、私の調べ方が悪いというのもあると思います。
お手数をおかけしました。
今後とも何卒よろしくお願いいたします。


ゆう  2006-10-27 23:40:12  No: 97049

KT様

ゆうでございます。
先ほどはありがとうございました。
たった今、内容を打っていて誤って消してしまいましたので、再度載せておきます。

【仕様】Clearボタン押下時にスプレッドの情報をすべてクリア

Private Sub cmd_Clear_Click()

    'スプレッド情報のクリア
    With spv_Main
        .Col = -1
        .Row = .ActiveRow
        .Action = SS_ACTION_CLEAR
        ^^^^^^^^^^^^^^^^^^^^^^^^^
    End With

End Sub

SS_CLEAR_TEXT→SS_ACTION_CLEARに変更してみたのですが、ボタン押下しても変化がないようです。


KT  2006-10-28 00:42:18  No: 97050

ちょっと調べたところ、SS_ACTION_CLEARじゃなかったですね…。

Private Const SS_ACTION_CLEAR_TEXT = 12  'テキストのクリア

Private Sub cmd_Clear_Click()
  'スプレッド情報のクリア
  With spv_Main
    .Col = 1
    .Row = 1
    .Col2 = .MaxCols
    .Row2 = .MaxRows
    .BlockMode = True  ' セルブロックを有効にする
      .Action = SS_ACTION_CLEAR_TEXT
    .BlockMode = False  ' セルブロックを無効にする
  End With
End Sub

でした。


ゆう  2006-10-28 02:11:43  No: 97051

KT様

ゆうでございます。
お礼の返事が遅れまして申し訳ありません。
無事にうまく機能いたしました。
改めて御礼申し上げます。

Private Const SS_ACTION_CLEAR_TEXT = 12  'テキストのクリア

Private Sub cmd_Clear_Click()

KT様が設定されたようにプロシージャを2つ設定するということなんですね。
番号によって、機能が異なるのだと理解いたしました。
本当にいつも勉強になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加