WebPenguin のすべての投稿

Excel 共有フォルダのハイパーリンク

Excelでネットワークパスフォルダのハイパーリンクを作るといつの間にか、相対パス(¥..¥..など)に変換されて、ファイルの場所を変えると開かなくなる

Excelの内部リンク管理が相対パス仕様の為
ファイルのプロパティでハイパーリンクの基点とする設定をすると良いがファイル毎に設定が必要となるのと、他で相対パスの方がよい場合もあるので注意が必要

対処として、ハイパーリンクを関数で設定することが考えられる
VBAでの通常のリンクコード 相対パスに変換されることがある
ActiveCell.Hyperlinks.Add Anchor:=ActiveCell, Address:=folderPath, TextToDisplay:=linkText

数式でのコード 数式のパラメータとして絶対パスを設定するので変換されない
ActiveCell.Formula = “=HYPERLINK(“”” & folderPath & “””,””” & linkText & “””)”

具体例
Option Explicit
Sub フォルダリンク設定()
Dim WshShell As Object
Dim FSO As Object
Dim FILEPATH As String
Dim PathDrive As String
Dim SelectedFile As String
Dim folderPath As String
Dim linkText As String

Set WshShell = CreateObject(“WScript.Shell”) ‘ファイル操作を行う為のオブジェクト

‘ A1セルから初期フォルダパスを取得
On Error Resume Next
FILEPATH = Workbooks(“Personal.xlsb”).Worksheets(“Sheet1”).Range(“A1”).Value
On Error GoTo 0

If FILEPATH <> “” Then ‘記述されている時は存在チェック
Set FSO = CreateObject(“Scripting.FileSystemObject”)
If Not (FSO.FolderExists(FILEPATH)) Then
MsgBox “指定しているフォルダにアクセスできませんでした” & vbCrLf & vbCrLf & “ツールがあるフォルダを設定します”
FILEPATH = ActiveWorkbook.Path
End If
Set FSO = Nothing
Else
FILEPATH = ActiveWorkbook.Path ‘指定ないときはエクセルブックのフォルダ
End If

If Left(FILEPATH, 2) = “\\” Then ‘ネットワークのとき
WshShell.CurrentDirectory = FILEPATH ‘指定のネットワークフォルダをセット
Else
On Error Resume Next
PathDrive = Left(FILEPATH, 2) ‘chdirコマンドはドライブ指定があるとエラーなので、ドライブと分離
ChDrive PathDrive ‘ローカル時は、カレントドライブを変更
If FILEPATH <> “” Then ‘ルートディレクトリでフォルダ指定がないときには chdirコマンドがエラーとなるから処理をスキップ
ChDir FILEPATH
End If
On Error GoTo 0
End If

‘ファイル選択
SelectedFile = Application.GetOpenFilename(“All Files,*.*”, , “サンプルとなるファイルを選択してください”, , False)

‘キャンセルされた場合
If SelectedFile = “False” Then
MsgBox “ファイルの選択がキャンセルされました。”, vbInformation
Exit Sub
End If

‘フォルダパスを抽出
folderPath = Left(SelectedFile, InStrRev(SelectedFile, “\”) – 1)

‘ 表示するテキスト
linkText = “格納フォルダ”

‘選択したセルにハイパーリンクを設定

On Error Resume Next
ActiveCell.Formula = “=HYPERLINK(“”” & folderPath & “””,””” & linkText & “””)”
On Error GoTo 0

Set WshShell = Nothing

‘MsgBox “ハイパーリンクが作成されました: ” & folderPath, vbInformation

End Sub

Option Explicit
Sub 初期参照フォルダ値設定()

‘ 入力ダイアログを表示し、ユーザーに入力を求める
Dim userInput As Variant
userInput = InputBox(“初期参照フォルダを入力してください”)

‘ キャンセルがクリックされた場合は処理を終了
If userInput = “” Then Exit Sub

Workbooks(“Personal.xlsb”).Worksheets(“Sheet1”).Range(“A1”).Value = userInput

Application.DisplayAlerts = False
Workbooks(“Personal.xlsb”).Save ‘ブック名を指定した上書き保存
Application.DisplayAlerts = True

MsgBox userInput & ” を初期参照フォルダに指定しました”

End Sub

エクセルのVBAでフォルダとファイルの存在チェックと、コマンドの実行

