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