|
>私のプログラムの動作と同じです。
>ただ違いはBoundColumnのデフォルトで、
>
>ichinoseさんのプログラム
> デフォルト:2 →Changeイベント発生
> プロパティを1に変更 →発生せず
>私のプログラム
> デフォルト:1 →Changeイベント発生
> プロパティを2に変更 →発生せず
>
>この違いは何でしょうか。
>と言いますかそれ以前に、なぜBoundColumnが終了時に変更されて
>しまうのかが分かりません。
ん?終了時に
BoundColumnの値が変更されてしまうわけではありませんよ!!
私が提示した例では、BoundColumnの規定値(1)を2に変更したことが
影響したと申し上げているのですよ!!
>
>現状、Booさんに教えていただいたフラグ方式でとりあえず
>動いていますので急ぎではないのですが、参考までに教えて
>頂ければ嬉しいです。
回避方法は、フラグで判断するが良いと思います。
原因はバグだと私は思っています・・・が、
さて、MS社は何て言っているのかなあ?
再度、新規ブックの標準モジュールに
(Sheet1、Sheet2というシート名が存在するブック)
'============================================================
Sub 設定()
Dim olecomb As OLEObject
Dim r As Range
With Worksheets("sheet2")
With .Range("a1:b5")
.Formula = Array("=row()", "=char(row()+64)")
.Value = .Value
End With
End With
With Worksheets("sheet1")
Set r = .Range("b5:d6")
With .OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=r.Left, Top:=r.Top, Width:=r.Width, Height:= _
r.Height)
.Object.Style = 2
.ListFillRange = "sheet2!a1:b5"
.Object.ColumnCount = 2
.Object.BoundColumn = 1
.Object.TextColumn = 2
End With
End With
ThisWorkbook.SaveAs "D:\My Documents\cmbsample.xls"
' 適当な名前で保存します。
End Sub
として、設定を実行してください。
さらにSheet1のモジュールに
'==================================================================
Private Sub ComboBox1_Change()
MsgBox "ComboBox1.Value = " & ComboBox1.Value & vbCrLf & _
"ComboBox1.Text = " & ComboBox1.Text
End Sub
として、上書き保存を行ってください。
前回と同じようにコンボボックスを適当に選択した後、
ブックを閉じる操作を行ってください。
保存の有無で「いいえ」を選択します。
いかがですか?
また、Changeイベントが発生しましたね?
しかも、ComboBox1.value と
Textプロパティが同じ値を表示していませんか?
原因はこれだと思っています。
最初の例も今回の例も ComboboxのValueプロパティとTextプロパティが
違う値を持つような設定になっています。
ブックを閉じる時に何故かこのValueとTextを同じにしようとする処理が
なされています。
Changeイベントが発生するのはこのためです。
値が変更されていますからね!!
バグだと思うでしょう??
本当は、この再現手順をsarai さんに記述してほしかったのです。
何が原因か分からなければ、私ならコンボボックスのプロパティは、
プロパティウインドウに出ているプロパティの値は全て記述します。
当然、コードも・・・。
一人でも多くの方に再現しもらう最大限の努力(記述)をしてください。
この手の問題は、再現できなければお話になりません。
(今回は、解決策は見つかりましたけどね!!)
逆に再現さえしてもらえば、色んな意見がもらえますよね!!
次回は是非、そういう記述を心がけてください。
|
|