[[20210115152950]] 『VBA,Replaceのメモリ不足エラー』(からあげ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


ステップインでゆっくり1行ずつ実行しても同じエラーメッセージがでますか?

(まっつわん) 2021/01/15(金) 16:02


Sub test()
    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


http://ncaim.hatenablog.jp/entry/2018/03/15/195610

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

とりあえず目下の原因(らしきもの)は把握できましたので作業進められそうです。
貼っていただいたページのコードも後ほど参考にさせていただきます、ありがとうございます。
(からあげ) 2021/01/15(金) 19:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.