[[20150209110125]] 『カレンダーから作表しハイパーリンク作成』(takaz) ページの最後に飛ぶ

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

 

『カレンダーから作表しハイパーリンク作成』(takaz)

初心者で、この学校で色々な情報をいただき

 コピー、編集して利用させて頂いています
 書式"d"で年間カレンダーを作成しています。
 日付をクリックしマクロを動かすと、クリックした日のワーク表を
 作成し、クリックしたセルに作った表のハイパーリンクを
 作成しようと思い、次のリンクを参考に
 http://www.excel.studio-kazu.jp/kw/20150115124647.html
 下記を作りましたが、素人編集で基礎がわからないため
 めちゃくちゃな内容かもしれません…

 Sub テスト22()
  Dim wA As Worksheet
   Dim wB As Worksheet
   Dim ac As Range

    Set wA = Worksheets("カレンダー")
    Set ac = ActiveCell

    Sheets("原本").Copy After:=Sheets("カレンダー")
  Sheet.Name = Format(ac.Value, "m/d")
    Range("D1").Value = Format(ac.Value, "m/d")

    Set wB = ActiveSheets

    wA.Cells(accel).Select
    wsA.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="wsB!B:1"

  End Sub
 これを実行すると
 Sheet.Name = Format(ac.Value, "m/d") の部分で
 実行時エラー424 オブジェクトが必要です のエラーがでて
 その部分を除いて実行しても
 Set wB = ActiveSheets で同じエラーがでます。
 (ハイパーリンクの所までたどり着けません…)
 どのようにしたらできるでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 色々めちゃくちゃで直すところ一杯ありますけど
 とりあえず、プロシージャの外、標準モジュールの一番頭に
 Option Explicit

 を入れてみてください。
 エラーの内容が変わるはずです。

(稲葉) 2015/02/09(月) 12:46


 とりあえず、答え

 sheetはシステム規定のオブジェクト名ではないので、「オブジェクトはありません」または
 「変数が定義されていません」エラーになる。
 ActiveSheetsも同様。 sいらない

    Sub テスト22()
        Dim wA As Worksheet
        Dim wB As Worksheet
        Dim ac As Range
        Set wA = Worksheets("カレンダー")
        Set ac = ActiveCell

        '//コピー後のシートがアクティブシートになることを利用する
        Sheets("原本").Copy After:=Sheets("カレンダー")
        Set wB = ActiveSheet

        With wB
            '//コピーしたシートのD4を日付、シート名は「/」が使えないので、「.」で日付を表示
            .Range("D1").Value = Format(ac.Value, "m/d")
            .Name = Format(ac.Value, "m.d")
        End With

        With wA
            '//カレンダーシートのアクティブセルに、コピーしたシートのB1のリンクを作成し、選択状態にする
            .Hyperlinks.Add Anchor:=ac, Address:="", SubAddress:="'" & wB.Name & "'!B1"
            .Select
        End With
    End Sub

 やりたいことがあってるかは不明
(稲葉) 2015/02/09(月) 12:58

稲葉さん
 ありがとうございました。全てうまくいきました!
 最後の .Select の後に
 Set al = ActiveCell
        al.Font.Size = 20
        al.Font.Bold = True  (Dim al As Rangeを入れ)
 でフォント調整と太字にしました。

 やはり、コピペ編集ではもう限界ですね…
 稲葉さんがご指摘以外でも、& wB.Name &の&がどうして必要なのか?
 .Name = Format(ac.Value, "m.d")の 「.」の意味
 などなど、基礎がすっぽり抜けたまま、ここまで何とかやっている(?)のですが、
 マクロの基礎を学ぶには本が必要でしょうか?
 もし可能でしたら、推薦本を教えて頂けると助かります。 
(takaz) 2015/02/09(月) 13:53

 本は読んだことないです(識者の皆さまごめんなさい)
 この学校とインターネットで検索した知識のみが私の砦です。

 というか、Activecellはacに既にセットしてありますよね?
 al必要なの?

 >稲葉さんがご指摘以外でも、& wB.Name &の&がどうして必要なのか?
 これは2つ指摘しなければいけないところがありますので、1つずつ説明します。
 (2つ目は必要なかったです。)

 【1】
    ↓最初こんな書き方でしたよね?
 >SubAddress:="wsB!B:1"
 ""でくくると文字列になります。
    Sub test()
        Dim WS As Worksheet
        Set WS = ActiveSheet
        MsgBox "ダブルクオートで挟んだ場合→" & "WS.Name & !A1" & vbNewLine & _
               "変数を変数として使った場合→" & WS.Name & "!A1"
    End Sub
 ↑のコードを実行して、違いを確認してください。

 takazさんが提示されたコードは前者です。
 前者のコードは変数の名前を表示しているだけであり、シート名を表示していません。

 【2】
 >(抜粋)&がどうして必要なのか?
 「&」が必要なのではなく、シングルクオートを付与しています。
http://officetanaka.net/excel/function/tips/tips69.htm
 INDIRECT関数を使用するときは、シート名をシングルクオートで挟む必要がありましたが、
 今回は必要ありませんでした。

 > .Name = Format(ac.Value, "m.d")の 「.」の意味
 シート名やブック名に使えない文字があります。
 そのうちの一つに「/」が含まれており、前述のコード内コメントに記載した通り
 シート名に使えない文字を.に置き換えただけです。
 シート名の書式は "mmdd" でも良いかもしれません。
(稲葉) 2015/02/09(月) 14:33

稲葉さん
 説明ありがとうございました。
 書かれた内容はようやく理解できる程度ですが
 説明を読んでも、他のサイトを見ても、私には
 マクロ以前に関数の知識が足りていないように
 思います。
 少し、本腰入れて学習してみます。
 お世話になりました。 
(takaz) 2015/02/09(月) 15:11

コメント返信:

[ 一覧(最新更新順) ]


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