[[20170810110506]] 『閉じている別ファイルのマクロの実行』(Shana) ページの最後に飛ぶ

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

 

『閉じている別ファイルのマクロの実行』(Shana)

先ずはデータとコードを開示します。

【output.xlsm】
 Sheet1シート
パス名  |(B2)|Open(ボタン)(C2上)
ファイル名|(B3)
シート名 |(B4)
セル名  |(B5)|Output(ボタン)(C5上)

《Open(ボタン)》
Sub Open()
Dim OpenFileName As String
Dim ShN() As String
Dim wb As Workbook
Dim ws As Worksheet

With CreateObject("WScript.Shell")
.CurrentDirectory = ThisWorkbook.Path & "\..\..\"
End With

OpenFileName = Application.GetOpenFilename("すべてのファイル,*.*")
ThisWorkbook.Sheets("Sheet1").Range("B2").Value = OpenFileName
ThisWorkbook.Sheets("Sheet1").Range("B3").Value = Dir(OpenFileName)

If OpenFileName = "False" Then
ErroeFlag = True

Else
Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open FileName:=OpenFileName, ReadOnly:=True
Set tergetBook = xlApp.Workbooks(Dir(OpenFileName))
End If

If ErroeFlag = False Then

End If

Set xlApp = Nothing
End Sub

《Output(ボタン)》
Sub Output

	Application.Run "'" & ThisWorkbook.Sheets("Sheet1").Range("B2").Value & "'" & "!jsonout"
End Sub

【ゲーム機一覧.xlsm】
 家庭用ゲーム機シート
機種名           メーカー               世代
カラーテレビゲーム15    任天堂 1
ファミリーコンピュータ   任天堂 3
スーパーファミコン      任天堂 4
NINTENDO64        任天堂 5
ニンテンドーゲームキューブ 任天堂 6
Wii            任天堂 7
Wii U           任天堂 8
Nintendo Switch       任天堂 9
PlayStation        ソニー・コンピュータエンタテインメント  5
PlayStation 2        ソニー・コンピュータエンタテインメント  6
PlayStation 3        ソニー・コンピュータエンタテインメント  7
PlayStation 4        ソニー・コンピュータエンタテインメント  8

 携帯型ゲーム機シート
機種名         メーカー               世代
ゲームボーイ      任天堂                  3
ゲームボーイアドバンス 任天堂                  5
ニンテンドーDS     任天堂                  6
ニンテンドー3DS    任天堂                  7
PlayStation Portable   ソニー・コンピュータエンタテインメント  6
PlayStation Vita     ソニー・コンピュータエンタテインメント  7

ゲーム機一覧.xlsmのマクロ
Sub jsonout()

    arrs = Cells(1, 1).CurrentRegion '1から行数まで、1から列数まで
    len_row = UBound(arrs, 1) '行数
    len_col = UBound(arrs, 2) '列数
    ReDim heads(len_col - 1) '見出し、0から列数-1まで
    ReDim recs(len_row - 2) 'レコード、0から行数-2まで

    'データの取得とJSONの生成
    For c = 1 To len_col
        '1行目の各セルを見出しとして取得。
        heads(c - 1) = arrs(1, c)
    Next c
    For r = 2 To len_row
        '2行目から最下行まで処理。
        ReDim temps(len_col - 1) '0から列数-1まで
        For c = 1 To len_col
            '各行の各セルを取得し見出しと組み合わせる。
            temps(c - 1) = Chr(34) & heads(c - 1) & Chr(34) & ":" & Chr(34) & arrs(r, c) & Chr(34)
        Next c
        recs(r - 2) = "{" & Join(temps, ",") & "}"
    Next r
    json = "[" & vbCrLf & Join(recs, "," & vbCrLf) & vbCrLf & "]"

    'ファイルの出力
    fnsave = Application.GetSaveAsFilename(".json", "JSON(*.json),*.json")
    If fnsave = False Then Exit Sub
    With CreateObject("ADODB.Stream")
        .Type = 2
        .Charset = "utf-8"
        .Open
        .WriteText json, 1
        .SaveToFile fnsave, 2
        .Close
    End With
End Sub

Open(ボタン)を押下すると、ファイル選択画面が開き、ファイルを選択し開くと、
そのファイルのフルパスがB2に、ファイル名(拡張子込み)がB3に入ります。
ただ、実際は閉じております。開くというより情報を取得する様な形です。
ここで、1つやりたいのはその選択したファイルの(データがある)全シート名を取得して
B4にプルダウンとして表示されるようにしたいのが1点。

もう1点はOutput(ボタン)を押下すると、'B2'に入っているパス名(ファイル)の
'B3'シート(ここでは家庭用ゲーム機シート)を、
ゲーム機一覧.xlsmのマクロで実行としたいのですが、
なぜかゲーム機一覧.xlsmの方ではなくoutput.xlsmの方を
(ゲーム機一覧.xlsmのマクロで)実行してしまい大変困っています。

どなたかご教示下さいます様、よろしくお願い致します。

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


これだけのコードを書ける方ならば、1点目は、セルに「データの入力規則」を指定する様を「マクロの記録」機能でコード化したものを参考にすると良いでしょう。

2点目は、以下の1文。

 >	Application.Run "'" & ThisWorkbook.Sheets("Sheet1").Range("B2").Value & "'" & "!jsonout"

B2セルって、パス名なんですよね? B3セルがファイル名のようですが、何故使っていないのでしょう?
(???) 2017/08/10(木) 14:55


 >2点目は、以下の1文。 
  >>	Application.Run "'" & ThisWorkbook.Sheets("Sheet1").Range("B2").Value & "'" & "!jsonout"
 >B2セルって、パス名なんですよね? B3セルがファイル名のようですが、何故使っていないのでしょう?

閉じているファイルのマクロを実行させて、その閉じているファイルのデータを書き出したいので、
パス名を使っております。また、試しにB2からB3に書き換えても、結果は同じく、
書き出したいファイルではなく、自身を書き出してしまいました。

よろしくお願い致します。
(Shana) 2017/08/10(木) 16:46


Application.Run を使って他ブックのマクロを動かしたいならば、フルパスのファイル名を指定しないと駄目ですよ〜、と言う指摘なのですが、フォルダ名だけじゃ駄目、というヒントで気づきませんでしたか? フォルダ名 & "\" & ファイル名 にしないとです。 どっちか一方だけ指定しても駄目。
(???) 2017/08/10(木) 17:25

 >ゲーム機一覧.xlsmのマクロで実行としたい
 ゲーム機一覧.xlsmの中にあるjsonoutを使いたい?のに、
 >Application.Run "'" & ThisWorkbook.Sheets("Sheet1").Range("B2").Value & "'" & "!jsonout"

 あと、ゲーム機一覧.xlsmの中にあるjsonoutの中身はファイル名もシート名も指定していないことが原因か?とも思ったのですが、
 >なぜかゲーム機一覧.xlsmの方ではなくoutput.xlsmの方を 
 >(ゲーム機一覧.xlsmのマクロで)実行してしまい大変困っています。
 ゲーム機一覧.xlsmのマクロで実行できている不思議…

 パス名ってかいてありますけど、ファイル名まで込みの文字列が入ってる???
(___) 2017/08/10(木) 17:50

コメント返信:

[ 一覧(最新更新順) ]


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