[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA,Replaceのメモリ不足エラー』(からあげ)
職場で使用しているサーバのIPアドレスがなんらかの理由で変更されたため、
ハイパーリンクの更新をすべく以下のようなマクロを書きました。
(本当はこの後これを各シートに適用するマクロを書く予定です)
しかし、実行しようとするとエラー7メモリ不足が発生し、4行目(HL.Address...)がハイライトされます。
Sub REPLACEHLINK()
Dim HL As Hyperlink
For Each HL In Range("B4:B100").Hyperlinks
HL.Address = Replace(HL.Address, "\\1XX.XX.X.46\", "\\1XX.XX.X.90\")
Next
End Sub
エクセルファイル自体は150kb程度でシートは10個、各シートの表も50*30セル程度のものです。
マクロはこれだけしか書いていないのですがなぜメモリ不足というエラーが発生するのが検討も付きません。
検出と置換する文字列(IPアドレス)が長いことが原因でしょうか?
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(まっつわん) 2021/01/15(金) 16:02
Dim hlk As Hyperlink
For Each hlk In Worksheets(1).Hyperlinks
Debug.Print hlk.Address
Next
End Sub
とりあえず、こんな感じでイミディエイトウィンドウに書き出してみたり、
置き換え後の文字列も書き出して、期待通りの結果が得られているか、
確認してみては?
それで間違いがなければ、
VBA ネットワーク上のファイルの存在確認
とかで検索してみて、サンプルコードを取得して、
ファイルが存在するか確認してみてから、
アドレスを変更するようにしてみてはいかがでしょうか?
こちらではサーバー的なものがないので、確認できないので。
(まっつわん) 2021/01/15(金) 16:42
ハイパーリンクの違いを確認したところ、他のリンクと比べてエラー起きる箇所のセルはフォルダの階層が深い(加えてフォルダ名がやたら長い)ようでした。
試しに同じフォルダのより上の階層のファイルを指定してみたところ実行でき、リンクもきちんと変更されていました。
VBA勉強し始めて日が浅いのですが、フォルダのアドレスが長すぎるとメモリ不足エラー起きるものでしょうか?
(からあげ) 2021/01/15(金) 16:59
VBA 長いファイルパス
で検索したら上記を見つけました。
元々設定できていて、文字数が変わらないのに設定できないのは、
腑に落ちませんが、
参考になれば。
>フォルダのアドレスが長すぎるとメモリ不足エラー起きるものでしょうか?
そうかも知れないしそうでないかも知れないですが、
ネット上で同じ状況でのエラーの相談は見つかりませんね。
ここの過去ログを漁ってみるのも一つの手でしょうが、、、、、
根気強くやるしかないとは思います。
スパッと対応策を指南してくださる方がいるといいのですが。。。。
(まっつわん) 2021/01/15(金) 17:40
なんか、HyperLink.Addの場合は、255文字以上OKで、再設定はNG見たいです。
まずテストデータの作成
Sub mk_testdata()
ActiveSheet.Hyperlinks.Add _
Anchor:=Range("A1"), _
Address:=[rept("a",255)], _
TextToDisplay:="255文字"
End Sub
↑で設定した後、↓で書き換えようとするとエラー
Sub test3()
ActiveSheet.Hyperlinks(1).Address = [rept("a",254)] '正常
ActiveSheet.Hyperlinks(1).Address = [rept("a",255)] 'メモリ不足エラー
End Sub
代替案として、一度ハイパーリンクを削除してから、再度設定しなおせば行けるようです。
Sub 代替案()
Dim hl As Hyperlink
Dim anch(100) As String
Dim disp(100) As String
Dim addr(100) As String
Dim cnt As Long
Dim i As Long
cnt = 0
For Each hl In Sheets("Sheet1").Hyperlinks
addr(cnt) = Replace(addr, "a", b)
disp(cnt) = hl.TextToDisplay
anch(cnt) = hl.Range.Address
hl.Delete
cnt = cnt + 1
Next hl
For i = 0 To cnt - 1
Sheets("Sheet1").Hyperlinks.Add _
Anchor:=Range(anch(i)), _
Address:=addr(i), _
TextToDisplay:=disp(i)
Next i
End Sub
(稲葉) 2021/01/15(金) 17:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.