中小企業の働き方改革をサポート>>

Excel VBAで下記のようなコードを書いて、ファイルに対するハイパーリンクを追加したいのですが、実行時にエラーとなってしまいます。
どんな原因が考えられるか教えていただけますでしょうか。
よろしくお願いいたします。

<実行環境>
Excel 2003

<コード> 
With ActiveSheet
.Hyperlinks.Add Anchor:=.Cells(RowNum, 1), Address:=FilePath
End With

<エラー>
実行時エラー '1004'
アプリケーション定義またはオブジェクト定義のエラーです。

<補足>
Excel2000の環境で実行すると正常に動作します。バージョンの違いで動作に差がでるのでしょうか?
またRowNumとFilePathには有効な値が入っていることはステップ実行で確認しています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

2003で試してみましたが、問題なく動作するようです。




FilePathの方は存在しない値を設定しても、エラーにはならないみたい。
ただし、""を設定しておいて実行しようとすると、
 実行時エラー '1004'
 アプリケーション定義またはオブジェクト定義のエラーです。
となります。

また、RowNumの方は存在しない値(0など)にしておくと、やはり
 実行時エラー '1004'
 アプリケーション定義またはオブジェクト定義のエラーです。
が出ます。

なので、再度、RowNum及びFilePathの値をチェックしてみるのがよろしいかと…
(RowNum、FilePathの値をどのようにセットしているか不明ですが、2000では実行できるとのことなので、計算の元になるデータが違っているとかはないですか?)
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。
ご指摘の点を含めていろいろ試していたのですが、原因はバージョンの違いではなく、ブックを共有していたために処理できなかったということがわかりました。お手数をおかけしました。

お礼日時:2011/05/23 23:40

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q実行時エラー'1004'で困っています。

少し前にも同じコードの他の点についてアドバイスをいただいたのですが、新たな問題点が生じたので改めて質問させてほしいです。
具体的な問題点が分からなかったのでコードをそのまま載せました。

シート1に値を入力すると、繁殖牛データ。データ。という2個のシートから検索し、リンクをつけたいです。
繁殖牛データシートに入っている値を入力した時は
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))
データシートに入っている値を入力した時は
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1))
で「'Range'メソッドは失敗しました:'_Worksheet'オブジェクト」とでます。
試験的にどちらのシートにも入っていない値を入力すると、思惑通りに"見つからないのでリンクは貼りません"と帰ってきます。


Private Sub Worksheet_Change(ByVal Target As Range)

Dim kennsaku, y, z

If Target.Count > 1 Then Exit Sub 'セルを二つ以上選択した場合
If Target.Value = "" Then Exit Sub 'データが空の場合

If Application.CountIf(Range("A1:Z80"), Target.Value) > 1 Then
MsgBox Target.Value & "は既に入力されています", vbOKOnly + vbExclamation
Target.Clear
Exit Sub
End If

Set y = Worksheets("繁殖牛データ").Range("$C$1:$C$1003")
Set z = Worksheets("データ").Range("$A$1:$A$65536")

kennsaku = Application.Match(Target.Value, y, 0)
If IsNumeric(kennsaku) Then
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))

Else
kennsaku = Application.Match(Target.Value, z, 0)
If IsError(kennsaku) Then
MsgBox "見つからないのでリンクは貼りません", vbOKOnly + vbExclamation
Exit Sub
Else
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1))

End If
End If
Range("A1:Z80").Font.Underline = False
End Sub

少し前にも同じコードの他の点についてアドバイスをいただいたのですが、新たな問題点が生じたので改めて質問させてほしいです。
具体的な問題点が分からなかったのでコードをそのまま載せました。

シート1に値を入力すると、繁殖牛データ。データ。という2個のシートから検索し、リンクをつけたいです。
繁殖牛データシートに入っている値を入力した時は
ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))
データシートに入っている...続きを読む

Aベストアンサー

ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3))

これはエラーになるよ。
1.sheet名の指定の仕方が変だ。
2.&の後はcellを参照していない。cellの値を参照している。これはhyperlinkをクリックしたときにエラーになる。

ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="繁殖牛データ!" & "R" & kennsaku & "C1"

としたいのではないか。

"R" & kennsaku & "C1"

"A" & kennsaku
でもいいか。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QVBAにて実行時エラー’1004’:「アプリケーション定義又はオブジェクト定義のエラー」発生?

VBA初心者です。Xp,Excel2000を使用しています。
シフト者のカレンダー作成しており、動作していたVBAのコピーを利用しています。
何回かループを回った後表記エラーとなります。アドバイスをお願いいたします。

  A B C D E
