X



Excel VBA 質問スレ Part51
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (スププ Sd4a-O827)
垢版 |
2017/11/08(水) 11:26:30.13ID:+KUB1/9hd

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0409デフォルトの名無しさん (ワッチョイ 9f23-HquM)
垢版 |
2017/12/13(水) 22:03:05.49ID:lbNGI0B20
チョイ前に変数の宣言が話題になってたから俺も一ネタ言いたい

「redim で変数の宣言が出来る仕様はやめて欲しい」

変数名を間違えた時にエラーで気付けるように普段から変数の宣言を強制してるんだけど、
redim で配列を変更する時に変数名を間違えても
新たな別の変数扱いされてエラーにならないから気付かないことがある

配列変数でも宣言は dim 、要素変更は redim っていう風にしといてくれたらと願ってやまない
0410デフォルトの名無しさん (ワッチョイ 9faf-F7Qh)
垢版 |
2017/12/13(水) 23:22:51.89ID:b+I23nON0
Application.GetOpenFilename でファイルのパスを求められることが分かった

Application.GetOpenFilename
Workbooks.Open.Filename:=Application.GetOpenFilename
ってできないことが意味がわらない



あと
Workbooks(Application.GetOpenFilename)ってやるとパス付のでエラーになってしまうこともわかった

Workbookオブジェクトに適当な変数を宣言して iとする
i = Application.GetOpenFilename
i.worksheet()ってできない意味がわからない

i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
i.worksheets()

これならできる意味がわからない
()で戻り値をくくるのはわかる
でもこの場合の戻り値はパス付戻り値であるから Applcation.GetOpen....
はいらないのでは?パス付戻り値ならば
i = Application.GetOpenFilename
でもできるのでは?WorkBookオブジェクト変数だから

誰か答えられる?
0412デフォルトの名無しさん (ワッチョイ 9faf-F7Qh)
垢版 |
2017/12/13(水) 23:49:56.82ID:b+I23nON0
わりと真面目に答えてくれ

オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない

なんのためのオブジェクト変数なんだ

Workbooks.Open(filename:= ApplicationGetOpenFilename)
これもパス付のファイル名なのになんで格納できるんだ?
0413デフォルトの名無しさん (ワッチョイ de9d-RjCm)
垢版 |
2017/12/14(木) 00:01:33.96ID:iqnmwrCv0
まず型というものを理解してください
つぎに、プロパティというものを理解してください
つぎに、オブジェクトにはデフォルトプロパティというものがあるのを理解してください
あと名前付き引数に対する理解も必要ですね
VBAではSetでの代入とLet(を省略した)代入では意味が違うので、それもちゃんと区別してください

いちいち全部ここで解説はせんが
このぐらい理解すればたぶん答えはわかるだろ
0414デフォルトの名無しさん (ワッチョイ de9d-RjCm)
垢版 |
2017/12/14(木) 00:13:48.84ID:iqnmwrCv0
まじめに答えといてやるけど
>オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない
たぶんお前がやってるのは、そのオブジェクト変数のデフォルトプロパティに代入しようとした
で、そのオブジェクトがそれを受け入れないからエラーがでたんだろうな

>Workbooks.Open(filename:= ApplicationGetOpenFilename)
>これもパス付のファイル名なのになんで格納できるんだ?
格納の意味が分からん
ApplicationGetOpenFilename(の結果)をたんにOpenの(filename)引数として渡してるだけ
ApplicationGetOpenFilenameの結果がOpenのfilename引数として適当だからエラーが出なかっただけ
0415デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 00:14:33.99ID:FrwGQASIx
パス付戻り値っていう表現が凄い
Application.GetOpenFilenameの戻り値は、パス文字列か、パス文字列の配列か、ダイアログがキャンセルされたときに返されるFalseかのいずれかしかない
パス付って、何にパスがくっついてると理解してるんだろう
パスが戻り値そのものだろう
0416デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:18:35.88ID:oVDd8Fug0
>>414
意味がわからん
初心者相手に専門用語で勝った気になるなよ
0417デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:21:23.88ID:oVDd8Fug0
>>415
パスってのは
¥C:のことだろ?
openメゾットの戻り値も¥C:ついてるのに
WBオブジェクト変数に格納できる意味がわからない
専門用語でこたえるな わかりやすく答えろ
外人相手に口喧嘩して勝ち誇ってるやつと同じだわ
0418デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:23:38.19ID:oVDd8Fug0
workbookのオブジェクト変数のデフォルトプロパティってなんだよ
そこを答えろ
答えろって言わないと答え出て来ねえのかよ
0419デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:24:22.55ID:oVDd8Fug0
ちなみにおれはVBA初めて3時間
ここまでの疑問が出るだけすごいと思うけど
0420デフォルトの名無しさん (ワッチョイ d223-AMYv)
垢版 |
2017/12/14(木) 00:24:26.11ID:0XKK4N9O0
>>410
>Workbooks.Open.Filename:=Application.GetOpenFilename
>ってできないことが意味がわ「か」らない

