投稿

11月, 2022の投稿を表示しています

Power Automate for Desktop ウィンドウを画面中央に移動する

イメージ
Power Automate for Desktopで操作するウィンドウを監視するために画面中央に配置しておくと便利です。そんなフローを作ってみました。 フローの概要は次の通りです。 1. 「画面の解像度を取得する」アクションでモニターの幅と高さを取得します。 ここではモニターに1を指定しています。モニターが複数ある場合は適宜指定する必要があると思います。 変数名はデフォルトの、MonitorWidth と MonitorHeight。(使わない変数はオフにしておいた方が変数ペインがすっきりするし、誤って使う事も少なくなるでしょう) 2. 「ウィンドウの詳細を取得する」アクションで、ウィンドウの場所とサイズを取得します。この例では「メモ帳」のウィンドウを指定しています。 変数名はデフォルトの WindowProperty WindowProperty には 503, 843, 1060, 802 のように、ウィンドウ左上の X 値、Y値、ウィンドウの幅、ウィンドウの高さが CSV 形式で保存されます。 詳細については次のページを参考にするとよいでしょう。 ウィンドウの位置とサイズを取得する ウィンドウ指定の際に、うまく指定できず、ウィンドウ内の別の要素を取得してしまった場合は、ウィンドウを選択し直します。 3. 「テキストの分割」アクションを使って WindowProperty をリストに変換します。 変数名はデフォルトの TextList 4. 「テキストを数値に変換」アクションを使って、ウィンドウ幅を取り出します。 式は %TextList[2]% 、変数名は uWindowWidth 。(私はユーザー定義変数は頭にuをつけて区別しています。また、将来変数が追加されたときの衝突回避も多少期待しています) 5. 同様にウィンドウ高さを取り出します。 式は %TextList[3] % 、変数名は uWindowHeight 。 6. 「数値の切り捨て」アクションを使って、ウィンドウ移動先の、ウィンドウの左上座標のX値を計算します。 式は  %MonitorWidth / 2 - uWindowWidth / 2% 、変数名は X 。 計算式は次の図を参考にしてください。 7. 同様にY値を求めます。 式は %MonitorHeight / 2 - uWindowH

Excel VBA: Simple DB access by ODBC without ADO

イメージ
How to use ODBC from VBA without ADO object?  The answer is the following. Create Access File: Create the following sample Access table. Table name: ProductMaster Column names: ID, Product, Amount And, Save as a SampleDB.accdb in appropriate folder. Create DSN: Create a DSN by the following. Click Search button on taskbar. Type "odbc", and select appropriate ODBC Data Source. (If your Access is 64bit, select 64bit Data Source) Click Add...  (If other user needs to use this DSN, select "System DSN" tab, and then click it.) Select "Microsoft Access Driver (*.mdb, *.accdb), and click Finish. Type "SampleDB" into Data Source Name, and then click Select button. Select SampleDB.accdb and click OK. Click OK. Click OK. Create Table: Open an Excel book, and then execute the following sub procedure. Private Sub uCreateTableWithQuery()     Dim uWS As Worksheet     Dim uList As ListObject          Set uWS = ActiveSheet     Set uList = uWS.ListObjects.Add( _      

サーマレスト ネオエアーXサーモ マックスを購入

イメージ
前から検討していた ネオエアーXサーモマックス と ネオエアーマイクロポンプ(商品コード30120)を発注しました。 サーマレスト ネオエアーXサーモマックスを発注 ヨドバシから商品到着のメールが来たので、早速石井スポーツに受け取りに行ってきました。 早速開梱 パッケージはこんな感じです。Apple Watch SE1 との比較です。もう少し一般的なものを並べればよかったのに、一杯飲んでいたので。 箱から出して 伸ばしてみました。 展開して備品を乗せてみました。グレーの袋は空気注入用で、電動ポンプを使わない場合に使います。ポンプが使えない時のために携帯してもよさそうです。黒い小さい袋は携帯用のケースです。 電動ポンプ。空気を入れるインフレートと、抜くときに使うデフレートが書かれています。 注入開始! 見ている間に膨らんでいきます。 待っている間に一杯になりました。 枕と寝袋を置いてみました。 ファーストインプレッション 箱から出してみて、さすがにコンパクトだなと思いました。 空気を入れるとみている間に段々膨らんでいき、十分待てる時間です。あとで時間を測ってみます。電動ポンプだけで十分に空気が入ります。 上に乗るとある程度音はしますが、音は低めでレジ袋のような感じではありません。 表面は比較的良い手触りで、ビニールっぽさはありません。 寝てみると、結構空気がいっぱいで、高さを感じます。 一晩寝てみたところ、寝返りを打つときに狭くて気になり、何回か目が覚めました。 ラグジュアリーマップL: 63×196×7.6cm。 ネオエアーXサーモマックス: 64x183x6.4cm。 なので、スペック上はネオエアーの方が微妙に低くて幅が広いはずなのですが、実際に寝てみると、ネオエアーの方が狭くて高く感じます。 もっとも、草サイトのテントの中とフローリングでは比較が難しいので、やはり本当のところは実際にキャンプで寝てみるしかないと思います。 寝返りの時に起きるたびに、柔らかくて広いベッドが恋しくてそちらに行こうかと思いましたが、眠いのと実験もあってそのまま寝ていました。ただ、途中からは慣れたのか、次に気がついたら朝でした。 朝起きてみると、痛いところや疲れなどはなく、むしろすっきりとした感じで快調でした。慣れれば結構いいマットなのかもしれません。 目が覚めてから、少し空気を抜いて寝

