エクセルとワードのファイルを一つの表で開く方法

このQ&Aのポイント
  • エクセルとワードのファイルを一つの表で開く方法について質問します。VBAを使用してダブルクリックしたらファイルを開くマクロを作成したいと思っていますが、片方しか開けない状況です。
  • プログラムの1つではワードファイルが開けず、もう1つではエクセルファイルが開けないという問題が発生しています。どのようなプログラムを組むことで、エクセルとワードの両方を開くことができるのでしょうか。
  • appactivateステートメントなどを使用して実現することはできるのでしょうか?どの関数を使えば良いか、具体的な方法が分からないため、アドバイスをいただきたいです。
回答を見る
  • ベストアンサー

エクセルで表がありそのセルにはエクセルのファイル名とワードのファイル名

エクセルで表がありそのセルにはエクセルのファイル名とワードのファイル名が一覧されています。そこでVBAにてダブルクリックしたらそのエクセルかワードのファイルを開くというマクロを組みたいんですがどうやったら一つの表でエクセルもワードも開けますか?例えばA~E列がワードの一覧でF~Jまでがエクセルの一覧のような表です。以下に試したプログラムがありますが片方しか開けません。 Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) If target.Row > 2 And target.Column < ActiveSheet.UsedRange.Columns.Count + 1 Then If target.Value = Empty Then MsgBox "データがありません", vbInformation ActiveSheet.Range("a1").Select Else Workbooks.Open ("C:\sample\" & target.Value) End If End If End Sub ↑これだとワードファイルが開けません。 Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) Set Myword = CreateObject("word.application")   Myword.Visible = True   Myword.Documents.Open Filename:="C:\sample\" & target.Value   End Sub ↑これだとエクセルファイルが開けません。 どのようなプログラムを組めばエクセルとワードを開けますでしょうか?appactivateステートメントとか使えばできますか?何の関数を使ったらいいか分かりませんどなたかご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>Set Myword = CreateObject("word.application") 今回の質問のケースのような時に、オートメーションを使ったら「まずい」と思うのですが……。理由はないのですが、気をつけないとタスクに残してしまい兼ねません。 ハイパーリンクというのはグローバルだから、それで解決するという手も、一興だけど、私は、以下のような方法を実行しています。ただし、問題点は、Win98 では動かないはすです。 拡張子を実行プログラムに関連付けしているものに限りますが、複数の拡張子がある場合は、こんな風にします。当然、pdf でも、txt でも、jpg でも可能です。 以下をみて工夫してみてください。 '// Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  '以下は必ず、¥を末尾に入れてください。  Const mPATH As String = "C:\sample\"  Dim Fn As String  Cancel = True  If Target.Row = 1 Then Exit Sub  If Target.Value = "" Then MsgBox "データがありません", vbExclamation: Exit Sub  Fn = mPATH & Target.Value  If Dir(Fn) = "" Then MsgBox "ファイルがありません。", vbExclamation: Exit Sub  shtPath = CreateObject("Scripting.FileSystemObject").GetFile(Fn).ShortPath  Fn = shtPath  With CreateObject("Wscript.Shell")   .Run "" & Fn & "", 3  End With End Sub

その他の回答 (2)

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.2

はたしてマクロを組む必要があるのでしょうか? セルにハイパーリンクを設定するのでは駄目ですか?

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

拡張子でIf判定して実行する命令を変えればいいのでは?

marsh_village
質問者

補足

その方法がしりたいんです!

関連するQ&A

  • Excel セルをクリックするだけで入力(エクセル2003)

    http://questionbox.jp.msn.com/qa915096.html からの転載で申し訳ありません。 この中で、jindonさまの方法で、2つの文字の入れ替えはできました。 ------------------------------------------------ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Row=1 And .Column=1 Then If .Value = "○" Then .Value = "" Else .Value = "○" End If End If End With End Sub ------------------------------------------------ そこで、例えば○△×のように、順番に3つの文字を入れ替えるにはどう記述すればよいでしょうか? よろしくお願いいたします。

  • エクセル VBA について

    エクセルで、 ダブルクリックしたら"*"を表示したい範囲に【入力】という名前をつけ、 ダブルクリックしたら9つ左のセルの内容を表示したい範囲に【金額】という名前をつけ、 二つの構文?をVisual Basicに作成したんですが、エラーが出てしまいます。 ひとつずつだと上手くいくのですが、なぜでしょうか? わかる方教えてください。 あと申し訳ないのですが、VBAはまったくわからないため、ネット上で構文をコピーして貼り付けました。 そんな者でもわかる修正の説明をお願いいたします。 以下が作成し、エラーとなってしまう構文です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "金額" If Target.Value = "" Then Target.Value = Target.Offset(0, -9).Value Cancel = True End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "入力" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "*" Then Target = "" Else Target = "*" End If End If End Sub

  • エクセルコードについて

    エクセルコードについて Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Row >= 1 And Target.Row <= 10 And Target.Column >= 1 And Target.Column <= 10 Then     If Target.Value = "○" Then       Target.Value = ""     Else       Target.Value = "○"     End If     Cancel = True   End If End Sub ではセルA1~J10ですが、これをA1~A10などに変更するのにはどのようにすればよろしいでしょうか。

  • 同じシート内にイベントプロシージャが二つある時

    いつもお世話になります。 WINDWS7 EXCELL2010 です。 下記の1 2のマクロを同じシート内にイベントプロシージャを二つ挿入したところ、 ※1 ※2のような現象が起きました。 この現象を解決したくご指導を仰ぎたいです。 宜しくお願いします。 ※1 エラー表示 コンパイルエラー: 名前が適切ではありません; Worksheet_BeforeDoubleClick ※2 下記の構文が青色に反転 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 1 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A2:A51")) Is Nothing Then Exit Sub Cancel = True Sheets(CStr(Target.Value)).Select End Sub 2 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myRange As Range Set myRange = Intersect(Target, Range("B2:B51")) If Not myRange Is Nothing Then Select Case Target.Value Case "" Target.Value = "○" Case Else Target.ClearContents End Select Cancel = True End If End Sub

  • セルの値をファイル名にするには

    現在下記のマクロを入力しています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この時 ファイル名を SHEET1のA1 セルの値を利用してファイル名にするために下記の内容を入れてブックを保存したいと考えています。 上記のマクロが入っていないときは上手く行くのですが下記を追加するにはどうすればいいかご指導いただけませんでしょうか。 宜しく御願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub

  • Excel VBAについて

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("F:F")) Is Nothing Then Exit Sub Application.Goto Worksheets("人件費").Range("A1") Worksheets("人件費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("G:G")) Is Nothing Then Exit Sub Application.Goto Worksheets("外注費").Range("A1") Worksheets("外注費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub 上の指令はFの列をダブルクリックすると人件費のシートが開いてAある値を人件費の新しいセルのAに代入する指令ですが それをG列ダブルクリックで外注費シートに同じようにやろうと思いましたが出来ません。 たぶん根本的に書き方が間違っているのかと思われますが、ご指導のほどお願いします。

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

  • Excelでシート名と最終更新日を自動表示したい

    Excelを使って (1)セルA1に入れた名目をシート名にし (2)セルH1には、最終更新日を自動で入れたいです。 調べた結果、 シート名を右クリックして「コードの表示」から (1)は Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub を入れてうまくいきましたが、 (2)は Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub を入れてみましたが(←調べましたもの) うまくいきませんでした。 単純に、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub とつなげて入れるのではだめなんでしょうか? それとも、(2)の何かが間違っていますか? ご教授願います。

  • エクセルでセルをクリックすると“○”と入力したい。

    VBA”超”初心者です。 理屈抜きにして結果だけ教えていただきたいことがございます。 課題である表記を実現するために、 ワークシートエリアに以下を記しました (サイトからコピーしてきただけですが。。) 同時に同じワークシート内において、 "R18:R103" においても'処理対象としたいのですが、 どう改造すればよいでしょうか? (追伸)それと、シングルクリックバージョンも検討したいのです。よろしくお願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "O18:O103" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" Else Target.ClearContents End If End If End Sub

  • 度忘れです、名前つきセルの参照方法

    お世話になります。 三月まで仕事で使っていたのですが、度忘れ?しました。 エクセルでセルに名前を付けて、マクロで 名前を拾う方法を忘れてしまいました? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox Target.name.name End Sub じゃなかったですよね。 宜しくお願いします。