「プログラムにコマンドを送信しているときに、エラーが発生しました。」となったらDDE無視をOFFに

数日前からエクセルをダブルクリックすると
「プログラムにコマンドを送信しているときに、エラーが発生しました。」
といったエラーになってしまう。

f:id:GARAPON:20200625225028p:plain
エラー

エクセルを一旦起動してからファイルから開いたり、ドラッグアンドドロップすればファイルは開くのだが
メールの添付はひらけなくなるし非常に不便。

対処は何かと調べてみたらすぐ見つかった。
Excel でコマンドをプログラムに送信するときにエラーが発生しました | Microsoft Docs

んでこの対処の中のこれをやるだけでOKでした!

  1. [ファイルオプション] を選択し > Optionsます。
  2. [詳細設定] を選択して [全般] セクションまでスクロールし、[全般] 領域の [動的データ交換 (DDE) を使用している他のアプリケーションを無視する] チェックボックスをオフにします。
  3. [OK] を選択します。


DDEはWindows2.0の頃の遺産でOLEやCOMにとってかわられているので、DDEを使用しているアプリケーションを無視するのは正しいと思うのですが、いまだにWindowsシェルの関連付けとかでは使われているので、そのDDE命令をエクセルが無視しちゃうということなんでしょうかね?
でもだとするとExcelの壮大なバグですよね。。。。


参考DDEをつかったいたずら

DDEが有効だとこんな悪さができます。ここでは電卓立ち上げているだけですが、ファイルひらいただけでCMD乗っ取れるので、実質なんでもできちゃう恐ろしい仕組みです。
binary-pulsar.hatenablog.jp

結合セルを解除して値を埋め、埋めた個所の文字色を変更するショートカット

いやーやはりエクセルは魔術ですね。最高です。
列結合した表を成型するマクロの記事に対しこのブクマ。破壊力抜群ですね。

【エクセルVBA】一瞬で結合セルを解除して値を埋めるマクロ

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter でできるよ。なお実務でスムーズにやると変態扱いされる模様/あ、日本語入力時は=をEnterで確定させてね

2020/06/18 10:05
b.hatena.ne.jp

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter

やっていることはシンプルで

  1. Ctrl+A→Alt→H→M→U   表の結合を解除して、
  2. Ctrl+G→Alt+S→K→Enter 空白セルを選択
  3. Shift+−→↑→Ctrl+Enter 選択したすべてのセルに一つ上のセルを参照する数式を設定

としている。

これが

f:id:GARAPON:20200619210054p:plain
before

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter

一発で

こうなる

f:id:GARAPON:20200619210059p:plain
after



さらに

ALT→h→f→1→↓(矢印キーで任意の色を選ぶ)→ENTER

までやると自動で埋めたセルの文字を薄くなる

f:id:GARAPON:20200619210729p:plain
まさにエクセル芸

つまり

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter
→ALT→h→f→1→↓(矢印キーで任意の色を選ぶ)→ENTER

これが
f:id:GARAPON:20200619210054p:plain

こうなる
f:id:GARAPON:20200619210729p:plain

まとめ

エクセルは最高!

VBAで正規表現のやりかた2種類

久々にVBAをいじいじしてます。
正規表現を使おうとしたら2つやり方があったので整理。
正規表現というよりVBAにおけるインポートのやり方2種類ですね。
参照設定を使うと配布しにくいので、直よびするほうが好きです。

  1. Microsoft VBScript Regular Expressions 5.5を読み込むパタン

参照設定から「Microsoft VBScript Regular Expressions 5.5」を参照設定

    Dim re As RegExp
    Set re = New RegExp
    re.Pattern = "^[0-9]+$"
    re.Test("01234") 
  1. VBScriptを直よびするパタン

CreateObjectで読み込んじゃう

    Dim re As RegExp
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "^[0-9]+$"
    re.Test("01234") 
   


参考
garapon.hatenablog.com
garapon.hatenablog.com

マクロにデジタル署名をつけると快適

セキュリティが強化されてからマクロを使う際に確認ダイアログが出るのが一般的です。
オンデマンドの実施であればダイアログ出てきて、承認してというのでそれほど不便もないのですが
先述した振り分けでマクロ使う場合など自動実行したい場合、確認ダイアログが出ると不便なので
そういう時はデジタル署名を付けましょう。
garapon.hatenablog.com

自分のデジタル署名書をつくる

