へっぽこ薬剤師のチラシの裏

病院で働く薬剤師のブログ(忘備録)です。内容に間違いがありましたら、コメントでご指摘下さると犬のように喜びます<ワンワン

データの処理にExcelのマクロを使っていたのですが、使用システムの変更の都合で処理するデータの行数が10倍くらいに増えたあたりから、ときどき次のようなエラーが出るように。

実行時エラー -2147417848(80010108)
'Copy'メソッドは失敗しました: 'Range'オブジェクト

・エラーが出るタイミングは「Worksheets("xxx").Range("A1:AD40000").Copy Worksheets("yyy").Range("A1")」のようなCopyメソッドを実行したとき
・マクロを実行するタイミングによって、エラーが出る場合もあれば、エラーが出ない場合もある。
・エラーが出なくても、途中が空白になっていたりして正常にコピペできていないことがある(42359行のうち、6962~13758行目が空白になっていたりと)
・ステップインで1手順ずつゆっくり実行していくと、正常に動作する


原因は何かなと色々ぐぐっていると、エクセルの学校というサイトでこのような書き込みを発見
> 1行ずつ実行というのはステップ実行をしたということでしょうか?
> 計算ではありませんが、ステップ実行をすると問題なく処理される。でも普通に実行するとエラーになるというのは
> 実はVBAの世界ではめずらしいことではありません。
> VBAはインタープリータで、かつ、1行ごとに確実に処理しているのではなく、1行を、その処理をつかさどる機能に丸投げ。
> で、その行の実行が終わったかどうかはおかまいなしに、次の行の実行にすすむ。
(中略)
> まぁ、エラートラップに限らず、実際には、処理が間に合っていないのに実行されるというのは、ありうることかと。
> 困った時の DoEvents。適切な場所に、それをいれこめばOKになるケースもあります。

神!!!!!!

ということでこのエラーは「Windowsのクリップボードに巨大なデータを投げたせいで処理に時間がかかり、その処理が終わる前に次の行が実行されてしまうこと」が原因っぽい。
原因がなんとなくわかったので対処方法をググっていると、エクセルの神髄というサイトでクリップボードを使わないセルのCopy方法を発見。

Range("G1:K10").Value = Range("A1:E10").Value   '値のみのコピー
Range("C1:C3").Value(xlRangeValueXMLSpreadsheet) = Range("A1:A3").Value(xlRangeValueXMLSpreadsheet)  '値と書式のコピー

神!!!!!!

んで、Copy処理のほとんどをRange(xxx).Value  = Range(yyy).Valueで処理するように書き換えた所、当該箇所ではエラーが起きなくなりました!


また、どうしてもCopyメソッドを使いたい箇所は

Worksheets("xxx").Range("A1:AD40000").Copy
DoEvents

Worksheets("yyy").Range("A1").PasteSpecial Paste:=xlPasteValues
DoEvents

のように、DoEventsでWindowsのクリップボード転送を待つようにした所、エラーが発生しなくなりました!!!


こんなことがあるとは知らなかったので久しぶりにExcelではまりましたが、偉大なる先人達の神サイトのおかげで助かりました、、、ほんとありがたい、、、

まぁ、今回の事態を引き起こしたのは面倒くさがって数十万セル以上をまとめてコピペしようとしたのが原因なんですがね!!!!!!!!!ちゃんと必要最低限の処理だけをするように書き換えたよ(^q^)

データ量多いからAccessとかで処理すればいいんだろうけどね、、、新しいDBなんてもう何年も作ってないから記憶喪失で、、、
( ;∀;)ウウッ
このエントリーをはてなブックマークに追加 mixiチェック

固定IP環境で、SWX2310のLANMAPを使って異常検知時にメール通知しようとしたところ、微妙にはまりかけたのでメモ。GUIだけでいけると思ってたのに、、、

・IPアドレスの固定
Webブラウザから本体IPにアクセスして、詳細設定→VLANの作成、からIPを設定。
(探すの大変だったよ、、、)

・メール通知の設定
同じくWebブラウザから設定。RTX1210と同じようにそれなりに簡単に設定可能。


そしてテスト送信で無事失敗し、そういえばゲートウェイとかDNSとか設定してないなと思い、探してみるも設定項目なし。
Google先生に聞くとどうやらコマンドで設定する必要があるようで、、、


telnetで接続。

SWX2310#configure terminal  (設定モードに入る)
SWX2310(config)#ip route 0.0.0.0/0 x.x.x.x  (デフォルトゲートウェイの設定)
SWX2310(config)#dns-client name-server y.y.y.y  (DNSの設定)