Workbooks.Open Filename:=Application.GetOpenFilename

なら動くんだが、それではダメ?(open と filename の間は半角スペース)

何故かと言えば言語の仕様として
引数はピリオドで繋ぐものではないからとしか言いようがない
(workbooks はオブジェクト、open はメソッド、filename:=~ はその引数)

>i = Application.GetOpenFilename
>i.worksheet「s」()ってできない意味がわからない

変数i が workbook型だとして、Application.GetOpenFilename の戻り値はworkbook型ではない。
戻り値はvariant型なんだけど、キャンセル時に false になるだけで、ファイルが選択されていれば文字列が返される
複数ファイルが選択されてても文字列が配列で帰るだけ
それに、i がworkbook型変数なので set を付けないとダメ
i が variant型変数 なら文字列か false が帰るだけでヤッパリ workbook としての挙動はしない

i.worksheet「s」() っていうのも、worksheetオブジェクトは
既に開いているブックのシートしか指定出来ないから、i がブックとしてオープンしてなきゃ当然ダメ

>i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
>i.worksheets()
>これならできる意味がわからない

set i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
じゃないと動かないよ
理由は前述のとおり
0421デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 00:32:01.43ID:FrwGQASIx
>>417
Openメソッドの戻り値はパスではなく、Workbookオブジェクトそのものだ

開いているブックの集まりであるWorkbooksコレクションオブジェクトに、引数Filenameで指定したブックを追加して、戻り値としてそのブックそのものを返す処理だ


何か根本的に勘違いしてるだろ君
0422デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:33:36.37ID:oVDd8Fug0
>>420
お前がまだわかりやすいな

ただし
おれはすでに開いているファイルじゃないと操作できないとかは全部知っている
オブジェクト型変数の前にsetステートメントを置くことも知っている

つまり
Application.GetOpenfilename = ファイルを開いた時は文字列が返される
workbook型に返せないのか?
答えはパス付きの文字列で帰って来るためにノーだ
これも知ってる

Workbooks.Open filename:=Application.GetOpenfilename

これも知っている
しかし結果としては
ファイルを選択で開いたパス付き文字列を開く
という命令なはず

同じパス付き文字列なのにworkbook型に格納できないのが意味がわからない
0423デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:35:42.03ID:oVDd8Fug0
>>421
ん?なんで?
msgboxで表示されてもパス付きになるよ?
0424デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:41:28.15ID:oVDd8Fug0
またも意味不明な現象が起きた

拡張子を指定しなかったのに開いた
拡張子を指定したらなぜかエラーが出た
なんでだ?


https://i.imgur.com/lqUNtRU.jpg
0425デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 00:42:52.81ID:FrwGQASIx
>>418
オブジェクトには、特にプロパティ名を指定しないでアクセスする場合に、優先的に参照されるプロパティが決められていて、それをデフォルトプロパティと呼ぶ
オブジェクト型に合わないデータを代入してしまう構文になっているときでも、データの型がデフォルトプロパティの型に適合していればVBAはデフォルトプロパティへの代入として解釈して処理を受け付ける
0426デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 00:44:33.92ID:oVDd8Fug0
>>421

Workbooks.Open(filename:= ApplicationGetOpenFilename)
→\C:〜〜〜〜という文字列が返される

ApplicationGetOpenFilename
→これも同じ

なぜ前者はWorkbook変数に格納できて
後者はできないんだ?
0427デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 00:45:53.39ID:oVDd8Fug0
>>425
そんなもん知ってるわ
Rangeやcellsのvalueみたいなもんだろ?