フォルダの存在
Dim FSO As Object
Dim FILEPATH As String
FILEPATH = “C:\Program Files\7-Zip”
Set FSO = CreateObject(“Scripting.FileSystemObject”)
If FSO.FolderExists(FILEPATH) Then
MSGBOX ”OK”
Else
MSGBOX ”NG”
End If
Set FSO = Nothing

ファイルの存在
Dim FSO As Object
Dim FILEPATH As String
FILEPATH = “C:\Program Files\7-Zip\7z.exe”
Set FSO = CreateObject(“Scripting.FileSystemObject”)
If FSO.FileExists(FILEPATH) Then
MSGBOX ”OK”
Else
MSGBOX ”NG”
End If
Set FSO = Nothing

FileExistsでは、半角の空白を含む”C:\Program Files\7-Zip\7z.exe”でチェック

Dim WshShell As Object
Set WshShell = CreateObject(“WScript.Shell”)

s7zPath = “””C:\Program Files\7-Zip\7z.exe”””
strFileName = “解凍するファイル名”
cmdtxt = s7zPath & ” x ” & strFileName & ” -otmp -aoa”
‘-aoa:既存ファイルをすべて上書きします。-oに続けて解凍先フォルダを指定 フルパスでない時は相対となる
Call WshShell.Run(cmdtxt)

cmdtxtに組み込む7z.exeのパスは、”””で”括りを指定しないとProgram Filesに含まれる空白の為、エラーとなるが、FileExistsで同様に記述すると”を含んで判別するので、存在しないと判定されるので注意

Fire TVやSwitch Bot ハブでインターネット接続不良

FireTVで、TVer、NHK+が繋がりにくい、SwitchBotハブでインターネット未接続になることが多い
スマホのLineも不調
パソコンのブラウザでは特に異常はない

無線親機のチャンネルなど設定も変更して、試すも改善しない

ホームゲートウェイ PR-500KIの設定も変更してみるが、改善しない
フィルタリング設定やIPアドレス固定、DNS変更、IPv6切断(IPv6が接続になっている?)

結局、HGWでPPPoEブリッジを有効にしてPPPoE接続を解除、無線親機をブリッジモードからルータ機能に変更してPPPoE接続(IPv6ブリッジ有効-デフォルト)で、改善

HGWの設定をどうすれば改善できたかは不明だが、I/Oデータ製の無線ルータでの接続で解決

VBSでDOSコマンド実行

VBScriptでコマンドを実行するとウィンドウ非表示で実行できる

‘実行時のウィンドウサイズ
‘0 非表示
‘1 通常ウィンドウ
‘2 最小化
‘3 最大化

‘DOSのコマンドの実行が終了するのを待って次のコードを実行したい場合は、同期モード”True”


Option Explicit
Dim str,cmdstr
Dim objShell

str = “c:¥temp\ip.txt”
cmdstr = “cmd /c ipconfig /all > ” & str

Set objShell = CreateObject(“WScript.Shell”)

msgbox cmdstr ‘コマンド確認

objShell.Run cmdstr,0,false

セットアップは、USB フラッシュドライブに Windows をインストールすることはできません

セットアップは、USB フラッシュドライブに Windows をインストールすることはできませんの表示でインストールできない

何かのきっかけで通常の内蔵ディスク (ハードディスク、SSD) にインストールされている Windows が、Windows To Go で起動されている環境と誤認されているのが原因

Windows To Go 環境と誤認されている状態を回復するには、以下のレジストリ値を削除するか、データを 0 に設定します。

キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
名前 : PortableOperatingSystem

変更後に再起動

 

以下は、通常不要な操作だが、参考としてメモ
内蔵ディスクと重複している USB デバイスのディスク ID を削除するには、USB デバイスを接続した上で以下の手順を実行
※USB デバイスの内容が削除されるので、事前に必要に応じてバックアップして、復元する処理が必要

コマンドプロンプトを管理者で実行
diskpart
list disk
表示されたディスク一覧から、USB デバイスのディスクの番号を確認
select # (# は上で確認したディスクの番号) コマンドを実行してディスクを選択
clean コマンドを実行
exit コマンドを実行し、diskpart を終了

キーボードレイアウトの選択と表示されて起動できない

Windows起動時に、キーボードレイアウトの選択と表示されて、選択するとメンテンナンス画面になり、修復操作でしても、修復できませんでしたとなり、どうにもならなくなった

原因として考えられることは、起動用USB作成等で、いろいろ実験したためと思われる
クローンソフトなどでコピーした時も起こりうる