で無事メール通知が送信可能に。



はまったポイントとしては
・RTX1210と違って、コマンドラインで設定する際にAdminになるだけではだめで、configure terminalでグローバルコンフィグレーションモードに入る必要があること。知らずに何回もコマンド打ち直して、永遠に「% Invalid input detected at '^' marker.」って言われてました、、、
・DNSの設定コマンドがSWX2300では ip name-server y.y.y.y であったが、SWX2310では dns-client name-server y.y.y.y に変更されているところ
がありました、、、。なんでコマンド変わってるのおおおおおお(涙)

RTXでなんとなくなれてるし、IP固定とメール通知くらいならWebGuiだけでマニュアル見なくてもなんとかなるんじゃね?油断していたらハマりかけました
文字をちゃんと読むって大事だよね、、、orz
このエントリーをはてなブックマークに追加 mixiチェック

Chrome Remote Desktopのアクセスログを取得したり、メール通知したりする方法のメモ

Chrome Remote Desktopのアプリにはそのような機能はついていないので、代わりにWindowsのイベントログを利用します。

イベントビューアー→Windowsログ→Application
ソース:chromoting
イベントID:
 1 次のクライアントが接続しました
 2 次のクライアントが切断しました
 3 次のクライアントのアクセスを拒否しました
 4 クライアントのチャンネル(IP、ホストIPなど)
上記のように記録されています。
後は上記ログを適当に利用しましょう。


「このイベントにタスクを設定」で、適当なスクリプトを動かすのがシンプルで楽かもです。
例えばPowerShellでメール通知したい場合は、

1、WindowsPowerShellでメールを送信するスクリプトを作成
ネットに色々あるので、それを参考に。自分は下記サイトを参考に作成してみました。

2、PowerShellのスクリプトが実行できるように設定を行う
管理者でPowerShellを起動して、Set-ExecutionPolicy RemoteSigned

3、イベントビューアーからタスクを設定
イベントビューアーのchromotingのID1とかのログを右クリックして「このイベントにタスクを設定」
プログラムに直接スクリプトを指定するのではなく
・ プログラム/スクリプト %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
・ 引数の追加 -Command "<.ps1ファイルのパス>"
と設定

これでChrome Remote Desktopで接続するたびに、メールで通知してくれるようになります。


・PowerShellを用いてメールを送信するスクリプトを作成するには下記のサイトが参考になります
Windows10のPowerShellを利用して電子メールを送信する方法

・PowerShellのスクリプトを実行できるようにするには、下記のサイトが参考になります
[PowerShell]スクリプトを実行すると「このシステムではスクリプトの実行が無効になっているため、ファイル *スクリプトファイル名* を読み込むことができません。」エラーが発生する

・PowerShellのスクリプトをタスクスケジューラーで実行するには、下記のサイトが参考になります
WindowsのタスクスケジューラーでPowerShellのスクリプトを実行する際には「パス」に注意



また、集中管理したい場合などでSNMPトラップ飛ばす場合は

1、Windowsの機能の追加でSNMPをインストール
Windows10の設定→アプリ→オプション機能→機能の追加
「簡易ネットワーク管理プロトコル(SNMP)」をインストール

2、サービス→SNMPサービス→プロパティ→トラップ でSNMPトラップの送信先を設定

3、ファイル名を指定して実行→evntwin.exe
編集→Application→chromoting
必要なイベントIDを追加すれば、イベントが発生する度にSNMPトラップが飛んでいきます。

接続に関しては「1 情報 次のクライアントが接続しました」
切断に関しては「2 情報 次のクライアントが切断しました」
接続失敗(PIN間違いなど)に関しては「3 エラー 次のクライアントのアクセスを拒否しました」
を設定すればよいかと思います。

4、あとはSNMPマネージャで、記録するなりメール通知するなり好きなようにしましょう。


・イベントログをSNMPトラップで通知させる方法に関しては、下記のサイトが参考になります
イベント・ログの発生をSNMPトラップで通知させたい(日経XTECH)

・家庭などでフリーのSNMPマネージャを使う場合、TWSNMP Managerが便利です
TWSNMP Manager(Twise Labo)



タスクを設定したりSNMPトラップ飛ばす以外にも、Windows Event Logの利用方法は色々あるかと思いますので、皆様お好きな方法で活用されてください。