--------------------------
1 2 3 4 ...... <-- 日付
2 2 0 1 ...... <-- シフト(ln_1の範囲名)
7 8 9 10 ...... <-- 日付
1 0 3 3 ..... <-- シフト(ln_2の範囲名)
....................

For i = 1 To 6   <-- 最大6週にわたる
Set r = Range("ln_" & LTrim$(Str$(i)))
cpos = r.Column
rpos = r.Row
For n = 1 To r.Columns.Count
With Cells(rpos - 1, cpos + n - 1)
m = .Characters.Count <-- 数回ループ後ここでエラーとなる!
s = Cells(rpos, cpos + n - 1) <-- シフト情報
Select Case s
Case ""    '- Blank -
........ 日付セルの装飾

Case "0" '- Holiday -
......... 日付セルの装飾

Case "1" '- shift1 -
........... 日付セルの装飾

VBA初心者です。Xp,Excel2000を使用しています。
シフト者のカレンダー作成しており、動作していたVBAのコピーを利用しています。
何回かループを回った後表記エラーとなります。アドバイスをお願いいたします。

  A B C D E
--------------------------
1 2 3 4 ...... <-- 日付
2 2 0 1 ...... <-- シフト(ln_1の範囲名)
7 8 9 10 ...... <-- 日付
1 0 3 3 ..... <-- シフト(ln_2の範囲名...続きを読む

Aベストアンサー

よく調べてみたら、Characters.Countは、"ABC"などの文字列では3を返しますが、"123"ではエラーになり、数字ではだめなようです。セルの書式を文字列にしてもだめでした。

m = .Characters.Count は文字の数をお知りになりたいだけのようなので、以下のコードに換えて試してみてください。

m=Len(.value)

なお、MsgBox .Address などは、エラーのでるコードの前に挿入、という意味で書きました。
泥臭い方法ですが、コードがどのセルを参照しているのかわかるので、エラーがでる時などにはおすすめです。

QエクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば
=IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。
これをVBAで書こうとして

If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then
MsgBox True
Else
MsgBox False
End If

とやってみたのですが、正しくないようです。
どのように書けばいいのでしょうか?

Aベストアンサー

>とやってみたのですが、正しくないようです。

式は正しいと思いますよ

ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。

でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。

QEXCEL2000VBAでハイパーリンクの有無を調べたい。

おはつです。どなたか、知ってらっしゃる方がいらしゃいましたら、よろしくお願い致します。
[環境]
Windows2000
EXCEL2000

[質問]
・下記のソースで、ハイパーリンクが設定されている項目
をcmdボタンイベントから設定を外しました。しかし、ハイ
パーリンクが元データに設定されていない場合、Errが返り
ます。
selectで指定されたセルのハイパーリンク有無を調べる
方法を教えて頂けないでしょうか?

If Not IsNull(Trim(Range("E105").Text)) Or Trim(Range("E105").Text) <> "" Then
sURL1 = Trim(Range("E105").Text)
Range("E105:AG108").Select
Selection.Hyperlinks(1).Delete
End If

Aベストアンサー

selection.hyperlinks.count
でリンクの数を取得すればよいかと。

QエクセルVBA 別シートの複数のセルの値をコピーする方法

いつもお世話になります。

Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")

sh1.Range("C6").Value = sh2.Range("F5").Value
として、1つのセルの値ならコピーできるのですが、
sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value
としても、セルの値を持ってくることができません。
どのように書けば良いのでしょうか?

ちなみに今は、
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
としているのですが、上記だとセルを範囲指定してしまって作業が見えるのでカッコ悪いのです。

Aベストアンサー

7-samuraiの質問ですみません。
No5のimogasiさん、いつもお世話様です。

Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet1")
sh1.Range("c1:c5").Value = sh2.Range("A1:A5").Value
End Sub

で、うまくいきますよ。
複数セルの場合Valueは省略できないようです。

QExcelで2つのファイルの違い(Diff)をとりたい

Excelでファイル名が同じで更新日付の異なる2つのファイルがあります。
この2つのファイルで内容が変わっている部分を知りたいのですが、良い方法はあるでしょうか?
(もしくは内容が変わっているかどうかだけでも知りたい)

比較が必要なファイルが大量にあるため、一つずつ見比べる時間が無く、困っています。

Aベストアンサー

使ってないのでお勧めはわかりませんが、こちらのフリーソフトを試してみては?
http://search.vector.co.jp/search?query=excel+%94%E4%8Ar


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報