[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルからワードを開きハイパーリンク』(フォーキー)
お世話になります。 業務申し送りの見出し一覧表のようなものを作成しています。 1行目に項目があり、B列に内容(タイトル)、G列に添付資料の有無を表示する欄があります。
やりたいこと。 1、B列を操作(ダブルクリック等)したとき、G列の添付資料が有の場合、ワードの新規ファイルを立ち上げる。 2、ワードに名前をつけて保存する。(保存場所は業務申し送りのエクセルファイルと同じ) 3、名前をつけたワードファイルと、ダブルクリックしたB列のタイトル(セル)をハイパーリンクでリンクさせる。
現状、ネットで見つけたコード 1、ダブルクリックイベント 2、新規ワードファイルを立ち上げるコード 3、開いているワードのパスを取得し、ハイパーリンクを自動作成するコード を使って、
G列の「有」をダブルクリックするとワードファイルが立ち上がり、それを手動で保存。 ワードを開いたまま、B列をダブルクリックし、ハイパーリンクを作成。
というコードを組むことはできました。 (会社のオフラインPCにコードが入ってるので、表示できません。すみません。)
たとえば、現状開いているワードファイル(保存したファイル)のパスをVBAで取得して、それをワークシートのセルに表示、 そのセルの値をハイパーリンクに設定という回りくどいやり方でやっていますが、 やりたいことの2番ですが、ファイルの保存場所が決まっているので、inputboxを使って、ユーザーにファイル名を入力させ、 それをセルに入力、コードには予めファイル名の部分だけ変数を入れておき、セルの値をセルに格納、ということもできるのでしょうか?
やりたいことはなんとなく見えているので、参考になるコードやサイト、あるいはもっと良い方法があればご教授お願いします。
(バージョンは2010のWindows7ですが、一部のPCだけ8であり、近々(ようやく)10に入れ替えるらしいです。 バージョンによってコードが動く動かないという話はたまに聞きますが、どういったものが影響を受けるのでしょうか?)
< 使用 Excel:Excel2010、使用 OS:Windows7 >
inputbox で検索してみてはどうでしょうか。
(閲覧者) 2019/09/17(火) 09:12
何か処理が普通ではないような気がしますが・・・
Excelから Wordの新規ファイルを作成して、「編集後」それを保存して、Excel側にハイパーリンクするということですよね?
ふつうは、最初にWordファイルを作成しておいて それをリンクするのではないでしょうか?
ExcelからWordを立ち上げる必然性が判りません
もしかして 空のWordファイルをとりあえず作っておいて後で編集するということ?
であれば、ルールを作ってルール通りのファイル名で保存させた方がいいと思いますけど。
>やりたいことの2番ですが、ファイルの保存場所が決まっているので、inputboxを使って、ユーザーにファイル名を入力させ、
これは Word側で保存させるということですよね? それこそ 回りくどいような気がしますが・・・
バージョンについては、今回の内容に関しては、心配する必要はないと思います。
(渡辺ひかる) 2019/09/17(火) 09:20
>セルの値をセルに格納 ↓ セルの値を変数に格納では?
(閲覧者) 2019/09/17(火) 09:25
閲覧者さん、変数に格納でした。ありがとうございます。
>もしかして 空のWordファイルをとりあえず作っておいて後で編集するということ?
はい、その流れになります。 説明不足で申し訳ないです。まず、業務の申し送りですが、だいたい1行ないし2行で完結します。それがB列に書き込まれます。 ただ、添付資料が必要な申し送りが出てきます。その資料はワードで作成させたいため、上のような仕組みを考えました。
>ふつうは、最初にWordファイルを作成しておいて それをリンクするのではないでしょうか?
やはりそのやり方が普通ですよね。考えとしては、添付資料は資料1、資料2、のようなファイル名にして、シンプルにしたいと思いました。 そのため、先に添付資料を作成すると、ファイルとリンクさせるとき、いちいち中身を開いて確認しなければいけないのでは? と思い、先にエクセル側から新規ファイルを立ち上げ、空ファイルに名前をつけて保存して、リンクさてしまえば楽かも、と考えたわけです。 こんな方法しか思い浮かばなかったので、指摘されたとおり回りくどいものとなってしましました。
先に添付資料を作成・保存して、エクセルからはリンクを設定したいタイトルを操作するとフォルダからワードファイルを選べる、みたいな形で調べてみたいと思います。 渡辺ひかるさん、ご意見ありがとうございます。参考にしてみます。 (フォーキー) 2019/09/17(火) 10:13
そのほうが、よいと思いますが、
>空ファイルに名前をつけて保存して、リンクさてしまえば楽かも、と考えたわけです。
仮に、この場合でも、ワードを立ち上げる必要はなくて、
雛型(空のワード文書)を用意しておいて、
マクロでは、FileCopyして、それにリンクすればよいです。
(マナ) 2019/09/17(火) 23:05
マナさん、返信ありがとうございます。
>雛型(空のワード文書)を用意しておいて、 >マクロでは、FileCopyして、それにリンクすればよいです。
そのやり方は思い浮かばなかったです。ありがとうございます。 今日早速会社で試してみます。 (フォーキー) 2019/09/18(水) 06:09
皆様ありがとうございました。おかげさまで(かろうじて)実用に耐えられるものを作成することができました。 本当にありがとうございます。
ただ、hyplの型を最初は行数を入れるため整数(Long)にしたんですが、するとinputBoxに何も打ち込まずにOk、またはそのままキャンセルすると
If hypl = "" Then この部分がエラーで止まりました。
Variantにすると解決したということは、空白は整数ではないということなのでしょうか? Stringにすると今度は行数を入れられないので、やはり何でも型のVariantが正しいのでしょうか?
Option Explicit
Sub set()
Dim ws As Worksheet Dim hy As Hyperlink Dim hypl As Variant Dim fine As String
Set ws = Worksheets("Sheet1")
fine = InputBox("添付資料のファイル名を入力してください。") If fine = "" Then
MsgBox "キャンセルします"
Else
FileCopy "C:\Users\user\Desktop\フォルダ1\フォルダ2\フォルダ3\フォルダー4\フォルダ5\フォルダ6\業務申し送り.xlsm", "C:\Users\user\Desktop\フォルダ1\フォルダー2\フォルダ3\フォルダー4\フォルダー5\フォルダ6\" & fine & ".docx" If Dir("C:\Users\user\Desktop\フォルダ1\フォルダ2\フォルダ3\フォルダ4\フォルダ5\フォルダ6\" & fine & ".docx") <> "" Then
hypl = InputBox("ハイパーリンクを設定する行番号を半角で入力してください(例:1行目=1)") If hypl = "" Then
MsgBox "キャンセルします"
Else
Set hy = ws.Hyperlinks.Add(anchor:=Cells(hypl, 2), _ Address:="C:\Users\user\Desktop\フォルダ1\フォルダ2\フォルダ3\フォルダ4\フォルダ5\フォルダ6\" & fine & ".docx")
End If
End If
End If
End Sub (フォーキー) 2019/09/18(水) 14:45
InputBox関数ではなく Application.InputBoxメソッドを使うと パラメータTypeを指定することで、
入力値、返値のタイプ(文字列、数値、セル範囲など)の指定ができます
詳細はヘルプを。
(渡辺ひかる) 2019/09/18(水) 15:24
渡辺ひかるさん、メソッドにして、Type4にすることで解決しました。 ありがとうございました。 (フォーキー) 2019/09/18(水) 16:27
(マナ) 2019/09/18(水) 20:33
Dir は知らずに使ってました。
調べて見ましたが、確かに構文としておかしいですね。でも両方動くという……。
ダブルクリックイベントは、会社の人に説明が難しかったので(途中で心が折れました)ボタンを設置する形にしました。
(フォーキー) 2019/09/19(木) 22:04
そうではなくて、何のためにDirで確認していますか?
先に確認しないと意味がないと思います。
>メソッドにして、Type4にすることで解決しました。
本当ですか?
(マナ) 2019/09/19(木) 22:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.