しっかし、昔調べたときはWindowsのイベントログに何も記録されてなかった気がするんだけど、、、
一番古いログは2020年11月頃から、、、そのころからログが残るようになったのかな???

Googleさん、ありがとうございます!
ついでにアプリに接続ログの記録やメール通知の機能を追加してください(土下座)
このエントリーをはてなブックマークに追加 mixiチェック

仕事で使うのでメモ。
バージョンはまだしも、ビルド番号なんて覚えてられないので、、、

バージョン

ビルド番号

別名

コードネーム

1507

10240

Released in July 2015

Threshold 1

1511

10586

Windows 10 November update(2015)

Threshold 2

1607

14393

Windows 10 Anniversary Update

Redstone 1

1703

15063

Windows 10 Creators Update

Redstone 2

1709

16299

Windows 10 Fall Creators Update

Redstone 3

1803

17134

Windows 10 April 2018 Update

Redstone 4

1809

17763

Windows 10 October 2018 Update

Redstone 5

1903

18362

Windows 10 May 2019 Update

19H1

1909

18363

Windows 10 November 2019 Update

19H2

2004

19041

Windows 10 May 2020 Update

20H1

20H2

19042

Windows 10 October 2020 Update

20H2


Microsoft Windows 10のバージョン履歴 <Wikipedia>
このエントリーをはてなブックマークに追加 mixiチェック

時々思い出せなくてググったりしていることを、どこからでも見られるようにメモ。
企業で無線LANを構築することを想定。
プロの方々に構築してもらう予算はないけど、DIYでやらなきゃいけなくなった人向け。


2.4Ghz帯
・ チャネル幅は20Mhz (40Mhzだと使えるチャネルが実質1つだけに)
・ 1、6、11chを使用


5Ghz帯
・ チャネル幅は基本20Mhz。干渉、チャネル設計の容易さ、拡張性、DFSの影響など、諸々を考えるとチャネルボンディングはしないのが基本。速度が必要なら有線接続を検討する。

・ チャネル幅20Mhzの場合
  36、40、44、48chを使用 (W52だけ。DFSの影響受けない)

・ チャネル幅40Mhzの場合
  36、44、52、60chを使用 (W52とW53を使用。W53の52ch、60chを使用する場合、窓際は避ける)

・ チャネル幅80MhzはW56を使わざるを得なくなるので、避ける。160Mhzは使えるチャネルが実質2つだけになるので、無理。

・ W53(52~64ch)、W56(100~136ch)はDFSで不安定になる可能性あり。
・ W53は気象レーダーなど。ある程度場所がわかるので、注意する方角もなんとなくわかる。
    DFS対象レーダー局 (W53帯でのDFSの対象となりうる気象レーダー局一覧 by n_kane)
・ W56は海上無線航行、移動、地球探査衛星、宇宙研究、無線標定など。どこから何が飛んでくるかわからない。W56でDFSの影響受けて困ったことがあるので、外来波が届かないような場所でない限り、W56は使わない事にしてます。


無線の中継とか
・ 無線中継器は地雷原になりやすい。遅延や速度低下、安定性低下の原因。
・ メッシュWifiは試したことないけど、LANケーブルの配線に多額の費用がかかるのであれば選択肢としてはありなのかも。まぁ、無線を無線で中継していることに変わりはないので、有線で接続する方が遅延・トラブルは少ないと思う。
・ 電波法の関係で電波の出力上限が決められている以上、無線APが通信可能な距離はだいたいどれも一緒。いくら無線AP側の電波が強くても、クライアント端末側の電波が届かないと意味ないしね、、、
WLE-HG-DA/AG とかWLE-HG-DYGとかの外部アンテナ同士の接続であれば話は別、数百メートルはいける。


その他
・ 同時接続台数が10台を超えるようなら、業務用のAPを選んだ方が無難。処理速度不足での不安定さなど、原因がわかりにくい問題に直面せずに済みます。
・ 1~3台程度なら家庭用でも(性能面では)だいたいなんとかなります。802.1Xとか、VLANしたい場合は別。
・ 家庭用の製品の中にはチャネルを詳細に設定できず、W52、W53、W56とざっくりした設定しか出来ない製品もあるので要注意。
・ APや端末を選ぶときはストリーム数にも注意。
・ 無線の実地調査の際には、iPhone持っているなら、Airmacユーティリティ、Wi-FiSweetSpots、Wi-Fiミレルがあると便利。Airmacユーティリティは神。


なんか間違ってたらごめんなさい(^q^)

このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