プロが教える店舗&オフィスのセキュリティ対策術

エクセル2010です。
以下のコードを実行すると「マクロ実行時に実行時エラー13型が一致しません。」というエラーが出ます。配列の型はvariantで設定しているので問題ないと思うのですが、
皆様のお知恵を拝借させていただけないでしょうか。
マクロは

Sub ()

Dim book5 As String,book1 As String
Dim NLink, As Variant, OLink AsVariant , OLdLink As Variant
Dim a As Long
Dim Z As Long, K As Long, J As Long

Book5 = Range("A8").Value
Book1 = Range("A2").Value
Windows(booK5).Activate  ‘○○ファイルをアクティブにする
Z = Range("A1") 
For K = 1 To Z ‘セルA1 に記載されている数字回繰り返す

OLink(K) = Range("A1").Offset((K) - 1, 2) ←ここでエラー
NLink(K) = Range("A1").Offset((K) - 1, 3) ←同じくエラー
‘△△ファイルを開く
buf = Dir(NLink(K))
If buf = "" Then
MsgBox buf & vbCrLf & "は存在しません。 ファイル名を確認してください。", vbExclamation
Exit Sub
End If
For Each wb In Workbooks
If wb.Name = buf Then
MsgBox buf & vbCrLf & "はすでに開いています", vbExclamation
Exit Sub

End If

Next wb
Workbooks.Open Filename:=NLink(K), UpdateLinks:=0
Windows(book1).Activate '××ファイルをアクティブにする

'旧リンクから新リンクに変更

ActiveWorkbook.ChangeLink Name:=OLink(K), _
NewName:=NLink(K), Type:=xlExcelLinks


'△△ファイルを閉じる

Windows(NLink(K)).Activate

Application.DisplayAlerts = False

ActiveWindow.Close

Application.DisplayAlerts = True

Next K

Windows(book1).Activate '××ファイルをアクティブにする。
ActiveWorkbook.Save '××ファイルを保存。
Windows(booK5).Activate '○○ファイルをアクティブにする。

End Sub
どうにかエラーを出なくする方法はないですか?
宜しくお願いします。

他にも、おかしなところがありましたらご指導いただければと思います。

A 回答 (4件)

変数としては宣言されていますけど、


配列として扱い要素数が変わる場合に既存の要素の値を保持したいときには、
Dim NLink, As Variant, OLink AsVariant , OLdLink As Variant
↓変更
Dim NLink, As Variant, OLink() AsVariant , OLdLink() As Variant

2行追加
For K = 1 To Z
redim preserve OLink(K)
redim preserve OldLink(K)
OLink(K) = Range("A1").Offset((K) - 1, 2)
NLink(K) = Range("A1").Offset((K) - 1, 3)

というか配列にする必要もなさそうですね。
For K = 1 To Z ‘セルA1 に記載されている数字回繰り返す
OLink =""
NLink =""
OLink = Range("A1").Offset((K) - 1, 2)
NLink = Range("A1").Offset((K) - 1, 3)
だけで良いのでは?

良く見ていませんけど
Range(・・・から指定している部分がちょっと気になります。
この場合アクティブなシートのRangeが参照されます。
あなたの考えているシート以外を見にゆくかも?
    • good
    • 1
この回答へのお礼

早速の返信ありがとうございました。
>変数としては宣言されていますけど、
>配列として扱い要素数が変わる場合に既存の要素の値を保持したいときには、
>Dim NLink, As Variant, OLink AsVariant , OLdLink As Variant
>↓変更
>Dim NLink, As Variant, OLink() AsVariant , OLdLink() As Variant

>2行追加
>For K = 1 To Z
>redim preserve OLink(K)
>redim preserve OldLink(K)
>OLink(K) = Range("A1").Offset((K) - 1, 2)
>NLink(K) = Range("A1").Offset((K) - 1, 3)
やってみましたら、素直にファイルを開くことができました。ありがとうございました。しかし、リンクを変更するマクロを実行すると

ActiveWorkbook.ChangeLink Name:=OLink(K), _
NewName:=NLink(K), Type:=xlExcelLinks

『実行時エラー '1004'』『'ChangeLink'メソッドは失敗しました'Wokbook'オブジェクト』とエラーが出て止まってしまいます。
何がおかしいのですか?ご教授願えればありがたいと思いますのでよろしくお願いします。

お礼日時:2015/05/21 08:58

マルチポストだったんですね


http://www.moug.net/faq/viewtopic.php?t=72029

マルチポストとは
『[Tips]マルチポストが嫌われる理由~なぜマルチポストは問題か?』
http://stakasaki.at.webry.info/200512/article_3. …

私からは以上です。
    • good
    • 1
この回答へのお礼

すみません。気づかずやってしまいました。

解答くださった皆様には大変ご迷惑をおかけしました。

これからは気を付けたいと思います。

お礼日時:2015/05/25 09:19

恥ずかしながら外部リンクを初めて知りました orz


ActiveWorkbook.ChangeLink Name:=OLink(K), _
NewName:=NLink(K), Type:=xlExcelLinks
でエラーになるのですから
OLink(K) そのものが無い、あるいはKの値に問題とか・・・

リンクのあるBookで
Sub てすと()
Dim V As Variant
Dim i As Integer

V = ActiveWorkbook.LinkSources(xlExcelLinks)
For i = 1 To UBound(V)
Debug.Print i, V(i)
Next i

End Sub
でリンク名はどうなります?
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!