- 締切済み
エクセルVBAで、任意指定のファイル名を取得する方法を
教えて下さい。 ファイル(エクセルブック)を数個開いています。そのうち基本となるファイル(便宜上基本ファイルとします)は常に開いていて、後の数個の作業ファイルを開きます。(作業ファイルはその都度入れ替わり固定のファイルではありません) 基本ファイルを、アクティブな状態でエクセルVBAマクロを走らせます。 そのマクロ実行中に、『ある作業ファイルの任意のセル(任意のセル)をクリックして、そのファイル名とシート名とセルのアドレスとそのセルの値を取得』して、基本ファイルの任意のセル(例えば基本ファイルのsheet1のセルA2~D2に)に記入したいのです。 分かりにくい文で申し訳ないですが、特に上の『 』内の部分です。 どのようにマクロを記述すればいいのか分からないので、教えて下さい。宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
あー・・案の定やっちまった(;´Д⊂) シート名が正しく記録されないですね。。 ワークシートのダブルクリックイベントの中で下記の部分を 差し替えます。 (誤) ' // ダブルクリックされたセルの情報を記録 With mSh lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 .Cells(lRow, "A").Value = ActiveWorkbook.FullName .Cells(lRow, "B").Value = ActiveSheet.Name .Cells(lRow, "C").Value = ActiveCell.Address .Cells(lRow, "D").Value = ActiveCell.Value End With ↓↓↓↓↓ (正) ' // ダブルクリックされたセルの情報を記録 With mSh lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 .Cells(lRow, "A").Value = Sh.Parent.FullName .Cells(lRow, "B").Value = Sh.Name .Cells(lRow, "C").Value = Target.Address .Cells(lRow, "D").Value = Target.Value End With
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 基本ファイルの ThisWorkbook モジュールにコピペして下さい。 その後、ブックを保存してから開きなおすとツールバーが生成 されてます。 ツールバーの「セル情報の記録」ボタンをクリックした後、セルを 適当に DB クリックすると基本ファイルに記録します。 なお、基本ファイルのセルは記録しません。ほかブックのみです。 勢いで作ったのでテストは全然してませんが。 Option Explicit Private WithEvents xlApp As Application Private WithEvents Cbb As CommandBarButton Private mSh As Worksheet ' // 作業用ツールバーの名前 Private Const TOOLBAR_NAME As String = "MyToolBar" ' // レコード記録シート名 Private Const RECSHEET_NAME As String = "Record" ' // ブックのオープンイベント Private Sub Workbook_Open() Set xlApp = Application RETRY: On Error GoTo ERR_NOEXIST_RECSHEET Set mSh = ThisWorkbook.Worksheets(RECSHEET_NAME) On Error GoTo 0 Call AddMyToolBar TERMINATE: Exit Sub ERR_NOEXIST_RECSHEET: With ThisWorkbook.Worksheets.Add(Before:=Sheets(1)) .Name = RECSHEET_NAME .Range("A1:D1").Value = Array("Book", "Sheet", "Address", "Value") End With MsgBox "[ " & RECSHEET_NAME & " ] シートを作成しました。", _ vbInformation Err.Clear Resume RETRY End Sub ' // ブックのクローズイベント Private Sub Workbook_BeforeClose(Cancel As Boolean) Set mSh = Nothing Set xlApp = Nothing Call DelMyToolBar End Sub ' // 作業用ツールバーの追加 Private Sub AddMyToolBar() Dim Cmb As CommandBar Call DelMyToolBar Set Cmb = xlApp.CommandBars.Add(Name:=TOOLBAR_NAME, _ Position:=msoBarTop, _ Temporary:=True) Set Cbb = Cmb.Controls.Add(Type:=msoControlButton) With Cbb .Caption = "セル情報の記録" .Style = msoButtonIconAndCaption .FaceId = 184 End With Cmb.Visible = True Set Cmb = Nothing End Sub ' // 作業用ツールバーの削除 Private Sub DelMyToolBar() On Error Resume Next Set Cbb = Nothing xlApp.CommandBars(TOOLBAR_NAME).Delete On Error GoTo 0 End Sub ' // 作業用ツールバーのボタンクリックイベント Private Sub Cbb_Click( _ ByVal Ctrl As Office.CommandBarButton, _ CancelDefault As Boolean _ ) With Cbb '// ボタンの On/Off 状態を切り替え .State = Not CBool(.State) '// ボタンの On/Off 状態でアイコンを切り替え If CBool(.State) Then .FaceId = 228 ' // FaceID:228 ■マーク Else .FaceId = 184 ' // FaceID:184 ●マーク xlApp.StatusBar = "" End If End With End Sub ' // ワークシートのダブルクリックイベント Private Sub xlApp_SheetBeforeDoubleClick( _ ByVal Sh As Object, _ ByVal Target As Range, _ Cancel As Boolean _ ) ' // 終了条件:: 作業用ツールバーのボタンが Off なら何もしない If CBool(Cbb.State) = False Then Exit Sub ' // 終了条件:: ThisWorkbook なら何もしない If Sh.Parent Is ThisWorkbook Then Exit Sub Dim lRow As Long On Error GoTo ERR_HANDLER ' // 編集モードを解除 Cancel = True ' // ダブルクリックされたセルの情報を記録 With mSh lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 .Cells(lRow, "A").Value = ActiveWorkbook.FullName .Cells(lRow, "B").Value = ActiveSheet.Name .Cells(lRow, "C").Value = ActiveCell.Address .Cells(lRow, "D").Value = ActiveCell.Value End With ' // 記録したことをユーザーに通知(ステータスバーで) xlApp.StatusBar = "Record: " _ & ActiveWorkbook.Name & "/" _ & ActiveSheet.Name & "/" _ & ActiveCell.Address TERMINATE: Exit Sub ERR_HANDLER: MsgBox Err.Description, vbCritical Resume TERMINATE End Sub
お礼
早速のご回答ありがとうございます。 勉強しながら、ご提示いただいたマクロを実行してみます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 『ある作業ファイルの任意のセル(任意のセル)をクリックして、 --クリックして、というのは、事実上はできません。ショートカットあたりかな? セルは、通常の作業で[左]クリックも[右]クリックも作業としてありますから、[左]クリックは完全に使えないし、[右]クリックは、その機能をつぶさないとできません。 そのファイル名とシート名とセルのアドレスとそのセルの値を取得』 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ でも、この範囲だけですと、『リンク貼り付け』の機能だと思います。 それを、何かひとつの操作でしたいというのなら、記録マクロを加工して、ショートカットやツール・コマンドボタンなどにしてあげれば、出来上がるはずです。(ただし、Ctrl + C のショートカット・コピーに関しては、割り当てることは、一般的にはできません。)
お礼
早速のご回答ありがとうございます。
お礼
感動しました! ありがとうございます。早速実行し、確認できました。 私が考えていた目的の結果も得られました。 参考にさせていただきます。