Power Automate for Desktop: 実践テクニック

イメージ
Power Automate for Desktopを使い始めてそれなりになり、仕事では毎日使っています。 これまでいくつもフローを作ってきたので、そのノウハウでも書いてみようかと思います。 ページが読み込まれるまで待機しない Power Automate for Desktopを使い始めた際に、Webを操作できるのはいいんだけれど、これって、人と速さが変わらないのでは? と思っていました。 しかしこれは、アクションの「ページが読み込まれるまで待機します」がデフォルトで有効であることが原因でした。(色々なアクションに存在しています) 待機しますをオフにします このオプションをオフにしたところ、劇的ビフォーアフターで高速になりました。 コンテンツを待機する 上のように読み込みを待機しないと、次のアクションに即、進んでしまうので、必要とする要素が表示されていなくてエラーになる場合があります。 そのため、これをオフにする場合には、適宜「Webページのコンテンツを待機」で操作に必要な要素が表示されるのを待つ必要があります。 これを使えば、ページの読み込みを待機しなくてもむしろ安定するくらいです。 コンテンツの待機は、Webページだけでなく、通常のアプリケーションに対しても有効です。データベースの検索など、処理がかかるものは待機してあげないとうまくいきません。 ここをWaitアクションを使って数秒待つと、常にその秒数遅延するし、その秒数で処理が完了するとは限らないので、基本的にはWaitは使うべきではないと思っています。Waitは最後の手段です。 Waitしてみる 要素が表示されてクリックしても動作しないWebページがありました。 人間が操作すればもちろん動作します。 そこで、要素が表示されてから1秒待ってクリックしたら動作しました。 ページが表示された後に内部的にJavaScriptでも走っていて準備ができていなかったのでは、と思っています。 ページの準備ができたかどうかを知るすべは思いつかなかったので、やむを得ずWaitしています。 Waitしてみる2 これまで問題なく動作していたアプリが、Power Automate for Desktopをアップデートしてからか、正しく動作しなくなりました。 具体的には、検索条件を入力し、即検索ボタンを押すと、検索が行われたのちに、検

サーマレスト ネオエアーXサーモ マックスを発注

