[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『カレンダーから作表しハイパーリンク作成』(takaz)
初心者で、この学校で色々な情報をいただき
コピー、編集して利用させて頂いています 書式"d"で年間カレンダーを作成しています。 日付をクリックしマクロを動かすと、クリックした日のワーク表を 作成し、クリックしたセルに作った表のハイパーリンクを 作成しようと思い、次のリンクを参考に https://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.