投稿

2020の投稿を表示しています

エクセル VBA マウスカーソルの移動とクリック

Quick Edit Pencil
セルの固定をしていると うまくいかない ので放棄した
#If VBA7 And Win64 Then

    'マウスカーソルの位置を取得するAPI
    Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    
    'マウスイベントを取得するための決まり文句的なもの
    Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    
    Declare PtrSafe Sub mouse_event Lib "user32" ( _
        ByVal dwFlags As Long, _
        Optional ByVal dx As Long = 0, _
        Optional ByVal dy As Long = 0, _
        Optional ByVal dwDate As Long = 0, _
        Optional ByVal dwExtraInfo As Long = 0 _
    )

#Else '32bit用

    'マウスカーソルの位置を取得するAPI
    Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    
    'マウスイベントを取得するための決まり文句的なもの
    Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    
    Declare Sub mouse_event Lib "user32" ( _
        ByVal dwFlags As Long, _
        Optional ByVal dx As Long = 0, _
        Optional ByVal dy As Long = 0, _
        Optional ByVal dwDate As Long = 0, _
        Optional ByVal dwExtraInfo As Long = 0 _
    )

#End If
Sub Sample1()

    Dim p As POINTAPI 'API用変数
    
    GetCursorPos p 'カーソル位置取得
    
    MsgBox "X座標:" & p.x & " Y座標:" & p.y

End Sub

Excel VBA マウスカーソルの位置とセルを連携する | やさしいExcelVBA
Option Explicit

エクセルExcel大事典 VBAマクロ応用講座 スクリーン座標 ポイント ピクセル PointsToScreenPixels
Sub フォームコントロールボタンをクリック()

    Dim ws01 As Worksheet
    Set ws01 = Worksheets("入力")
    Dim btn As Button
    Set btn = ws01.Buttons("情報取得ボタン")
'    btn.Select

  
  Debug.Print Selection.Width * 96 / 72 * (ActiveWindow.Zoom / 100)
  
    ws01.Range("A1").Select
    Dim R1C1Left, R1C1Top As Long
    R1C1Left = ActiveWindow.PointsToScreenPixelsX(Selection.Left)
    R1C1Top = ActiveWindow.PointsToScreenPixelsY(Selection.Top)
    Range("a1") = R1C1Left
    Range("a2") = R1C1Top
    



    Dim x, y  As Long
    x = ((btn.Left * 96 / 72) * (ActiveWindow.Zoom / 100))
    y = ((btn.Top * 96 / 72) * (ActiveWindow.Zoom / 100))

    Debug.Print x
    SetCursorPos y, x
    
    Application.Wait Now + TimeValue("00:00:01")
    
    '左クリックの動作
    mouse_event 2
    mouse_event 4
    
End Sub
Sub フォームコントロールのボタンを捕らえる()


    Dim ws01 As Worksheet
    Set ws01 = Worksheets("入力")

'    ActiveSheet.Shapes("情報取得ボタン").Select
'    Dim btn As Button
'    Set btn = ActiveSheet.Buttons(2)
'    Debug.Print btn.Caption
'''    Dim x, y  As Long
'''    x = ActiveWindow.PointsToScreenPixelsX(ActiveSheet.Shapes("情報取得ボタン").Left * 96 / 72)
'''    y = ActiveWindow.PointsToScreenPixelsY(ActiveSheet.Shapes("情報取得ボタン").Top * 96 / 72)
'''    x = ActiveWindow.PointsToScreenPixelsX(ActiveSheet.Range("B3").Left * 96 / 72)
'''    y = ActiveWindow.PointsToScreenPixelsY(ActiveSheet.Range("B3").Top * 96 / 72)
'''
'''    Debug.Print x
'''    SetCursorPos x, y
    '左クリックの動作
'mouse_event 2
'mouse_event 4

'(実行用 選択中のセル又はオブジェクトの位置)
Dim R1C1Left As Long
Dim R1C1Top As Long
Const DPI As Long = 96
Const PPI As Long = 72
    R1C1Left = ActiveWindow.PointsToScreenPixelsX(0)
    Debug.Print R1C1Left
    R1C1Top = ActiveWindow.PointsToScreenPixelsY(0)
    Debug.Print R1C1Top
    Range("a1") = ((Selection.Left * DPI / PPI) * (ActiveWindow.Zoom / 100)) + R1C1Left
    Range("a2") = ((Selection.Top * DPI / PPI) * (ActiveWindow.Zoom / 100)) + R1C1Top
