昨日の投稿内容の続きです。
自分で設定できるところは、なんとかやりました。
ただ、何度かやってもうまくいかない箇所がありますので、そこだけ
お助けいただければ幸甚です。
【仕様】
①Clearコマンドボタン押下後、スプレッドの情報をクリアにする。
名前:cmd_Clear
②Insertボタン押下後、カーソルのあるスプレッドの行に挿入
名前:cmd_Insert
③Tab移動の手順を記した参考HPなどはありますか?
中々Hitしないものですから・・・。
よろしくお願いいたします。
メーカーのサイトのFAQは目を通してますか?
> ①Clearコマンドボタン押下後、スプレッドの情報をクリアにする。
> 名前:cmd_Clear
ActiveRowプロパティとClearRangeメソッドを使用すればいけると思います。
(バージョンによりClearRangeはないかも)
> ②Insertボタン押下後、カーソルのあるスプレッドの行に挿入
> 名前:cmd_Insert
ActiveRowプロパティとInsertRowメソッドを使用します。
(バージョンによりInsertRowはないかも)
> ③Tab移動の手順を記した参考HPなどはありますか?
> 中々Hitしないものですから・・・。
参考HPじゃないですけどスプレッドを使ったプログラムの開発時、
スプレッドのオブジェクトを選択してF1押すとヘルプ出ます。
キーワードで上記のプロパティやメソッドを入力して検索すれば
いろいろわかると思いますよ。
今回はあえてコードの記述はしませんでした。
頑張ってくださいね。
通りすがり様、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
以上になります。
お忙しいところ恐縮です。
何卒よろしくお願いいたします。
> ①についてのコード
>
> 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 にしてください。
> ③についても以下にコードを載せます。
これに関しては目的がわからないのですが…。
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様のコードを基に復習しておきます。
また明日、よろしくお願い申し上げます。
ゆっくりお休みくださいませ。
おはようございます。
ゆうでございます。
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が出てこなかったです。
プロパティ一覧に予め入っていないものについては、機能しないのでしょうか?
追加した行に、テキストの内容を入れればいいのではないのですか?
ぶぶ様
ご返信ありがとうございます。
>追加した行に、テキストの内容を入れればいいのではないのですか?
この意味がよく・・・。
With spv_Main
.Action = SS_ACTION_INSERT_ROW
.MaxRows = .MaxRows + 1
End With
上記のコードの中に追加をしろということでしょうか?
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プロパティを使用してください。
KT様
ゆうでございます。
す、すごいです・・・。
修正部分を加えてコード記述をし、その後テキストボックスに"a"とか適当に入力して実行したら、しっかり挿入されました!!
本当になんとお礼を申し上げたらいいか・・・。
Tab移動については今調べてみます。
取り急ぎご報告まで。
ありがとうございます。
ゆうでございます。
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
というコード記述にしたのですが・・・。
> 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の情報を調べるということに対して慣れがないからかもしれませんが…
なるべくなら調べてくださいね。
KT様
ゆうでございます。
ご指摘ありがとうございました。
調べてはいるものの、私の調べ方が悪いというのもあると思います。
お手数をおかけしました。
今後とも何卒よろしくお願いいたします。
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に変更してみたのですが、ボタン押下しても変化がないようです。
ちょっと調べたところ、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
でした。
KT様
ゆうでございます。
お礼の返事が遅れまして申し訳ありません。
無事にうまく機能いたしました。
改めて御礼申し上げます。
Private Const SS_ACTION_CLEAR_TEXT = 12 'テキストのクリア
Private Sub cmd_Clear_Click()
KT様が設定されたようにプロシージャを2つ設定するということなんですね。
番号によって、機能が異なるのだと理解いたしました。
本当にいつも勉強になります。
ツイート | ![]() |