Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5754 / 13645 ツリー ←次へ | 前へ→

【49061】パスの指定方法 ミク 07/5/22(火) 9:48 質問[未読]
【49073】Re:パスの指定方法 通りすがり 07/5/22(火) 14:59 発言[未読]
【49086】Re:パスの指定方法 Kein 07/5/22(火) 18:04 回答[未読]
【49087】Re:パスの指定方法 Kein 07/5/22(火) 18:07 発言[未読]
【49090】Re:パスの指定方法 ミク 07/5/22(火) 19:40 お礼[未読]

【49061】パスの指定方法
質問  ミク  - 07/5/22(火) 9:48 -

引用なし
パスワード
   VBA内でのパスの指定方法について質問が有ります。

<目的>同フォルダ内にある別のブックから(その別のブックを開かずに)
   現在のブック(仮にTest.xlsとします)に値を抜き出してくるマクロ。
   抜き出される方のブック名とシート名とセルアドレスを固定ではなく、
   Test.xlsのシートAのセルに入力しているものにしたいのです。

具体的に、現在以下のようなものを作っています。
---------------------------------------------------------------
Sub Test()

Dim Filename, Sheetname, CopyCellAdd As String

Filename = (Worksheets("シートA").Cells(1, 1))  '例 Book1 等
Sheetname = (Worksheets("シートA").Cells(1, 2))  '例 シートF 等
CopyCellAdd = (Worksheets("シートA").Cells(1, 3)) '例 (3,3) 等

Worksheets("シートA").Cells(5, 5) = _
   "='" & ThisWorkbook.Path & _
    "\[" & Filename & ".xls]Sheet1'!B5"

End Sub
---------------------------------------------------------------
現在、Test.xlsを開いており、そのシートAのA1に『Book1』、A2に『シートF』、
A3に『(3.3)』と入力しているとします。

上のマクロだとブック名は期待通り『Book1.xls』になりますが、その中の
Sheet1のセルB5の値を抜き出してきちゃいます。(シート名とセルアドレスを
固定にしてるのだからもちろん当たり前です)

このシート名とアドレスを固定ではなく、Test.xlsのシートAのA2とA3に入力
しているものにしたいのです。Filenameは何とか上のでウマく行きましたが、
SheetnameとCopyCellAddのPath指定への使用方法がわかりません。

すみませんがどなたかご教授頂けないでしょうか。

【49073】Re:パスの指定方法
発言  通りすがり  - 07/5/22(火) 14:59 -

引用なし
パスワード
   こんにちは

拙い知識ですが,(3,3) を C3 とする方法であれば動きました。
あくまでも (3,3) にしたいのならば,他の方の回答を待ってください。

Sub Test()

Dim Filename, Sheetname, CopyCellAdd As String

With ThisWorkbook.Sheets("シートA")

  Filename = .Range("A1")  '例 Book1 等
  Sheetname = .Range("A2")  '例 シートF 等
  CopyCellAdd = .Range("A3") '例 (3,3) 等 ---> C3 等

  .Cells(5, 5) = "='" & ThisWorkbook.Path & _
          "\[" & Filename & ".xls]" & _
          Sheetname & "'!" & CopyCellAdd
  
End With

End Sub

【49086】Re:パスの指定方法
回答  Kein  - 07/5/22(火) 18:04 -

引用なし
パスワード
   手入力したブック名などは、タイプミスする懸念がありますから、
できるだけ確実な方法を考えます。こんなマクロでどうでしょーか ?
以下の全てを標準モジュールの先頭から入れて下さい。
Set_MyLinkを実行したとき、InputBoxが2回出るのでリンク元・先の
セルを指定します。次にリンク元ブックを選びます。
するとA1セルのあたりにコンボボックスが出ますので、シート名を選んで下さい。

Private MyF As String, Ad1 As String, Ad2 As String

Sub Set_MyLink()
  Dim LkR As Range, MyR As Range
  Dim TbN As String, SAry() As String
  Dim DB As DAO.Database, Tbl As DAO.TableDef
  Dim i As Integer
 
  On Error GoTo ELine
  With Application
   Do
     Set LkR = Nothing
     Set LkR = .InputBox("リンク 元 の" & _
     "セルを一つ選択して下さい", Type:=8)
   Loop While LkR.Count > 1
   Set MyR = .InputBox("リンク 先 の" & _
   "セル範囲を選択して下さい", Type:=8)
   MyF = .GetOpenFilename("エクセルブック(*.xls),*.xls", _
   , "リンク元のブックを選択して下さい")
   If MyF = "False" Then GoTo ELine
  End With
  On Error GoTo 0
  Ad1 = LkR.Address(0, 0): Ad2 = MyR.Address
  ReDim SAry(0): SAry(0) = "[シートを選択]"
  Set DB = DBEngine.Workspaces(0) _
  .OpenDatabase(MyF, False, True, "Excel 8.0;HDR=NO")
  For Each Tbl In DB.TableDefs
   TbN = Left$(Tbl.Name, InStr(1, Tbl.Name, "$") - 1)
   If IsError(Application.Match(TbN, SAry, 0)) Then
     i = i + 1: ReDim Preserve SAry(i)
     SAry(i) = TbN
   End If
  Next
  With ActiveSheet.DropDowns.Add(0.1, 0.1, 100, 15)
   .List = SAry()
   .OnAction = "Go_Link"
   .ListIndex = 1
  End With
  DB.Close: Set DB = Nothing: Erase SAry
ELine:
  Set LkR = Nothing: Set MyR = Nothing
End Sub

Sub Go_Link()
  Dim x As Variant
  Dim Snm As String, LkS As String
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  With ActiveSheet.DropDowns(x)
   If .ListIndex < 2 Then Exit Sub
   Snm = .List(.ListIndex)
   .Delete
  End With
  LkS = "='" & Replace(MyF, Dir(MyF), "[" & Dir(MyF) & "]") & _
  Snm & "'!" & Ad1
  Range(Ad2).Formula = LkS
End Sub

【49087】Re:パスの指定方法
発言  Kein  - 07/5/22(火) 18:07 -

引用なし
パスワード
   実行する前に、VBEのメニュー「ツール」「参照設定」で
"Microsoft DAO 3.6 Object Library" にチェックを付けておいて下さい。

【49090】Re:パスの指定方法
お礼  ミク  - 07/5/22(火) 19:40 -

引用なし
パスワード
   お二方、ご丁寧な回答有難うございました。

今回は通りすがりさんの方法に、CONCATENATE等を組み合わせて
希望通りの動作を得られました。ありがとうございました^^

Keinさん、素晴らしい記述感謝致します。今回のファイルには
使用しませんでしたが、今後また別のものを作ることもあるので、
参考にさせて頂きます!!

今回は本当にお世話になりました。
ありがとうございました。

5754 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free