'(検証用 現在のマウスカーソルの位置)
Dim Pos As POINTAPI
Dim MouseLeft As Long
Dim MouseTop As Long
    GetCursorPos Pos
        MouseLeft = Pos.x
        MouseTop = Pos.y
    Range("a3") = MouseLeft
    Range("a4") = MouseTop
    
    Debug.Print Selection.Height * DPI / PPI * (ActiveWindow.Zoom / 100)
Debug.Print Selection.Width * DPI / PPI * (ActiveWindow.Zoom / 100)
    
End Sub

VBAでマウスを自動操作する方法~自動打鍵を目指して~ – Rainbow Planet

VBA マクロ実行ボタンをクリックする

Quick Edit Pencil
マクロ実行ボタン(フォームコントロール) 
Private Sub フォームコントロールのボタンを捕らえる()

'    ActiveSheet.Shapes ("情報取得ボタン")
    Dim btn As Button
    Set btn = ActiveSheet.Buttons(2)
    Debug.Print btn.Caption
    
End Sub

コマンドボタン(ActiveXコントロール ※古いバージョンのOfficeでは「コントロールツールボックス」)
'Application.Run "'集計.xls'!速報"
'Application.Run "'" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & "'!入力.情報取得ボタン"
'Application.Run "'集計.xls'!速報取得"
Application.Run "'集計.xls'!Sheet1.ボタン 1_Click"
'Application.Run "'集計.xls'!情報取得ボタン"

Dim ws01 As Worksheet
Set ws01 = Worksheets("入力")

VBA エクセル スクレイピング準備

Quick Edit Pencil
Microsoft HTML Object Library
Microsoft Internet Controls

が必要

VBEを開いたら、「ツール(T)」→「参照設定(R)」をクリック

VBA 関数に引数を渡す エクセル>ボタン>マクロ登録

Quick Edit Pencil
エクセル>フォームコントロールボタン>マクロ登録
'テスト.xls'!'テスト関数 "引数"'
VBA 関数に引数を渡す



エクセルVBAのボタン設置で引数を渡してマクロを呼び出す方法
Optionalキーワードで引数を省略可能とする
このように引数があったりなかったりする場合は、受け取る側でOptionalキーワードをつけて省略可能な引数であることを明示します。

Subプロシージャをこのように変更します。

Sub showMessage(Optional num As Integer = 1)

MsgBox "ボタン" & num & "が押されました"

End Sub

VBA 一時停止

Quick Edit Pencil
処理を一時停止する方法[エクセルVBA] : バヤシタ

一時停止する
Option Explicit
 
Sub test()
    Debug.Print "処理開始:" & Now
    
    '1秒処理を停止(現在時刻の1秒後まで処理を待つ)
    Application.Wait Now + TimeValue("00:00:01")
    
    Debug.Print "処理終了:" & Now
End Sub
一時停止する(ミリ秒で停止時間を指定)
サンプルコードは次の通りです。「Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)」の記述が無いと動作しません。
Option Explicit
 
'WindowsAPI の使用を宣言
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Sub test()
    Debug.Print "処理開始:" & Now
    
    '500ミリ秒一時停止
    Sleep 500
    
    Debug.Print "処理終了:" & Now
End Sub

PowerShell 配列を順次 クリップボードへ 

Quick Edit Pencil
ステップ
  1. HTMLソースのimgタグのalt属性値を配列に格納
  2. 順次クリップボードにセットする

肝として
  1. 一時中断してクリップボードの値を使う方法
    • $in = Read-Host "Press ENTER KEY, then next"
  2. クリップボードユーティリティの履歴にため込む方法
    • Start-Sleep -s 1

#Windows PowerShell
#Investigating template tags in Blogger theme XML

##テンプレート捜査フィールド
$path = "D:\WindowsPowerShell Scripts\Bloggerポスト画像ALT走査"

#XMLを捜査対象サブフォルダも対象(ブロガーテーマ)
$targets = Get-ChildItem $path -recurse -Include 捜索ソース.html | Select-Object | Where-Object {-not $_.PSIsContainer}

#捜査対象ファイルをリスト
$targets

#対象タグを格納
$tags = @()
$targets | ForEach-Object {
  $tags += [regex]::Matches((Get-Content $_),"img (alt="".*?"")")  | foreach{$_.Groups[1].Value.TrimEnd()}
}