1,C:\Program Files\Microsoft Office\Office16\SELFCERT.EXE を使って適当な証明書を作ります。
2,署名をつけたいプロジェクトを開いて「ツール」⇒「デジタル署名」で1で作った証明書を選択。


これでOK。
このあとOfficeを再起動して、一度証明書を信頼してしまえば以後ダイアログは出なくなります。

Outlookの自動仕分けからマクロを呼び出す

最近アラートメールをたくさん受信するので快適に処理するためOutlookマクロというかVBAでゴリゴリいじろと思ったら振り分けルールと通知からどうやっても処理の選択にスクリプトが出てこない。
調べてみたら2017 年 5 月以降にリリースされた Outlook 2016 の修正プログラム、または 6 月以降にリリースされた Outlook 2013 の修正プログラムによってOutlookの自動仕分けルール内からスクリプトを呼び出すことができなくなっていたので対処。

以下レジストリに値をセット
Outlook2016 : HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security\
Outlook2013 : HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security\

  • 名前 : EnableUnsafeClientMailRules
  • 種類 : REG_DWORD
  • データ : 1

参考
https://support.microsoft.com/ja-jp/help/3191893/how-to-control-the-rule-actions-to-start-an-application-or-run-a-macro


また、仕分けで呼び出せるマクロは 引数は MailItem または MeetingItem 型のsubであることが必要なのできをつけましょう。
こんな感じ

Sub mailRule(mail As Outlook.MailItem)
   MsgBox mail.Subject
End Sub

AtomCAMを買った

2500円で買えるおもちゃATOMCAMを買ってみた

www.atomtech.co.jp


公式WebがアマゾンPayに対応しているのでポチポチっとしているうちに住所入力などもなく購入できちゃう。

買ってみて驚いたのはセットアップが非常に楽。
箱をあける→USB刺す→アプリのQRコード読み込む→完了
と1分経たずにアプリから操作できる状態になる。

部屋の隅に設置して1日使ってみた感想

いいところ

  • セットアップが楽
  • モーションセンサーが便利。動きがあった録画をしつつさらに携帯にプッシュ通知までしてくれる
  • 複数台使うことが前提でデザインされており監視カメラ的な使い方に向いている
  • 電源さえとれればどこでも設置可能。USBバッテリーでも稼働するので屋外で使うとかもいける
  • 最初から足場があり斜めにしたり上に向かせたりと配置しやすい。
  • 月額費用などがかからない。買い切りで遊び放題
  • アプリからマイク越しにしゃべったりできる。

もう少しなところ

  • 軽いため固定しておかないと簡単に動いてしまう。ネジやマグネットでの固定前提の商品ですね。
  • 防水防塵キット的なものは欲しかった。モーションカメラが使えるので玄関の監視とかに使いたい。

全体的に

2500円でこれなら最高ですね。
ペットの監視とか、子供を家において不在にするときとかあると相当心強いんじゃないでしょうか。

コロナで買ったもの

色々かったのでまとめてみた。
エンタメがなくなると発散の為無駄な買い物が増えますね。

iPhoneSE

iPhone8が貧弱になってきたので購入。
8からの買い替えだと見た目全く変わらず、CPU性能だけアップみたいな感じ。

Rakuten UN-LIMIT

eSIMが使えるので勢いで購入。iPhoneSEに2枚刺しにして運用中。
一度1時間程度謎の圏外になったがあとは無事使えている。
建物やエレベータなど構造物の回避が弱く、よく電波が1ぐらいになって不通になります。
やはりGHz帯(バンド3)は貧弱ですね。一昔前を思い出す使いごごち。速度は30Mbpsぐらいはでていて無料なら悪くない

microSDXCカード 256G

Switchをやりまくっている関連でメモリーカードが不足してきたので購入。どうせならと256を買いました

NintendoSwitchLite コラール

ぶつもり専用機として追加購入。でも結局子供と一緒にやるので通常のスイッチでぶつ森はやっていてLiteはFF12専用機になっている。

Dyson V8 Slim Fluffy

Dysonは2台目。V6を持っているのですが軽いらしいと買ってみたら、軽さよりも音の改善がかなり良い。

Air式ふわふわドーム

所謂ふわふわトランポリン。コロナの勢いで購入するも巨大すぎて即売却。
サイズは確認しないと駄目ですね!

室内テント

ふわふわドーム売却後頭を冷やしてテントを購入。室内サイズなので快適

PC切り替え機

テレワーク本格化に対処するため切り替え機購入。
しかし家より会社が環境がいいよなー