後で振り返ると、ブートマネージャーが書き換えられ、OSデバイスが見つからなくて、修復ツールのパーティションが起動していたので、OSのデバイス位置を修正してやればよかった

以下に、回復させて手順をメモしておく

1,ボードレイアウトの選択後、コマンドプロンプトを起動を選択

2,bootrec /scanos でOSのドライブを調べる

3,検出されたドライブ名がCになっていたらOKだが、違っていたら、以下のコマンドで戻す

Eドライブが検出されたとき、dir e: などで目的のドライブかを確認して、以下のコマンドで修正 /l はエル

bcdboot E:¥windows /l ja-jp /s c:

c:  ENTERでドライブ切替
c:>bootrec /rebuildbcd で再構築
※マルチブートで複数ある時は、ここではEなので、EをY選択して追加する

これで、起動可能に回復した

FastCopyとBatファイルのログ

FastCopyをバッチファイルで実行するときにログ指定をした時、文字化けで記録されることがある

BatファイルがShift-JISでFastCopyがUTF-8のためで、FastCopyの旧バージョンでは、ログの文字コード指定ができたが、最近のバージョンでは、できない

そこで、コマンドプロンプトの文字コードを変更する必要がある

chcp 65001を記述するとUTF-8の文字コードでコマンドプロンプトが動作する

chcp 65001

date /T >> “C:\bat\backup.log”
time /T >> “C:\bat\backup.log”
echo “バックアップを開始しました” >> “C:\bat\backup.log”

“C:\Program Files\FastCopy\FastCopy.exe” /cmd=sync /acl=FALSE /exclude=”$Recycle.Bin\;$WinREAgent\;System Volume Information\;” /auto_close /force_close /error_stop=FALSE /skip_empty_dir=FALSE /log /logfile=”C:\bat\backup.log” “E:\” /to=”H:\”

date /T >> “C:\bat\backup.log”
time /T >> “C:\bat\backup.log”

echo “**************** backupバックアップが完了しました *******************” >> “C:\bat\backup.log”

複数のCSVファイルを結合して1つのファイルにする

batファイルでコピー
例 カレントディレクトリ内のCSVファイルを結合データ.csvファイルへまとめる

@echo off
setlocal
rem echo %~dp0
set current_dir=%~dp0
copy /B %current_dir%\*.csv %current_dir%結合データ.csv

※ /B オプション指定でバイナリファイル扱いさせないと、最後に・の行が出来てしまうので注意

VBS Wshでファイル選択を実行ファイルパスにする

エクセルファイルを選択して開くダイアログボックスを実行するvbsファイルのフォルダをデフォルトにする
注意 以下をコピーする時は、 ’と〝 ” を半角の ’ と ”に置き換える必要がある

Dim xlsApp
Dim DPath
Dim FilePath
Dim objShell

‘カレントディレクトリを取得
Set objShell = CreateObject(“WScript.Shell”)
currentDir = objShell.CurrentDirectory

‘.DefaultFilePathにカレントディレクトリをセット
Set xlsApp = CreateObject(“Excel.Application”)
DPath= xlsApp.DefaultFilePath
With xlsApp
.DefaultFilePath = currentDir
.Quit
End With
Set xlsApp = Nothing ‘一度開放して設定を反映
Set xlsApp = CreateObject(“Excel.Application”)

‘カレントディレクトリを初期フォルダでダイアログが開く
FilePath= xlsApp.GetOpenFilename(“Excel File,*.xlsx;*.xls,All,*.*”,1,”ファイルを選択して下さい”,”開く”,false)
If FilePath <> False Then
‘Wscript.Echo FilePath ‘確認時に使用
Else
WScript.Quit ‘キャンセルしてファイルを選択しなかった時
End If

‘FilePathを使って以下に実際の処理を記述

UWSCでリストを読み込んで処理させる

例 エクセルで抽出して2列のデータを読み込む
エクセルで2列を選択して、テキストエディタへ貼り付けるとTAB区切りとなる

リストファイル読み込み例
list_file = “c:\work\list.txt”

ID = FOPEN(list_file,F_READ OR F_TAB) // F_TAB指定しない時はカンマ区切り

n_end = FGET(ID,F_LINECOUNT) // 最終行を取得
n = 0
// **** ループ ****
WHILE(n < n_end) // 最終行まで繰り返す
n = n + 1
str = FGET(ID,n,1) // 1列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

str = FGET(ID,n,2) // 2列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

// 処理記述

WEND // WHILEループ