#重複を削除し並べ替え
#$tags | Select-Object –Unique | Sort-Object

#クリップボードに代入
$tags | ForEach-Object {
  $_  
  $_  | clip
  Start-Sleep -s 1
  #$in = Read-Host "Press ENTER KEY, then next"

}

参考にしたサイト様

ADOBE FIREWORKS マスクで透明 抜き

Quick Edit Pencil
マスク適用オブジェクトを選択 メニュー 変更 マスク すべてを表示 ブラシツール(黒色) https://www.japanism.info/fireworks-mask.html

書字方向 横書方向変換スクリプト 左書きから右書きへ(コピペ用途)

Quick Edit Pencil
左横書きを右横書きへ簡易変換します.(コピペ用途)
変換処理はウェブブラウザだけで完了.ネットワーク通信が発生しないので安心.注,複数行の場合は一行になりそう.また,句読点(符号),顔文字の正確な変換は100%無理っぽ.

変換する文字列(横左方向→)

変換した文字列(←横右方向)

書字方向 横書方向変換スクリプト HTMLソース JavaScriptコード
変換する値(横左方向→)
<form name="form1">
<textarea cols="50" name="textarea1" rows="5" value="1">テスト</textarea>
</form>
<input onclick="clickBtn1()" type="button" value="変換" />
<input onclick="clickBtn2()" type="button" value="クリア" />
<p>変換した値(←横右方向)</p>
<p id="rtl" style="background-color: lightgrey; box-sizing: border-box; color: darkslategrey; line-height: 1.6; overflow: auto; padding: 1rem; text-align: right;"></p>


<script>
function clickBtn1(){
	// 値を取得
	const ta1 = document.form1.textarea1.value;
	const reversed = [...ta1].reduceRight((p, c) => p + c);// 配列に変換し右から左へたたみ込む。
	document.getElementById("rtl").textContent = reversed;
}
function clickBtn2(){
	document.getElementById("rtl").textContent = "";
}
</script>

/*
参考サイト
書字方向 - CyberLibrarian
スタイルシート[CSS]/テキスト・フォント/書字方向を指定する - TAG index
JavaScript テキストエリアの値を取得/設定するサンプル | ITSakura
【JavaScript】文字列を反転する方法いろいろ - Qiita
*/
参考サイトに合掌

エラーを解決 再解析ポイントバッファーにあるタグは無効です。

Quick Edit Pencil
OneDriveで良くあるエラー、PC上で同期が終わらない時や、ファイルやフォルダの移動や削除ができない時に有効。

解決方法はファイル権限の修復。Windowsのファイルシステムを修復します。


ディスクのプロパティのツールタブからエラーチェックチェックする

修復が必要なら、修復手順に従えば、ほぼ解決します。

cmdで chkdsk /r /f もできるけど、エクスプローラーからディスクのプロパティでするのが簡単。



Thinkpad W550s HHDをSSDクローン Win10標準機能だけでSSDクローン作製 バックアップと復元を使えばソフトなしで引越し可能

Quick Edit Pencil

クローン先は増設ディスク&容量の小さいSSD


一事例として、UEFIブートマシンです。F1で設定、F12で起動ディスク選択。

今回の肝

  1. USB回復ディスクからのコマンドプロンプトでdiskpartコマンドを実行
    1.  クローン先のSSDをGPT形式でNTFSフォーマット、ドライブ文字(C)を割り当て
  2. 回復を実行
  3. 成功

環境


Thinkpad W550S Windows10最新 
  • ディスク0(SATA)2.5インチHDD 1TB(パーティション C: D: E:)
  • ディスク1(M.2)空
  • ディスク2(M.2)空

合計3ディスク体制
  • ディスク0(E:) 新しい2.5インチHDD 1TBはデータドライブとして使用
  • ディスク1(D:) 仮想環境と仮想メモリ 512GB
  • ディスク2(C:) Windows10 OSのみ 512GB
M.2スロットに SSD Type 2242楽天) 二個取り付け



