[[20181031063404]] 『リンク移動後上書き保存して閉じる』(さんこ) ページの最後に飛ぶ

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

 

『リンク移動後上書き保存して閉じる』(さんこ)

 ハイパーリンク関数を使ってブック間の移動をしています。
 関数は以下のものをブック1のSheet1のJ3セルに入れています。(スマホからなので詳細は省略します。移動先のブック名、シート名はブック2、Sheet2です。)
 HYPERLINK("[フルネーム]セルの名前","表示名")

 ブック1のSheet1からブック2のSheet2に移動したとき、ブック1を保存して閉じたいと思っています。
 ?@マクロの記録をクリック。マクロ名「移動後上書き保存して閉じる」
 ?Aブック1のSheet1のJ3セルをクリック。Sheet2に移動後、Sheet1を再度開き、上書き保存して閉じる。

 すると以下のコードが取れました。(変わらずスマホで入力したので間違ってたらすみません)

 Sub 移動後上書き保存して閉じる()
 '
 '移動後上書き保存して閉じる Macro
 '

 '
     Range("J3").Select
     Windows("Sheet2.xlsm").Activate
     Application.Goto Reference:"R1C11"
     Windows("Sheet1.xlsm").Activate
     ActiveWorkbook.Save
 End Sub

 これをフォームコントロールボタンに登録して、実行してみましたが、シート移動はせず、上書き保存のみ実行されました。
 求める動作をマクロで実施するにはどうすれば良いか教えてください。よろしくお願いします。

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


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address(0, 0) = "J13" Then
       Application.DisplayAlerts = False
       ThisWorkbook.Close True
  End If
End Sub
(mm) 2018/10/31(水) 10:21

 mmさんありがとうございます。
 マクロは素人ですが、これはThisWorkbookに貼りつけるという認識であっていますか?
 また、別のパソコンで記録をとったところ、何故か

 Sub 移動後上書き保存して閉じる()
  '
  '移動後上書き保存して閉じる Macro
  '
  '
      Range("J3").Select
      ActiveWorkbook.Save
  End Sub

 となりました。

 mmさんのコードがあれば記録でとったコードは使わなくても良いのでしょうか。
 使い方がわからずご迷惑お掛けします。
(さんこ) 2018/10/31(水) 13:05

ブック1のSheet1のシートモジュールです。
(mm) 2018/10/31(水) 13:15

ハイパーリンク関数を普段つかわないのでいまいちわかりませんが、
「シートのイベント」という言葉の意味がわかれば、FollowHyperlinkイベントが使えませんか?

ちょっと、ハイパーリンク関数で他ブックの特定シートへのジャンプする方法がわからないので、試せてないですが・・・・
(もこな2) 2018/10/31(水) 23:36


 丸一日放置してすみません。
 mmさんのコードをシート1のシートモジュールに貼り付けてマクロ「移動後上書き保存して閉じる」を実行しましたが、上書き保存以外の動作がないです。
 やり方は上記で合っていますか? ご迷惑お掛けします。

 もこな2さん、シートのイベントで調べてみます。アドバイスありがとうございます。
(さんこ) 2018/11/01(木) 12:31

移動後上書き保存して閉じる
は、不要です。
Sheet1のセルJ13をクリックするだけです。
(mm) 2018/11/01(木) 15:04

 セルJ13は、J3のことでしょうか? 一度セルJ13に関数をセットし直してやってみます。現在外ですので時間がかかります。アドバイスありがとうございました。
(さんこ) 2018/11/01(木) 15:40

j13とj3を間違えました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Address(0, 0) = "J3" Then
       Application.DisplayAlerts = False
       ThisWorkbook.Close True
  End If
End Sub

(mm) 2018/11/01(木) 17:21


 時間が空いて申し訳ございません。
 どうしても上記のコードで移動、上書き保存、閉じるの動作が出来なく、しばらく考えておりました。
 最初にマクロの記録で取得したコードは、移動したあと一度元ブックに戻り、上書き保存してマクロの記録を終了していたため、実行しても移動せず(正確には移動して、戻る?)結果的に元ブックを保存する動作しかしてなかったと推測しました。

 そこで、移動したあと元ブックに戻らないでブック2で記録を終了したコードに、いただいたコードを合体させて、

 Sub Macro1()
 ,
 ,Macro1 Macro
 ,

 ,
    Range("J3").Select
    Windows("Book2.xlsm").Activate
    Application.Goto Reference:="R1C1"
    Range("J3").Select
    ActiveWorkbook.Save
    Application.DisplayAlerts=False
    ThisWorkbook.Close True
 End Sub

 色々試行錯誤しながら上記のコードを標準モジュールで実行したところ、ハイパーリンク関数がなくとも移動したのち元ブック保存して閉じるという動作ができました。
 ただ、このコードでは移動先ブックが開いていることが前提です。
 Windows("Book2.xlsm").Activate
 この部分ですね。
 移動先ブックが閉じていても開くようにするには、Activateの部分をどう書き換えれば良いでしょうか?
 よろしくお願いします。
