エクセル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
どうにかエラーを出なくする方法はないですか?
宜しくお願いします。
他にも、おかしなところがありましたらご指導いただければと思います。
No.2ベストアンサー
- 回答日時:
変数としては宣言されていますけど、
配列として扱い要素数が変わる場合に既存の要素の値を保持したいときには、
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が参照されます。
あなたの考えているシート以外を見にゆくかも?
早速の返信ありがとうございました。
>変数としては宣言されていますけど、
>配列として扱い要素数が変わる場合に既存の要素の値を保持したいときには、
>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'オブジェクト』とエラーが出て止まってしまいます。
何がおかしいのですか?ご教授願えればありがたいと思いますのでよろしくお願いします。
No.4
- 回答日時:
マルチポストだったんですね
http://www.moug.net/faq/viewtopic.php?t=72029
マルチポストとは
『[Tips]マルチポストが嫌われる理由~なぜマルチポストは問題か?』
http://stakasaki.at.webry.info/200512/article_3. …
私からは以上です。
すみません。気づかずやってしまいました。
解答くださった皆様には大変ご迷惑をおかけしました。
これからは気を付けたいと思います。
No.3
- 回答日時:
恥ずかしながら外部リンクを初めて知りました 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
でリンク名はどうなります?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PowerShellを使って関連付けら...
-
Excelのエラー
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
batファイルでレジストリキーの...
-
EXCELのVBAでWORDが開いてある...
-
「パス名が無効です」の発生原因
-
VBから参照できないCのDLLを使...
-
ASPからACCESSのOPENどうしても...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
DisplayAlertsブロパティで ”実...
-
排他ロックが掛かっているファ...
-
VBでファイルが開かれているか...
-
Returnに対するGoSubがありません
-
access テキストボックスの値取得
-
Excelファイルのマクロによる排...
-
エクセル VBA dll 読み込...
-
VBAのChangeFileOpenDirectory...
-
ACCESS VBAでのインポート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBから参照できないCのDLLを使...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
OUTLOOK VBA 指定フォルダ内の...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
NAS上のファイルの使用中が解除...
-
すでにファイルが開かれている...
-
VB6 Dir関数で52エラー発生
-
FORTRANの実行エラーについて
-
Excelvbaのマクロのファイル名...
-
Excelファイルのマクロによる排...
-
エクセルマクロでエラーの原因...
おすすめ情報