クローン実行


  1. 先ずはクローン元HDDをバックアップ(4TBの外付HDD)amazon
    1.  全ドライブのシステムイメージを保存(外付けHDD)
    2.  念のためC,D,Eドライブを個別にコピーバックアップ(外付けHDD)
  2. 回復ディスクの作成(USBメモリ)amazon
  3. クローン元HDDを整理して縮小
    1.  Cドライブをクローン先SSDの容量以下に整理して縮小
    2.  D、Eドライブのボリュームを削除して未割り当てに
  4. Windows再起動※必須
  5. システムイメージを作成
  6. HDD交換、SSD追加
  7. 回復ディスクを起動
  8. コマンドプロンプトでdiskpartコマンドを実行
    1.  クローン先のSSDをGPT形式でNTFSフォーマット、ドライブ文字(C)を割り当て
  9. 復元を実行
  10. 成功





ThinkPad スマートカードリダー増設

Quick Edit Pencil

W550s

マイナンバーカードを使うために部品購入

注文部品:00NY465 

参考ブログ

Lenovoへ部品を注文する方法 | ThinkPadWeb

純正部品の検索

partslookup - Lenovo Support US

取り付け手順

タッチパネル対応/非対応 スマートカード機構の取り外し - ThinkPad T550 と W550s - Lenovo Support AR

ハードウェア保守マニュアル - ThinkPad T550、W550s


W550sに関するドキュメント

検索 - Lenovo Support JP


VBA ボタンのテキストを変更する

Quick Edit Pencil
変更する
ActiveSheet.Buttons(Application.Caller).Text = "ボタンテキスト"

取得する
ActiveSheet.Buttons(Application.Caller).Text


VBA cells セル

Quick Edit Pencil
    Dim ws01, ws02, ws03 As Worksheet   '変数としてWorksheet型で指定します。
    Set ws01 = Worksheets("入力")       'ws01を”Sheet1”変数名として指定。
    Set ws02 = Worksheets("集計")       'ws02を”Sheet2”変数名として指定。
    Set ws03 = Worksheets("グラフデータ")       'ws03を”Sheet3”変数名として指定。

Dim tbl As Range
Set tbl = ws03.Range("A4").CurrentRegion
Set tbl = tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, tbl.Columns.Count - 0)

Debug.Print "+++++"
Debug.Print "■セルの総数" & tbl.Count

Debug.Print "◆開始セル - A1形式: " & tbl.Item(1).Address & " / R1C1形式: " & tbl.Item(1).Address(ReferenceStyle:=xlR1C1) & " / 行インデックス: " & tbl.Item(1).Row & " / 列インデックス: " & tbl.Item(1).Column
Debug.Print "◆最終セル - A1形式: " & tbl.Item(tbl.Count).Address & " / R1C1形式: " & tbl.Item(tbl.Count).Address(ReferenceStyle:=xlR1C1) & " / 行インデックス: " & tbl.Item(tbl.Count).Row & " / 列インデックス: " & tbl.Item(tbl.Count).Column

Debug.Print "▲範囲行数" & tbl.Rows.Count
Debug.Print "▲範囲列数" & tbl.Columns.Count

Debug.Print "ROW_INDEX        : " & tbl.Item(1).Row 'tbl.Row 同じ
Debug.Print "COLUMN_INDEX     : " & tbl.Item(1).Column 'tbl.Column 同じ
Debug.Print "ROW_INDEX   .END : " & tbl.Item(tbl.Count).Row
Debug.Print "COLUMN_INDEX.END : " & tbl.Item(tbl.Count).Column

Debug.Print ws03.Range(ws03.Cells(tbl.Row, tbl.Column), ws03.Cells(tbl.Item(tbl.Count).Row, tbl.Column)).Address(External:=True)
Debug.Print "軸項目 = " & ws03.Range(ws03.Cells(tbl.Row, tbl.Column), ws03.Cells(tbl.Item(tbl.Count).Row, tbl.Column)).Address(External:=True)
Debug.Print "-----""

イミディエイト
+++++
■セルの総数784
◆開始セル - A1形式: $A$4 / R1C1形式: R4C1 / 行インデックス: 4 / 列インデックス: 1
◆最終セル - A1形式: $BD$17 / R1C1形式: R17C56 / 行インデックス: 17 / 列インデックス: 56
▲範囲行数14
▲範囲列数56
ROW_INDEX        : 4
COLUMN_INDEX     : 1
ROW_INDEX   .END : 17
COLUMN_INDEX.END : 56
'[早朝集計-v10.3.1.8-エクセル2003 (version 1).xls]グラフデータ'!$A$4:$A$17
軸項目 = '[早朝集計-v10.3.1.8-エクセル2003 (version 1).xls]グラフデータ'!$A$4:$A$17
-----