Workbookオブジェクトのデフォルトプロパティはなんだ?
0428デフォルトの名無しさん (ワッチョイ d223-AMYv)
垢版 |
2017/12/14(木) 00:48:20.20ID:0XKK4N9O0
>>422
悪いけど>>410 の書き方じゃ分かってるようには見えない
set を付けてない時点でこの人は分かってないんだなと判断されても仕方ない

そして
>Application.GetOpenfilename = ファイルを開いた時は文字列が返される
も間違い
Application.GetOpenfilename は、
あくまでもファイルのパス情報を文字列(或いは false)で返すだけで
実際にブックを開けることはしない
だから正確に書くと
Application.GetOpenfilename = ファイルを「選択した」時は文字列が返される
というべきで、そのブックを開くためにworkbooks.open を用いる必要がある
0429デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:51:58.64ID:oVDd8Fug0
>>428
set

オブジェクト変数を代入するとこに扱うステートメント
0430デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:53:08.36ID:oVDd8Fug0
>>428
ファイルを開いたっていうのは
選択したって意味なんだが

オブジェクトとOPENメゾットで初めて開く

こんなの知っている
0431デフォルトの名無しさん (ワッチョイ d223-AMYv)
垢版 |
2017/12/14(木) 00:53:19.64ID:0XKK4N9O0
>>428でもまだ不正確だった
より正確に言うと

Application.GetOpenfilename =
「開きたい(あるいは移動、コピー、改名、削除など何らかの操作をしたい)」ファイルを「選択した」時は文字列が返される

ですね
0432デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 00:55:08.87ID:oVDd8Fug0
>>431
んなもんしってるわ
キャンセル押されたらフェイルス
ファイルを選択したらパス文字列
0436デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 01:00:54.08ID:oVDd8Fug0
>>435
じゃあなんで
workbook.openのパス文字列は入るんですかねえ
0437デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 01:01:13.61ID:oVDd8Fug0
ここまで答えなしだが
誰もわからないのか?
0438デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 01:01:34.43ID:oVDd8Fug0
おれの質問ってVBAの穴をついた?
0439デフォルトの名無しさん (ワッチョイ d223-AMYv)
垢版 |
2017/12/14(木) 01:04:09.93ID:0XKK4N9O0
質問の意味がわからないんですよね
何が疑問なのか、独自表現を用いずに、
set やなんかも省略せずに正しく動作するコードと
動作しない理由が知りたい動かないコードを書いてみてもらえます?
0440デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 01:05:31.95ID:FrwGQASIx
>>426
workbooksは、workbookクラスではない
別のオブジェクトのクラスだ

それから、さっきも書いたが、Openメソッドの戻り値は引数で指定されたパスを持つWorkbookオブジェクトなのであって、Openメソッドによってパス自体が戻ってくる訳ではない
パスを返してくるApplicationクラスのGetOpenFilenameメソッドとは全く働きが違う
プロパティやクラスや引数の名前で何となくbookとかfileとか付けばパス付のWorkbookオブジェクトが返ってくるものと混同してるようだが、きちんと区別しないといけない
0441デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 01:13:20.35ID:FrwGQASIx
>>436
Openメソッドが要求する名前付き引数Filenameに、GetOpenFilenameで取得したパスを設定して、その結果新しく開いたWorkbookオブジェクトが返っているからだよ
このFilenameはApplication.GetOpenFilenameメソッドの戻り値ではあるけど、Workbooks.Openメソッドの戻り値ではない
Worksheets.Item(Index:=ActiveSheet.Name)みたいな処理と一緒だと言えば少しは分かるか?
0444デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 01:22:45.67ID:FrwGQASIx
たぶんこの質問者は、コレクションを知らないタイプだな、
それから、式に含まれるプロパティ名やメソッド名をオブジェクトのクラス名と同一視しているタイプだろう
0446デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 07:32:56.86ID:oVDd8Fug0
>>441
workbooks.open filename:=Application.GetOpenfilename

この場合はworkbooksオブジェクトに選択したパス文字列が格納されるのか?
だからworkbook型に格納できるのか?
0447デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 07:37:06.65ID:oVDd8Fug0
>>444
ん?
workbooks
worksheets
rows

これはコレクションだろ?
コレクションはオブジェクトの最上位

プロパティはオブジェクトの何?
メゾットはオブジェクトに命令