イメージ
懸案だった、サーマレストの ネオエアーXサーモマックス をヨドバシに発注しました。 これまで使っていたのは 同じくサーマレストの ラグジュアリーマップ と プロライト です。 ラグジュアリーマップはキャンプ用。 サーマレストのラグジュアリーマップ L を購入しました プロライト はほとんど使っていませんが、一応山用で、以前はオートキャンプ用のスペアとしても使っていました。薄くて小さいのでしょうがなく使うという感じです。 ラグジュアリーマップは自動で膨らんで厚みもあって、断熱性にも優れていて快適ですが唯一の難点は大きい事(74cm×直径16cm)でした。そのため、電車や飛行機を使ってのキャンプでは持て余していました。また、自動で膨らませるには家で広げて保管する必要があるため場所を取るのも難点でした。 ネオエアーXサーモマックス ある時、調べていたら ネオエアーXサーモマックス の断熱性能を示すR値が6.9で、なんとラグジュアリーマップの6.0を超えることに気が付きました。 エアータイプのマットは軽量コンパクトだけれど、エアーが内部で上下に対流し断熱性能が低いのが難点でした。しかし、ネオエアーXサーモマックスは、 Triangular Core Matrix という、三角形を組み合わせた構造で対流を遮断し、断熱性能を確保しているという事です。 こんな感じ あと、エアーマットで面倒くさかったのは空気を入れる事でしたが、現代ではモーターで空気を入れることができるようになっています。 ネオエアーマイクロポンプ これまでのエアーマットの問題点は解消されているため、あとは寝心地と価格だけです。 価格はもう清水の舞台から飛び降りるとして、寝心地が問題です。 ヨドバシから購入 というわけで、とりあえず一つ買ってみることにしました。 Therm-A-Rest サーマレスト ネオエアーXサーモ マックス 30066 RW ヨドバシカメラで¥40,700(税込)と定価販売で、3%のポイントバック。 Amazonは送料の関係なのか定価を超えているので、少しでも安いヨドバシにしました。 ヨドバシも店舗受け取りのみで配送はしていません。こちらも送料の関係なのでしょう。 明後日最寄りの店舗で受け取れるので、入手したら早速試してみようと思います。 ネオエアーにすると ネオエアーにすると次のメリット

テルモの電子体温計C231の電源が入らなくなる

イメージ
テルモの電子体温計C231で熱を測ろうとしたところ、電源が入りませんでした。 交換電池 LR41を買いに吉祥寺界隈のコンビニに入ったところ、なぜかいずれも売っていませんでした。(ミニストップは値札はあるものの実物なし、セブンイレブンは値札もなし) ようやくLR41を入手して、早速交換したところ、なんと電源が入りません! そこで、スイッチと接触していると思われる金属部分を引き起こし、金属部分と、それに接する部分をアルコールウェットティッシュで拭いてみたところ直りました! (引き起こしただけでは直らず、よく見ると端子が汚れていたのでふき取りました) 何らかの理由により、スイッチの金属部分が接触不良を起こしていたようです。これまで電池を交換した記憶がないので製造時の潤滑剤か何かが劣化したのかもしれません。 現在はサクッと電源が入るようになりました。 なお、パッキンと思われる赤い輪ゴム部分にも、なぜか黄色く変色したグリスっぽいものが付着していたため拭き取りました。 パッキンの位置からしてスイッチ部分とは関係ないような気もします。 何はともあれ、直ってよかったです。 C231の電源が入らなくなったら、まずはスイッチ部分を拭いてみるとよいでしょう。電池交換はそれからです。

Power Automate for Desktop: Excelのテーブルを読み取る

イメージ
Power Automate for Desktopを使っていると Excel のテーブルにあるデータを取得したくなると思います。その際面倒くさいのが範囲の指定です。 Power Automate for Desktopの「Excelワークシートから読み取る」アクションに「D」や「5」などと直接書き込むのは簡単ですが、変更に対して弱いフローになってしまいます。 データ行数が可変なら即アウトですし、ユーザーが列を追加してもアウトです。 マクロと併用する方法 簡単な方法として、Excelに次のようなマクロを用意しておいて実行し、選択されたセルを読み込むという方法が考えられます。 対象のテーブル名が「テーブル1」であることが前提です。 Public Sub uSelectTable()     ThisWorkbook.ActiveSheet.ListObjects("テーブル1").Range.Select End Sub マクロの意味は、マクロがあるワークブックの現在表示されているシートの「テーブル1」という名前のテーブルのすべてのセルを選択、です。 フローは次のような感じです。 2ステップ目でマクロを実行した後に、3で「Excelワークシートから読み取る」アクションを実行し、取得対象として「選択範囲の値」を指定しています。 Excel上のテーブルは次の通りです。 実行結果は次の通りです。 この方法は、シンプルですがマクロが必要という大きな難点があります。 アドレスを持つセルを用意する マクロを使わずにテーブル範囲を取得するには、特定のセルにテーブルの座標を表示しておくという方法が考えられます。 次の例では、A1セルとB1セルにテーブルの左上と右下のアドレスを表示しています。 それぞれ、次のような式を使えば、テーブルの行数が変化しても、列が増えても、テーブル自体が移動したとしても対応できることでしょう。 A1セル: =CELL("address", テーブル1[[#見出し],[列1]]) B1セル: =CELL("address", OFFSET(テーブル1[[#見出し],[列1]],ROWS(テーブル1[#すべて]) - 1, COLUMNS(テーブル1[#すべて]) - 1)) フローの全体は次の通りです