(さんこ) 2018/11/03(土) 14:31

やり方はいくつかあるとおもいますが、
>移動先ブックが閉じていても開くようにするには、
とのことですから、そのまま、「閉じているものを開かないと」ダメでしょう。

開いてるかもしれないし、閉じてるかもしれないという状態であれば、どちらであるのかチェックして(条件分岐してから)、開いていない時だけ、開かないとダメですよね

   Sub test()
      Dim MyWB As Workbook

      'Book2.xlsm が開いていれば、「MyWB」にセットされる
      On Error Resume Next
      Set MyWB = Workbooks("Book2.xlsm")
      On Error GoTo 0

      '「MyWB」になにもセットされていなければ(Nothingだったら)ブックを開いてセットする
      If MyWB Is Nothing Then
         Set MyWB = Workbook.Open("C:\test\Book2.xlsm")
      End If

      Application.GoTo Referece:=MyWB.Worksheets(1).Range("J3"), Scroll:=True

   End Sub

(もこな2) 2018/11/03(土) 16:34


 もなこ2さん丁寧な回答ありがとうございます。

 >Set MyWB = Workbook.Open("C:\test\Book2.xlsm")

 この部分に「ファイル」タブを開いて表示されるブックのフルパスを入れましたが、実行するとこの部分がオブジェクトが必要ですとエラーになります。
 素人で申し訳ないのですが、ここでいうオブジェクトを教えていただければ。
 よろしくお願いします。
(さんこ) 2018/11/03(土) 17:07

失礼しました。ミスがいくつかありました。

 誤 Set MyWB = Workbook.Open("C:\test\Book2.xlsm")
    ↓
 正 Set MyWB = Workbooks.Open("C:\test\Book2.xlsm")

 誤 Application.GoTo Referece:=MyWB.Worksheets(1).Range("J3"), Scroll:=True   
       ↓
 正 Application.GoTo Reference:=MyWB.Worksheets(1).Range("J3"), Scroll:=True

直すと↓になります。

   Sub test()
      Dim MyWB As Workbook

      'Book2.xlsm が開いていれば、「MyWB」にセットされる
      On Error Resume Next
      Set MyWB = Workbooks("Book2.xlsm")
      On Error GoTo 0

      '「MyWB」になにもセットされていなければ(Nothingだったら)ブックを開いてセットする
      If MyWB Is Nothing Then
         Set MyWB = Workbooks.Open("C:\test\Book2.xlsm")
      End If

      Application.GoTo Reference:=MyWB.Worksheets(1).Range("J3"), Scroll:=True

   End Sub

(もこな2) 2018/11/03(土) 17:34


 もなこ2さんありがとうございます。

   Sub test()
      Dim MyWB As Workbook

      On Error Resume Next
      Set MyWB = Workbooks("Book2.xlsm")
      On Error GoTo 0

      If MyWB Is Nothing Then
         Set MyWB = Workbooks.Open("C:\test\Book2.xlsm")
      End If
      Application.GoTo Reference:=MyWB.Worksheets(1).Range("J3"), Scroll:=True

      Application.DisplayAlerts=False
      ThisWorkbook.Close True

   End Sub

 下二行に追加したところ、望むものができました。ありがとうございます。
 追加で質問させてください。移動後、何故か常にJ3セルが画面左上に表示されます。
 コードを見てもとくにそのような指示はないように思うのですが。
 特に困るわけではないですが、気になったもので。
(さんこ) 2018/11/03(土) 17:59

 よく考えてみたらセルをA1にすれば良い話でした。
 大変お世話になりました。ありがとうございます。
(さんこ) 2018/11/03(土) 18:41

>何故か常にJ3セルが画面左上に表示されます。
>よく考えてみたらセルをA1にすれば良い話でした。

あれ、J3を選択して表示させたいって話では無かったんですかね。
とりあえず、下記のように変更すればよいとおもいます。

 Application.GoTo Reference:=MyWB.Worksheets(1).Range("J3"), Scroll:=True
                                                                     ↑
                                                ここをFalseに変更するか、そもそも記述しない

(もこな2) 2018/11/03(土) 22:20


 あぁ、何故Scrollが入るのかと思っていましたが、そこで画面に持ってくるのですね。
 J3セルは、元ブックのハイパーリンク関数を入れていたセル番地です。マクロの記録でごっちゃになってブック2のJ3セルを選択するみたいな表現になってしまいました。
 ブック2に移動出来ればセルはどこでも大丈夫でしたので。
 とにかく勉強になりました。ありがとうございます。
(さんこ) 2018/11/03(土) 22:45

コメント返信:

[ 一覧(最新更新順) ]


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