違うか?
0448デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 07:40:17.60ID:oVDd8Fug0
マジでわかりやすい答えがない
0449デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 08:30:04.65ID:mohvOYX1x
>>446
君の言う「格納」は、コレクションへのオブジェクトインスタンスの追加、プロパティ値の設定、変数への代入、引数の受け渡し等がごちゃごちゃになっていると思う
まず、Workbooksコレクションに、データの代入はできない
WorkbooksコレクションはWorkbookオブジェクトの集まりを要素に持つコレクションオブジェクトだから

それから、Workbooks.Open Filename:=Application.GetOpenFilenameという構文は、Workbook型の変数に値を代入しているわけではない
Filenameという名前付きで定義されたOpenメソッドの文字列型の第一引数に値を渡していて、その結果としてOpenメソッドがWorkbookオブジェクトを返しているわけで、オブジェクト型変数への代入ではない
0451デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 08:46:43.07ID:QIiUylbtp
>>449
いやそんなのしってるんだけど

dim i string
dim wb workbook

application.Getopen filename:=で目的のファイルを開く
そしたら「¥:目的のワークブック.xlsx」が文字列として帰って来る
workbooks.open filename:=目的のファイル
これで初めて目的のファイルが開く

ここで本題
どちらも目的のファイルのバス名が返ってきているのに
set wb = application.GetOpen filename
だとエラーで
set wb = workbooks.open (filename :=目的のワークブック.xlsx)

これならwbオブジェクト型変数に代入される意味がわからない
これをはっきり答えろ
わかりやすくな
0452デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 08:47:18.91ID:QIiUylbtp
>>450
一番上

最上

日本語やり直したほうがいい
0453デフォルトの名無しさん (ワッチョイ 16b9-4pIx)
垢版 |
2017/12/14(木) 09:00:03.55ID:n2gI2QxJ0
>>451
Set wb = Application.GetOpenFilename

は、String型をWorkbook型のポインタへ代入しようとしてエラー吐いてる。

Set wb = Workbooks.Open(Application.GetOpenFilename)
Set wb = Workbooks.Open("目的のワークブック.xlsx")

は、OpenメソッドにString型変数を渡しているから機能する。
0454デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:02:02.66ID:QIiUylbtp
>>453
workbook型のポインタってなに?
これがわかればすっきり
0455デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 09:02:04.79ID:CHPwg0pDx
>>447
コレクションはオブジェクトの最上位、という発想がそもそも間違い
コレクションは子要素に追加されているデータやオブジェクトへのアクセス等を提供する、子要素からは独立したオブジェクトだ

更に、WorkbooksコレクションオブジェクトはWorkbookオブジェクトのみを要素に持つようにあらかじめ最適化された規定のコレクションオブジェクト
0456デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:05:19.87ID:QIiUylbtp
>>453
WB型変数に文字列代入は不可
メゾットの戻り値の代入は可能ってこと?

なんで?
0457デフォルトの名無しさん (ワッチョイ ebf7-kJ08)
垢版 |
2017/12/14(木) 09:05:51.56ID:YV9D93CW0
>>452
日本語だけ知ってても言語仕様を正確に説明する難しいんだよ

コンピューター業界では「上位」などの言葉には特別な意味を持たせる場合もあるし、
とくに相手がド素人だと、言葉の意味から説明するのも面倒だから、あえて上位という単語は避けた上で
なんとなく通じてくれそうな「上」って言い方をしたんだよ

お前の態度が気に入らないからワッチョイ Spc7はNGするわ
人に何か質問する時は最後までていねいな言葉を使え
0458デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:07:28.47ID:QIiUylbtp
>>457
うんこーwwwwwwwwwwうんこーwwwwwwwwww
0459デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 09:08:52.24ID:CHPwg0pDx
>>451
そもそもApplication.GetOpenFilenameはブックを開いてブックへの参照を返すメソッドじゃなくて、ユーザーにダイアログ画面上で選択させたファイルのパスを返すメソッドなんだが
メソッド名で混乱してるだろ君
0460デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:11:20.55ID:QIiUylbtp
>>459
いやしってるけど

キャンセルが押されたらフェイルスだし
選択したらパス名が返って来る

何回言えば気がすむんだよ
0461デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:12:47.30ID:QIiUylbtp
Openメゾットはただブックを開くだけだろ?
ただし 引数を戻り値として得られる
つまり 開いたファイル名がOpenメゾット内にある

