Twitter | Search | |
bug
役に立たない豆知識5 PARAMARRAYキーワードが使えるため以下のコードがエラーにならない。よく検証していないが、配列はVariant配列じゃないといけないみたいだ。 Option VBASupport 1 Sub Main() Hoge 2,3 End Sub Sub Hoge(ParamArray x()) Msgbox(UBound(x)) End Sub
Reply Retweet Like More
bug 14 Jul 19
Replying to @hiddenbugs
役に立たない豆知識6 Optional キーワードが使用可能なため、以下のコードがエラーにならない Option VBASupport 1 Sub Main() Hoge End Sub Sub Hoge(Optional x As Integer = 3) Msgbox(x) End Sub
Reply Retweet Like
bug 14 Jul 19
Replying to @hiddenbugs
役に立たない豆知識7 コメントをおいた行の最後にアンダーバーを置いて行を継続させた場合、その次の行はコメントの続きと判断されるため、Hello Worldと表示された後、表示される内容は「0」であって、「1」ではない(続く)
Reply Retweet Like
bug 14 Jul 19
Replying to @hiddenbugs
役に立たない豆知識7(続き) Option VBASupport 1 Sub Main() Dim a As Integer a = 0 Msgbox("Hello World") ' コメント行が継続される→ _ a = 1 Msgbox(a) End Sub
Reply Retweet Like
bug 14 Jul 19
Replying to @hiddenbugs
役に立たない豆知識8 以下のコードはエラーになる Option VBASupport 1 Sub Main() Dim ParamArray As Integer ParamArray = 1 End Sub
Reply Retweet Like
bug 14 Jul 19
Replying to @hiddenbugs
役に立たない豆知識9 以下のコードはエラーにならない Option VBASupport 1 Sub Main() Dim System As Integer System = 1 End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識10 以下のコードを特定ドキュメントを開いた後で、一回走らせておくと、VBAGlobalsというグローバル変数が登録される。どうも、一度走らせると、VBASupport 0に戻しても存在し続けているみたい。 Option Explicit Option VBASupport 1 Sub Main() End Sub '(続く)
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識10(続き) 元のツイートから「Writerにおいては」を削除。 ThisWordDocやThisExcelDocも同じかな? VBAGlobalsはそれぞれ、SwVbaGlobalsとScVbaGlobalsになる。
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
あ、ThisWordDocやThisExcelDocは SetCurrentComponent から設定されると思うから多分ThisComponentと同じ。多分。
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識10(続き) メソッド名やプロパティ名やらが登場出来る場所があった場合、現在のオブジェクトやドットの前の識別子が指す対象がそのようなメソッドやプロパティを持つか探すのだが、ドット以前に何もなかったときに探す対象にVBAGlobalsが加わる。
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
getやsetから始まるメソッドはどうもプロパティとして扱うようで、SwVbaGlobals::getApplication()があるから以下のコードはエラーにならない。 Option VBASupport 1 Option Explicit Sub Main() Dim x As Object x = Application End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
そうやって取得したものに、本家VBAのオブジェクトのメソッドとかプロパティを実装していったら擬似的には同じコードで動かせるように出来るよね、という発想なんだね、StarBasicにおけるVBASupport 1ってのは。
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
VBAGlobalsと同様に、何気なく書いている関数とかも実はSbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t )から検索している。 その中にはNORMONLY_なやつや COMPATONLYなやつもある
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
だからこのコードはエラーになり、 Option VBASupport 1 Option Explicit Sub Main() Msgbox(Blue(&HAABBCC)) End Sub このコードはエラーにならない Option VBASupport 1 Option Explicit Sub Main() Msgbox(ChrW(12354)) End Sub と書こうとしたら、バグを発見した
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
1回でもVBASupport 0で走らせたらBlueはVBASupport 1でも存在し続けるのかな?もしかして。
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識11 以下共にエラーになる Option VBASupport 1 Sub Main() Dim x As Double x = "z" End Sub ----- Option VBASupport 1 Sub Main() Dim x As Double x = "z" End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識12 以下のコードの答えが4.2になる Option VBASupport 1 Sub Main() Msgbox("1.2" + 3) End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識13 以下のコードは"A"になる。 Option VBASupport 1 Sub Main() Dim x As Variant Msgbox(x + "A") End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識14 以下のコードはTrueになる。 Option VBASupport 1 Sub Main() Msgbox(True AND True) End Sub
Reply Retweet Like
bug 15 Jul 19
Replying to @hiddenbugs
役に立たない豆知識15 以下両方False Option VBASupport 1 Sub Main() Msgbox(EMPTY < EMPTY) Msgbox(3 < "20") End Sub
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
役に立たない豆知識16 (コード記載ミス2回) 以下のxの値は NULL bool SbxValue::Compare( SbxOperator eOp, const SbxValue& rOp ) const よりも前に判断があったことに気づくのが遅れた Option VBASupport 1 Option Explicit Sub Main() Dim x x = (NULL < NULL) End Sub
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
まだミスがある...さすがに通知がうっとおしくなるのも何なので削除再投稿はしないけど 1350行目→1340行目
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
役に立たない豆知識17 Option VBASupport 1 Option Explicit Sub Main() Dim x As Object Dim y On Error Goto Catch y = x Is 3 Exit Sub Catch: Msgbox("Invalid Expression") End Sub
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
役に立たない豆知識17(続き) 前掲のコードではInvalid Expressionが表示される
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
役に立たない豆知識18 同名のPublic変数が複数のモジュールに含まれていたときの挙動に注目したい。以下Mainを実行すると表示されるのは"b","a"だ。 ' Module1 Option Explicit Option VBASupport 1 Public x Sub Main() x = "a" Main2 Msgbox(x) End Sub '(続く)
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
' (続き) ' Module2 Option Explicit Option VBASupport 1 Public x Sub Main2 x = "b" Msgbox(x) End Sub
Reply Retweet Like
bug 16 Jul 19
Replying to @hiddenbugs
役に立たない豆知識19 以下のコードでセルの内容がコピーされる。まぁVBASupport 0ではScVbaGlobals自体使えないわけだが。 Option Explicit Option VBASupport 1 Sub Main Worksheets(1).Cells(1,1) = Worksheets(1).Cells(1,2) End Sub
Reply Retweet Like
bug Jan 6
Replying to @hiddenbugs
役に立たない豆知識20 取り掛かっている問題がさっぱり解けないときに、面白そうなバグレポが挙がっていたから調べてみてた。Option VBASupport 1のとき、Calcで式に「セル」を指定して使うと、その型はその値じゃなくてRangeになるというもの。
Reply Retweet Like
bug Jan 6
Replying to @hiddenbugs
実はこれ、再々ツイート 1回目→2回目: シリーズ物に追加するために削除 2回目→3回目: 省略されたURLをそのままコピーしてリンク切れになっていたので修正
Reply Retweet Like