人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル(2003)VBAでつくるマクロに関する質問です。

ハイパーリンクの一括設定をするマクロをWEB上からダウンロードしました。

勉強のため、自分で書ける程度にソースの理解をしたいと思っています。
Application.ScreenUpdating等を除いた根幹部分は下記のようになっています。

Dim a
For Each a In Selection
If Not IsError(a) Then
a.Hyperlinks.Add a, a.Value
End If
Next

この記述では、変数aに定義がなされていません。
変数aをvariant以外で定義するなら、どう書けばいいのでしょうか。
variant以外で書いた場合、もう少し複雑になりそうな気がするのですが。

●質問者: tomokazu
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:ADD application NeXT VBA Web
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●40ポイント

Dim a As Object

あるいは

Dim a As Variant

のいずれかになります。


Object型の方がメモリ使用量が少ないので

目的がハッキリしている現状ではObject型が正解かもしれないが

コーディングする上ではVariant型の方が型に悩まなくて済むので便利。


なお、これは実はやってみれば簡単に判ります。

Dim a As Boolean

などとエラーになりそうな指定をして実行してみる事です。

そうすれば「オブジェクト型かバリアント型でなければなりません」といわれますから・・・。

同じ事がFor Eachのヘルプに書かれていますからご一読を。

◎質問者からの返答

ありがとうございます。For Eachのヘルプ、拝読させていただきます。


2 ● airplant
●40ポイント ベストアンサー

型を指定する場合は、Rangeです。セルは、Rangeオブジェクトですので。

Shapeオブジェクト用のプログラムではないですよね? もし、Shapeにハイパーリンクを設定しているのであれば、Shapeです。

Sub Normal()
 
 Dim a As Range
 For Each a In Selection
 If Not IsError(a.Value) Then
 a.Hyperlinks.Add a, a.Value
 End If
 Next

End Sub

なお、このサンプルだと空白セルへもハイパーリンクが張られてしまいますので、if文の中にもう一つif文を入れて""かどうかをチェックするのがいいと思います。

同じif文だと、error式のときに型エラーになってしまいます。

又、サブアドレス(例. q.hatena.ne.jp/1214348151#a838419)が記載あるのであれば、そちらもトライしてみてはどうでしょうか?


Iserror(a.Value)

→こちらは、Iserror(a)でも同じなのですが、後で分かり易くするため、デフォルトであってもプロパティは記載したほうがベターです。

◎質問者からの返答

おっしゃる通り、元のマクロは、もう一つif文をかませていました。

知りたいことをはっきりさせるために、今回転載する際に省略させていただきました。

さすがですね。

サブアドレスの記載があった場合は、上記マクロでは実行できないんでしょうか??

一度試してみます。

プロパティを記載する旨、了解しました。

勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