違うかい?いい線いってる?
0462デフォルトの名無しさん (ワッチョイ 16b9-4pIx)
垢版 |
2017/12/14(木) 09:13:02.91ID:n2gI2QxJ0
>>456
なんでも何もデータ型が一致するかどうかが問題であって、メソッドの戻り値の型は一致するってだけ。

たぶんJavaScriptから始めたせいで認識がおかしくなってるんだろうけど、
普通はデータ型が異なる変数同士の代入は出来ない。
0463デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 09:14:18.68ID:CHPwg0pDx
この質問者みたいな人が言語仕様について思い込みや勘違いをしたまま共用マクロを組んだりすると、会社にとって迷惑なだけなんだよな
作ったマクロを他人と共有しないことを祈るのみ
0464デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 09:20:19.35ID:CHPwg0pDx
>>460
それ俺がきのう説明したことだよねw
オブジェクト型変数にGetOpenFilenameから返った文字列型データやデータ配列を設定しようとしてるのがおかしいんだがw
データ型とか一回学んだ方が良いと思うよ

それから蛇足だけど、フェールスじゃなくて、フォルス、フォールス、ファルスの何れかの表記にしないと、Falseのことだと理解してもらえないことが多いと思うよ
0465デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 09:25:08.03ID:CHPwg0pDx
>>461
引数の文字列は戻り値にならない
Openの戻り値はWorkbookオブジェクトの実体だ
Workbookオブジェクトの実体とパス文字列はイコールじゃない

それから、メゾットじゃなくてメソッドな
あんまり特徴的な言葉づかいしてるとメゾット君と
フェールス君とか呼ばれたりするかもしれないから気を付けなよ
0466デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:30:34.82ID:QIiUylbtp
>>465
実体でなに?どころどころで補足質問しねえといけねえのかよ
0467デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:31:25.92ID:QIiUylbtp
>>462
変数同士?
workbook型あとは何?
これも補足質問
0468デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 09:32:51.20ID:QIiUylbtp
>>464
データ型の参考ページは?
猿でもわかるやつ
0469デフォルトの名無しさん (アークセー Sxc7-Zhdx)
垢版 |
2017/12/14(木) 12:17:27.13ID:7XekaZVWx
>>468
その言い方は猿に対して失礼だぞメゾット君

WordやPowerPointのVBAと違ってExcelは「Excel VBA データ 型」でググれば腐るほど情報が出てくるから、好きなページを読んで出直してきたらいいさ
インスタンスもググってみたらいいよ
0470名無し (ワンミングク MM42-cZUN)
垢版 |
2017/12/14(木) 12:34:50.44ID:DWbie50BM
>>466
Workbookの実体とは開いて実行しているエクセルブックのことだよ。ブックはVBAが管理しているメモリ上のデータではないってこと。そこにアクセスする為の情報だけがWorkbook型変数には格納されている。
これ以上はググったほうがいいな。メゾットちゃんには言葉だけでは通じないみたいだし。
0473デフォルトの名無しさん (アウアウイー Sa07-nYOw)
垢版 |
2017/12/14(木) 13:37:10.14ID:D0PQd/9/a
体系だてた答えがほしいならオブジェクト指向あたりの本読んだ方がいいんじゃねえの
正確にはオブジェクト指向じゃないけどクラスとインスタンス(やそれにくっついてるメソッドやプロパティ)の関係を理解するにはそれがはや道だわ
ここは教科書じゃないから
0474デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 14:17:01.84ID:QIiUylbtp
なんでぱぱっと答えられねえの?頭悪いの?
0475デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 14:18:03.10ID:QIiUylbtp
>>470
ふーん
開いてから格納する

これだけだよね?詰まる所は
0476デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 14:27:22.00ID:QIiUylbtp
Openメソッドで開かないと
workbook型に入らない
0478デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 14:49:26.55ID:QIiUylbtp
>>477
それをわかりやすく教えて
ほんとにわかりやすく
0480デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 15:05:19.17ID:QIiUylbtp
>>479
別の言葉に置き換えればいいだろ?
0481デフォルトの名無しさん (オイコラミネオ MM6e-PYJi)
垢版 |
2017/12/14(木) 15:22:14.17ID:yqG/N6/gM
ID:QIiUylbtpはVBA以外の言語知ってるの?
それともExcel VBAで初めてプログラミングに触れましたって人?
お前の学習レベルがわからないからお前でもわかるように説明できないんだ
0482デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/14(木) 15:43:20.73ID:Sk339KZTa
ここには、彼の疑問に答えられるような人はいない。

