[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『閉じている別ファイルのマクロの実行』(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 >
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
>ゲーム機一覧.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.