[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リンク移動後上書き保存して閉じる』(さんこ)
ハイパーリンク関数を使ってブック間の移動をしています。 関数は以下のものをブック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 >
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
ちょっと、ハイパーリンク関数で他ブックの特定シートへのジャンプする方法がわからないので、試せてないですが・・・・
(もこな2) 2018/10/31(水) 23:36
丸一日放置してすみません。 mmさんのコードをシート1のシートモジュールに貼り付けてマクロ「移動後上書き保存して閉じる」を実行しましたが、上書き保存以外の動作がないです。 やり方は上記で合っていますか? ご迷惑お掛けします。
もこな2さん、シートのイベントで調べてみます。アドバイスありがとうございます。 (さんこ) 2018/11/01(木) 12:31
セルJ13は、J3のことでしょうか? 一度セルJ13に関数をセットし直してやってみます。現在外ですので時間がかかります。アドバイスありがとうございました。 (さんこ) 2018/11/01(木) 15:40
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を選択して表示させたいって話では無かったんですかね。
とりあえず、下記のように変更すればよいとおもいます。
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.