こんぴゅうたーのでんげんをいれるとどうしてえくせるがうごくのかをせつめいするのはむずかしい。
でんきにはつうでんしてるときとつうでんしていないときがあるのでそれをりようしてぜろといちをくべつできる。
ぜろといちをくべつできればにしんすうをりようして...
0485デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/14(木) 19:23:24.80ID:IXGcMbV0a
そもそもWorkbooksに指定するのはエクセルファイル名じゃない。
ブック名だ。
開いたブックのブック名とファイル名が同じになるから勘違いしてる奴もいるかもしれんが。
0486デフォルトの名無しさん (ワッチョイ 5303-6+fO)
垢版 |
2017/12/14(木) 19:24:50.30ID:oezENCsV0
同じだったらファイル名でええやんw何鼻息荒くしてんの?w
0489デフォルトの名無しさん (スププ Sd32-Zftp)
垢版 |
2017/12/14(木) 21:01:41.06ID:bra/P7/Ad
>>453
をもとに考えてみた

お金を入れるとカップにジュースが注がれる自販機を思い浮かべるんだ

Set wb = 'ジュースが入るカップ
Workbooks.Open( _'お金を判別してボタンが押されるとジュースを出す回路
Application.GetOpenFilename _'お金
)
→お金を入れてボタンを押したらカップにジュースが注がれる

Set wb = Application.GetOpenFilename
→カップに直接お金を入れて飲めないと騒ぐあほ

どうだ!?
0492デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 21:27:02.90ID:QIiUylbtp
>>490
うん
それはしってるよ
でもworkbooks.Openでも同じだよね
文字列帰って来るよね
0493デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 21:32:46.73ID:QIiUylbtp
application.getOpenfilename
→あ.xlsxを選択
C:¥あ.xlsx が帰って来る

workbooks.Open filename:=application.getOpenfilename(つまりC:¥あ.xlsx)

ん?どっちもパス付きのブック名じゃねえの?
ってことをいってる
0494名無し (ワッチョイ ef65-cZUN)
垢版 |
2017/12/14(木) 21:55:08.02ID:5D+dY0yO0
>>493
文字列として返ってきたから文字列型と思ってるなら、一回workbook型をウォッチに入れてみたら?
ツリー形式でオブジェクトの、中身が見れるから全然別ものだとわかるはず
0495デフォルトの名無しさん (ワッチョイ a7b3-nYOw)
垢版 |
2017/12/14(木) 21:58:53.83ID:zDxHi8mM0
>>492
バーカw
"C:\うんち.xlsx"がworkbooks型の変数に代入できる分けないだろw
まあデフォルトプロパティなんてものが罪なんだが
てか、workbooks型のデフォルトプロパティってNameプロパティなんだな(Pathか?)
はじめて知ったわ、使わんから
0496デフォルトの名無しさん (ワッチョイ 1e9f-iA8U)
垢版 |
2017/12/14(木) 22:19:18.62ID:cH/6/SdG0
Application.GetOpenFilename → 指定したファイルのパス【String型(正確にはVariant)】を取得

Workbooks.Open → filenameに【String型でファイルパスを指定】すると
そのファイルを開いた結果の【Workbook型オブジェクト】を取得

Dim str as String
Dim wb as Workbook
str = Application.GetOpenFilename →OK
str = Workbooks.Open(Application.GetOpenFilename) →NG
Set wb = Application.getOpenfilename →NG
Set wb = Workbooks.Open(Application.GetOpenFilename) →OK

オブジェクトブラウザーを見ると勉強になるよ
それぞれ、こうなっている
Class Application
Function GetOpenFilename()

Class Workbooks
Function Open(Filename As String) As Workbook
0497デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/14(木) 23:32:44.97ID:IXGcMbV0a
>>486
違う。
新規ブックの場合はファイル名じゃないだろ。
理解出来て無い奴に理解出来る奴向けの説明をしても駄目だ。

たまたま同じになってもブック名はファイル名じゃ無い。
だからパス付きだろうがパス無しだろうがファイルはファイルだと考えても、それとは関係ないブック名は違う。
C:¥abcd.xlsxというファイルとブック名としてのabcd.xlsxとは何の関連も無い。
似たように見えるのはたまたまだ。
だからC:¥abcd.xlsxはブック名には成りようがない。

