[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『転記方法の切り換えて利用するには』(KK)
よろしくお願いします
ユーザーフォーム上のコマンドボタンで
転記方法の優先順位を選択するには
マクロ-1はListView1を選択してからコマンドボタンにて転記
マクロ-2はListView1を直接クリックして転記
上記2つの転記方法を、切替て利用する方法を教授お願いします。
マクロ-1
Private Sub CommandButton3_Click()
With ActiveCell
If .Column <> 3 Then MsgBox "C列へ"
Else .MergeArea.ClearContents ActiveCell = ListView1.SelectedItem.SubItems(1) ActiveCell.Offset(, 0) = ListView1.SelectedItem.SubItems(1) ActiveCell.Offset(, 1) = ListView1.SelectedItem.SubItems(2) ActiveCell.Offset(, 2) = ListView1.SelectedItem.SubItems(3) ActiveCell.Offset(, 3) = ListView1.SelectedItem.SubItems(4) ActiveCell.Offset(, 4) = ListView1.SelectedItem.SubItems(6) ActiveCell.Offset(0, 5).Select End If AppActivate Application.Caption End With End Sub
マクロ-2
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
同上同一コード
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows7 >
どちらか、一方だけの記述にしておいたらいいのでは? と思いますが、たとえば。
CheckBoxを使い、キャプションを【コマンドボタンを利用する】といったものにして、
CommandButton3_Click の先頭に
If Not CheckBox1.Value Then Exit Sub
ListView1_ItemClick の先頭に
If CheckBox1.Value Then Exit Sub
こうしておくとか。
それと、テーマとは関係ありませんが、実行時のActiveCellがC列じゃないとだめという コードですけど、ActiveCellがある行の C列〜G列に対する処理コードにすればいいのでは?
ついでに、最後にH列を選択している意味が、ちょっとわからないですね? まぁ、何か必要性があるからでしょうけど。
(β) 2015/01/26(月) 05:32
おせっかいかもしれませんが気になったので。
・同じコードが2か所にあるのは、何か変更があった時に2か所、同じように直さなきゃいけない、 そのときにミスって、同じだったはずのロジックが、異なってしまう なんてことがよくあります。 このようなケース、サブプロシジャ立てのするのが一般的です。 ・With ActiveCell でくくっておられるんですが、活用されているのは .MergeArea.ClearContents だけ。 ほかは、With でくくっているのに、 ActiveCell という記述が、ずらっと。 ・また、ListView1.SelectedItem.SubItems(1) 等、深い階層のオブジェクト参照が何度もでてきます。 同じくくるなら、むしろ、With ListView1.SelectedItem とやって使うほうが、すっきりしますし、 効率もよろしいかと。 ・そのSubItemですが、ActiveCell に 2回、ListView1.SelectedItem.SubItems(1) をセットしているのは何か意味が? ・また、最後のListView1.SelectedItem.SubItems(6)は、もしかしたらListView1.SelectedItem.SubItems(5) ?
以下にコード例を。 ところで、ListView、以前から、これはエクセルVBAで使っていいのかだめなのか、その権利関係について さまざまなところで議論がありましたけど、いままでは、【まぁ、自分だけで使う分には、OKだろう・・】 こんな感じで当方でも使ってました。
でも、我が家のPC,昔の Win7+xl2010では使えるんですが、Win8.1+xl2013 では、使おうとすると 使う権利がないというメッセージがでて、プロテクションがかかっています。 まぁ、Microsoftも、やっと本腰を入れて権利の主張に乗り出したというところですかね?
(なお、以下のコード、書いただけでテストしてませんので不具合あればご容赦)
Private Sub CommandButton3_Click() If Not CheckBox1.Value Then Exit Sub CellSet End Sub
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) If CheckBox1.Value Then Exit Sub CellSet End Sub
Private Function CellSet()
If ActiveCell.Column <> 3 Then MsgBox "C列へ" Else With ListView1.SelectedItem ActiveCell.Resize(, 5).Value = Array(.SubItems(1), .SubItems(2), .SubItems(3), .SubItems(4), .SubItems(5)) End With ActiveCell.Offset(0, 5).Select End If
AppActivate Application.Caption
End Function
(β) 2015/01/26(月) 08:29
Win8.0+Excel2013で、利用出来るとのことでした。
安心しました。ListViewを利用したマクロbookを結構作成済でしたから
βさんは、ListBoxで代用しているのでしょうか?
(KK) 2015/01/26(月) 14:30
すでに作成済みのものは、問題なく動きますが、新しく作ろうとした場合、 こちらの環境は、Officeが32ビットですので、Microsoft ListView Control, version 6.0 ではなく Microsoft ListView Control, version 5.0 のほうなんですが、これをユーザーフォームに配置しようとすると ↑でコメントしたような状態になります。 メッセージはライブラリーが見つからない ではなく、正式ライセンスがないというものです。 まぁ、今のところ新規で作る気力がないので、ほおってあります。
(β) 2015/01/26(月) 15:50
(KK) 2015/01/26(月) 16:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.