VBA:図形を真下にコピー

Sub 図形コピーテスト() '現在選択されている図形を複製し、真下に位置させる
    With Selection
        Dim t, h, l
        '現在の選択図形の位置・高さを保存
        t = .ShapeRange.Top
        l = .ShapeRange.Left
        h = .ShapeRange.Height
        'コピーし、貼付け(この時点で選択が貼付け図形に切り替わる)
        .Copy
        .Paste
        '貼付け図形の上端と左端の座標を先の図形の真下に来るように指定
        .ShapeRange.Top = t + h
        .ShapeRange.Left = l
     End With
End Sub

AndroidでのPCページ表示時のページ設定

Androidスマホで、PCページを表示していると、なぜかやたら文字が小さく表示されてしまって、スタイルシートでフォントサイズを指定してもなぜかうまくいかなかったのだが、Android専用の下記のようなmetaタグ指定が必要だったらしい。

※上記のmetaタグ例では”の前に\が入っているので取り除いて下さい。


指定なし(表示が小さ過ぎ)

meta指定あり

VBA: コンボボックスでHTMLセレクトボックス風

VBAのコンボボックスを使っていて、選択候補を設定するのはいいのだが、そのままだと表示した文字列をそのまま選ぶだけになってしまって、その候補に対応したシリアル値などがある場合に、いちいち選択後にif文や配列でその対応関係を与え直す処理をしないといけないことがある。

HTMLのセレクトボックスのように「<option value="1">太郎</option>」のように、表示する項目名と、システム側に与える値とを先に対応付けておいて自動で設定できるようにしたかった

のだが、それにけっこう手間取った。

結論としては、複数列(2列)のコンボボックスで、一方の列を非表示にして表示を1列にし、非表示側の列を値用に指定した(コンボボックス 項目名と取得値の選り分けサンプル.xlsm)。

フォームを用意して、コンボボックス(ComboBox1)とコマンドボタン(CommandButton1)を適当に貼りつける。

元データは、ここではSheet1!A1:B4として用意した。A列に番号、B列に項目名(ここでは名前)が入っている。

コンボボックスの初期化は、フォームのコードで下記のように指定した。

Private Sub UserForm_Initialize()
    With ComboBox1
        .ColumnCount = 2            '表示列数
        .TextColumn = 2             'テキストボックスと.Textに割り当てる列の指定
        .BoundColumn = 1            '.Valueに割り当てる列の指定
        .RowSource = "Sheet1!A1:B4" 'シート範囲を値に指定
        .ColumnWidths = "0;-1"      '列幅を0(非表示)と-1(幅自動調整)
    End With
End Sub

Sub CommandButton1_Click()
    MsgBox "値=" & ComboBox1.Value   '.Valueを取得すると.BoundColumnの列が得られる
End Sub

ここで、「.TextColumn」の指定がなかなか把握しにくく、解説サイトによると「表示列」となっていて、ずっとドロップダウンするときに表示する列の指定かと思っていたのだが、そうではなく、単に選択後のテキストボックスへの表示と.Text属性で得られる列の指定で、ドロップダウン時の表示(幅の)指定は.ColumnWidthで行なう必要があった(幅0で非表示、幅-1か空白で自動調整の指定)。

通常のそのまま複数列にしただけだと、次のような表示となる。

項目を選択した場合は、1列目の値がテキストボックスに入り、.Valueで取得される値も同じ値となる。

一方、上記のコードを使って、複数列でも表示幅を指定して2列目だけの表示にした場合だと次の表示となる。

項目を選択した場合は、.TextColumnで指定した2列目の値がテキストボックスに入り、.Text属性でもこちらが使われる。

コマンドボタンで処理では.Valueを得るようにしていて、ここでは.BoundColumnで指定した1列目の値が得られている。

参考:

Vine Linuxと仮想環境(VM Player, VirtualBox)

2017.4に出たVine Linux 6.5Rを試してみようかと.isoファイルを入手:

で、動かそうとVMware Player (VMware Workstation Player)を久しぶりに入手:

VMware Playerは問題なく動作して、Vine Linuxのインストールも終了するようなのだが、インストール後のVine Linuxの仮想環境を立ち上げようとすると、起動インジケータが1/10くらいのところで止まってVMware Playerからの再起動コマンドにも反応しなくなってしまう。

6.3から6.5にバージョンアップしたら、起動画面で同様に止まるという人がいた。acpi=offにすると起動できるとある。VMwareとは関係なく止まるらしい。

上記、知恵袋からのリンクでさらに、pci=noacpiのほうが良好だとの記述も

ブートオプションのpci=noacpiだと少し起動画面が進んだが、やはり起動せず。acpi=offでは変化なかった…。

その後、シングルユーザを抜けて起動を進めても同様に停止してしまったので、今度は/etc/inittabで、ユーザモード5のXWindowでなく、3のマルチユーザを指定した。こちらなら、ログインプロンプトまで出てログインもできた。

VMware Toolsをインストールしてみると、X Window起動時にそのまま停止するのではなく、少しアイコンがくるくる回るようになった気がするが、それでもすぐに停止してしまって反応がなくなる。

また、X Windowのドライバ指定で、vmwlegacyをvmwareに書き換えるとよいとの話もあったが、効果なし。

いろいろやってもX Windowまでは起動できず、Vine-6.3Rに戻してみて動作させるのと並行して、VirtualBoxでVine-6.5Rを試してみることに。

で、VirtualBoxでVine-6.5Rを動かすと何の問題もなくX Windowまで起動した(かつ、動作も少しキビキビと速いような…?)。

改めて使っていたパソコンを見直すと、以前に作ったVirtualBoxでの前バージョンのVine Linuxの環境が残っていた。前にもVirtualBoxできちんと動作させられていたのかも。

#結局、Vine Linux 6.3Rでの試しはしていない。

Firefoxの右クリックメニュー

どこぞの歌詞サイトだったか、Tips紹介サイトかで、ショートカットキーでも右クリックメニューでもテキストコピーを禁止しているところがあって(Tipsサイトでコピーを禁止するなよ!!)、対応を検索したら、Firefoxだとabout:configからdom.event.contextmenu.enabledをfalseにするというものがあった。

テキストコピー自体はうまくいったのだが、その後そのまま使い続けていると、右クリックでのジェスチャ動作の際にも、Gmailでの独自メニュー表示時にも、Firefoxの右クリックメニューが出てくるようになってしまった。しばらくはFirefoxの更新での不具合かと我慢して使っていたのだが、よく考えるとこの設定のためだった。

dom.event.contextmenu.enabledをtrueの既定値に戻すと、上記2つのツールでもきちんと動作するようになった。あまりテキストコピーを禁止しているサイトは閲覧する機会はないが、この切り替えがもう少し簡単にできるといいのかも(リンクしたサイトによるとShift+右クリックでメニュー表示を強制可能とあるので、そちらで対応可能?)。

←Older