>>493
Application.GetOpenFilenaneで帰ってくるのは"C:¥あ.xlsx"という文字だけな。
Excelブックとは関係ないファイル名だな。
例えばメモ帳で適当に入力して保存したファイルでも取ってこれるだろ。
それに別に"C:¥あ.xlsx"はExcelじゃないと開けないというわけでも無いぞ。
そもそも"C:¥あ.xlsx"はApplication.GetOpenFilenaneで取ってきたからファイル名だろうけど、取ってきた後のその文字列は=ファイル名とは限らん。

Dim wb As Workbook
Dim strFile As String
strFile=Application.GetOpenFilename
ってのはstrFileにたまたまApplication.GetOpenFilenameによってファイル名が入ったということで、
Set wb = Workbooks.Open(strFile)
のstrFileがファイル名かどうかは分からん。
このー文はApplication.GetOpenFilenameのことなんか知らんからな。
このー文の意味するところはstrFileをファイル名と思って開いてみて、開けたらwbに格納するってこと。
0498デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 23:34:29.57ID:oVDd8Fug0
短くわかりやすくまとめられるやついねえの?
いくらVBAができたって引き継ぎができない奴は無能なんだが
0499デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:41:16.00ID:oVDd8Fug0
俺もずっとROMってたけど
こいつらの説明はマジで意味不明だわ

お、良い線言ってんな って思ったらいきなりカタカナ語がでてきてググっても意味不明
こいつらマジもんのコミュ障すぎてイラつきしかない

オナニー発言ばっかで答えがない

Apllcation.GetOpen
でaaaっていうエクセルを開く

C:\aaa.xlsx が返ってくる
しかしWB(Workbookオブジェクト変数にしている)では指定できない

でも
Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る

つまるところどっちもC\aaa.xlsxって文字列を返してんじゃねえの?何がちげえの?ってこと

これいうの10回目ないい加減学習しろイラつくな
0500デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:44:38.82ID:oVDd8Fug0
こいつらのたとえ

子供がリンゴを指さす
「これなに?」

こいつら
「これは物質○○が含まれて○○っていう色素があって赤い、つまり栄養は○○がふくまれている
ちなみにその栄養は○○って物質にも入っている」ドヤァ

って感じ
見ててムカつくから発言したわ
0501デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:46:05.94ID:oVDd8Fug0
おれが聞きたいのは

なんでワークブックスオープンで指定したファイル名文字列だとワークブック変数に格納できんだよって話
ゲットオープンはパスがついているから格納できないのはわかった

わかりやすく答えろ
0503デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/14(木) 23:56:28.06ID:qidVZ8HWa
>>501
無理。
軍事用にコンピューターというものが発明されてから今日までの歴史と仕組みを説明しなきゃならんから。
そして、君にそれを理解出来るだけの能力が有るとは思えないから。

大抵の人は全てを理解しているわけじゃ無いが、自分の利用している範囲ぐらいは理解している。
0504デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/15(金) 00:06:16.08ID:sv72SjNaa
>>499
ん?
>Apllcation.GetOpenでaaaっていうエクセルを開く

これ間違い。
開かない。
ファイル名を取得するだけ。

>しかしWB(Workbookオブジェクト変数にしている)では指定できない

ファイル名じゃないからな。
ブック名を指定する必要がある。
たまたま偶然ファイル名と同じだけどパス付きはブック名とは違うな。

>Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る

Workbook型に入ってるのはファイル名じゃない。
Set WB=Workbooks.Openの意味するところはfilenameに指定された文字列をファイル名と見立ててブックを開き、もし仮に運よく開くことができたらそのブックをWBに格納するという意味。
0505デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/15(金) 00:18:22.73ID:qta4Ddk+0
>指定された文字列をファイル名と見立ててブックを開き

これが意味不明

GetOpenで指定したファイル名を返すんだろ?
じゃあこれはファイル名になるじゃねえのか?
ファイルを開かなかった場合はファルスがかえることはわかる
0506デフォルトの名無しさん (アウアウカー Sa6f-tkV0)
垢版 |
2017/12/15(金) 00:22:57.61ID:OGmesrFEa
>>505
GetOpenFilenameの文とWorkbooks.Openの文は別の文だろ。
プログラム組む奴はGetOpenFilenameで取得したものと違うものを入れることも出来る。
だから結果的に入ったのはファイル名でも、
Workbooks.Open自身はそれを前提にはしないだろ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況