VBAなんでも質問スレ Part2 [転載禁止]©2ch.net

1デフォルトの名無しさん2015/05/21(木) 10:52:44.71ID:KLv0vQmm
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK

ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください

VBAを開発環境としていろいろ作っちゃいましょう

前スレ

VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/

関連スレ

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/

Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/

VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/

Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/

594デフォルトの名無しさん2018/09/02(日) 17:27:55.14ID:1l6OdzeH
>>591
thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。


蛇足だが、必要無くともブックもシートも常に指定した方が良い。

595デフォルトの名無しさん2018/09/02(日) 17:44:00.59ID:GR8jnF/5
>>591
とりあえず作ったコードを晒せば色々添削してもらえるかと

>>593
回答できないなら黙ってなよ

596デフォルトの名無しさん2018/09/02(日) 18:16:50.42ID:dkuRxOF+
おそらくやりたいことはこんな感じだろう。
0901ファイルを開いた状態で、9月2日当日にレポートを作成する前提。
0901ファイルを修正するという話だったからその通りにしたけど、本当ならここはテンプレートファイルから書き起こすようにするべきだと思う。
テスト実行してないので、エラーが出たらごめんなさい。

Sub CreateDailyReport

Dim Report As Workbook
Set Report = Application.Workbooks("0901")
'テンプレートから新規ファイルを作成するなら以下のように変える
'Set Report = Application.Workbooks.Open(テンプレートのパス)

Report.Worksheets("Sheet1").Range("B2").Value = Format(Date, "yyyy/mm/dd")

Dim PathString As String
PathString = Thisworkbook.Path & "¥" & Format(Date, "mmdd")

If Dir(PathString, vbDirectory) = "" Then MkDir PathString

Report.SaveAs PathString & "¥" & Format(Date, "mmdd") & ".xlsx"

Report.Close

End Sub

597デフォルトの名無しさん2018/09/02(日) 18:17:42.72ID:1ZQrBI0R
593の言うことは間違ってないと思いますよ。

598デフォルトの名無しさん2018/09/02(日) 21:02:04.61ID:/2qGDDvp
>>592
Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね

単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました

599デフォルトの名無しさん2018/09/06(木) 16:40:58.45ID:KlP6yXrE
初歩的な質問でごめんなさい
うまくできません

If IsNumeric(myN) Then
Range("A1").Value=Range("A1").Value + myN

End If

myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが
やってみると12っていう風に数字が並んでいってしまいます
どうしたらいいでしょうか

600デフォルトの名無しさん2018/09/06(木) 19:12:55.41ID:iNH/PWkM
>>599
もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな

601デフォルトの名無しさん2018/09/06(木) 19:23:08.77ID:KlP6yXrE
>>600
String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました

602デフォルトの名無しさん2018/09/21(金) 21:15:16.71ID:Fm9zyYJ3
超初心者です。

Googleの検索窓に「VBA」と入力する サンプルコード
https://vba-code.net/ie/set-value-to-textbox/) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。

「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。

どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。

603デフォルトの名無しさん2018/09/21(金) 22:26:39.22ID:9i7TQATj
>>602
>>objIE.document.getElementById("gbqfq").Value = "VBA"

objIE.Document.getElementById("lst-ib").Value = "VBA"

604デフォルトの名無しさん2018/09/21(金) 22:40:18.36ID:Fm9zyYJ3
>>603
ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。

605デフォルトの名無しさん2018/09/21(金) 22:42:58.72ID:MqKbhYRD
>>604
おう頑張れ!わからんかったらまたいつでも聞いてくれな!

606デフォルトの名無しさん2018/09/21(金) 23:16:58.27ID:Fm9zyYJ3
>>605
ありがとうございます!

同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは

https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、


入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。

お時間あるときでよいので出来たらお願いします。

仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙

'

607デフォルトの名無しさん2018/09/21(金) 23:29:19.39ID:m8DL5ZJ4
getElementById("gbqfq")
getElementById("lst-ib")

君は、この違いがわからないの?
HTML, DOM, CSS, JavaScript とか知らないの?

VBA には関係ないのだけど。
全言語・プログラミングに共通の話題なんだが

608デフォルトの名無しさん2018/09/21(金) 23:59:36.29ID:Fm9zyYJ3
>>607
すみません、わかりません。

6096072018/09/22(土) 01:01:33.83ID:DCTpeoPT
HTML に書いてある、ID だよ

ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。
ブラウザでF12 を押すと、開発者ツールが起動するだろ

これらを知らないと、ウェブ開発はできない!

VBA とは、全く関係ない

610デフォルトの名無しさん2018/09/22(土) 03:52:07.76ID:AiTHsE5Z
>>609
>>609
知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。

611デフォルトの名無しさん2018/09/22(土) 09:42:45.32ID:AiTHsE5Z
>>606
自己解決して、自動入力マクロができました!ありがとうございました。

612デフォルトの名無しさん2018/10/12(金) 07:52:16.28ID:OKfVsW46
VBAでできることはC#でもやることはできますか?

613デフォルトの名無しさん2018/10/12(金) 07:55:38.55ID:/wsNoZ03
できます

614デフォルトの名無しさん2018/10/12(金) 09:20:25.16ID:dGKqHjcm
ユーザー定義関数の作成以外ならなんでもできます

615デフォルトの名無しさん2018/10/12(金) 09:54:55.01ID:TjU2aakC
それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。
無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。
なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか?

616デフォルトの名無しさん2018/10/12(金) 10:38:39.78ID:/wsNoZ03
>>614
それもC#で可能

>>615
ちょっと何言ってるかわかんないですね

617デフォルトの名無しさん2018/10/12(金) 10:53:20.05ID:TjU2aakC
>>616
マクロからSubをCallできないのは知ってますか?

618デフォルトの名無しさん2018/10/12(金) 12:09:03.01ID:bZOmvKy4
>>617
知らないです
私の知ってるマクロだとsubもcallできるので

619デフォルトの名無しさん2018/10/12(金) 12:28:42.41ID:YStpcFYj
>>616
本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?

>>615
SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい

620デフォルトの名無しさん2018/10/12(金) 14:32:33.06ID:E7u6qrbY
あれ?エクセルは出来るの?
アクセスは駄目なんだよ

621デフォルトの名無しさん2018/10/12(金) 17:15:46.40ID:QO2uhWCP
VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。

622デフォルトの名無しさん2018/10/12(金) 17:26:32.07ID:Vm21lImY
VBAより日本語がおかしい

623デフォルトの名無しさん2018/10/12(金) 17:45:20.75ID:TjU2aakC
なんでAccessはマクロからSubを呼び出せない仕様なんだろうか?

624デフォルトの名無しさん2018/10/12(金) 17:45:47.46ID:TjU2aakC
つーか、ここはExcelのスレなのかな?

625デフォルトの名無しさん2018/10/12(金) 18:11:30.85ID:Zsf/ZX4u
Accessでも出来るぞ

626デフォルトの名無しさん2018/10/12(金) 18:20:18.57ID:4bQjrfTH
ほんとに?MSのサイトに対処方法が書いてあったけどなあ。
仕事で使ってたmdbでエラー出まくってSubをFunctionに書き換えた記憶があるけどなあ

627デフォルトの名無しさん2018/10/12(金) 18:45:46.09ID:S2JrLclJ
意味が分からん。
ExcelだろうがAccessだろうが当たり前にできる。
やり方間違えてるだけだろ。

lngRet = FuncA("何かの引数")
Call SubA("何かの引数", "何かの引数2")
これはできる。

SubでCallを省いた場合に
SubA("何かの引数1", "何かの引数2")
とするのは出来ない。

Callを省く場合は
SubA "何かの引数1", "何かの引数2"
とする。

628デフォルトの名無しさん2018/10/12(金) 19:05:34.79ID:TjU2aakC
>>627
AccessとExceの用語の違いが問題かもしれません。
Accessだとマクロのデザインビューで新しいアクションの実行→プロシジャーの実行を選択→プロシジャー名を指定という流れです。
ここでSubを入れるとエラーになり、Functionを入れると実行されます。
全く同じ動作でもSubだとエラーでFunctionだと実行されるという謎仕様のことです。

629デフォルトの名無しさん2018/10/12(金) 19:37:39.24ID:aE6SgoRY
同じように困ってる人がいました。
Subプロシージャをマクロで実行する方法を教えてください
http://webcache.googleusercontent.com/search?q=cache:PplL--43vEQJ:www.accessclub.jp/bbs3/0178/superbeg59084.html+&cd=5&hl=ja&ct=clnk&gl=jp&client=firefox-b-ab

Calling Sub from Macro
https://www.pcreview.co.uk/threads/calling-sub-from-macro.3966923/

630デフォルトの名無しさん2018/10/12(金) 19:39:49.69ID:wk7eAlWy
>>628
Accessマクロの「プロシージャの実行」機能は、Functionプロシージャに限ってアプリ経由でコールバックさせることができるっていう一種のリフレクション機能だから、仕様上Subプロシージャを呼べないのは当たり前

でも普通はVBAその他一般のプログラミング言語の話題でCallするとかコードを呼び出すとか言う場合、プログラムのコード中で他のプロシージャ(=メソッド)を呼び出すこと一般を指す
AccessだろうがCallステートメントでSubを呼べないわけがない

全然話してる内容が違う

631デフォルトの名無しさん2018/10/12(金) 19:42:56.49ID:4ERZBcjn
MSの提示する対処方法
https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/runcode-macro-actionから抜粋
>>[!ヒント] Visual Basic で記述した Sub プロシージャまたはイベント プロシージャを実行するには、Sub プロシージャまたはイベント プロシージャを呼び出す Function プロシージャを作成します。
>>その後、 RunCode アクションを使用して、Function プロシージャを実行します。

632デフォルトの名無しさん2018/10/12(金) 19:47:22.51ID:4ERZBcjn
>>630
そうなんですか?Callという言葉の使い方が悪かったのですね。
Accessのマクロのプロシジャーの実行からSubを実行できないという表現が適切なんですね。
それにしても謎仕様ですね。いちいちCall_SubみたいなFunctionを作らないといけないなんて馬鹿らしいですよね。
Subを使うのを止めて戻り値を使わないのになんでもかんでもFunctionにしている人がいるのはこのあたりにも原因があるのでしょうかね。。。

633デフォルトの名無しさん2018/10/12(金) 20:06:27.08ID:a+EZTAPW
C#やJavaなどの言語にはfunction相当の構文しか存在しないから、それに合わせてるだけかも

634デフォルトの名無しさん2018/10/12(金) 20:12:42.89ID:Vm21lImY
サブルーチンというものは、マクロ上での繰り返し処理や重複処理が必要な場合に同じコードを何度も記載することを回避して、プログラムの再利用性と簡潔性とメンテナンス性を高めるためのもので一種の共通部品で呼び出して使えるためとても便利。
その代わり呼び出し側のコードが必ず必要。

635デフォルトの名無しさん2018/10/12(金) 20:15:04.20ID:Vm21lImY
よってユーザー定義関数とは自ずと目的が違う。

636デフォルトの名無しさん2018/10/12(金) 20:43:31.86ID:xhA4Quty
たとえ1回しか使わなくても、機能ごとに分けて名前を付けることでコードの見通しを良くするという目的もある

637デフォルトの名無しさん2018/10/12(金) 23:37:21.09ID:CecLyO81
どーでもいいわそーゆーおまえのこだわりw

638デフォルトの名無しさん2018/10/12(金) 23:40:27.93ID:kwtsHVW5
・Accessのマクロの「プロシージャの実行」機能は要するに「関数を実行する」ことに重きを置いている機能なので、関数ではないSubプロシージャは呼び出せない。
・「呼び出す」と「Callする」は意味が(あるいは受け取り方が)違うので下手に知ったかぶりしないこと。

639デフォルトの名無しさん2018/10/12(金) 23:43:28.15ID:CecLyO81
アクセスさんの気持ちを代弁するやつw

640デフォルトの名無しさん2018/10/13(土) 14:18:57.90ID:7+viDhhJ
>>638
関数という言葉の定義次第ではSub Procedureも関数の一種になるぞ

あと、Accessマクロの実行機能に関する話題でマクロピッカーからプロシージャを直接選択して実行する操作を指して「呼び出す」とか「Callする」と表現する例は比較的稀だと思うぞ

641デフォルトの名無しさん2018/10/13(土) 18:29:35.77ID:hGe/e45K
数学的な定義だと関数は一対一の写像だから戻り値がないものは関数ではなくなってしまう
丸投げアウトソーシングとでも言えばいいのか

642デフォルトの名無しさん2018/10/14(日) 01:16:47.10ID:FNEdXER5
>>641
その理屈だと、Function Procedureが戻り値なしの記述を許容していること、戻り値と全く論理的な二項関係がない処理をFunction Procedureの中に書けてしまうことを考えた場合、Function Procedureが果たして関数と言えるのかどうかということの方が怪しくなる

643デフォルトの名無しさん2018/10/14(日) 18:45:30.05ID:+nd0Ta/b
それはプロパティとメソッドについても言えるわけで。
意味合いから使い分ければ良い。

Accessの仕事してるけどいわゆるAccessのマクロ機能は嫌いなので殆ど触ったことないな。

644デフォルトの名無しさん2018/10/15(月) 00:09:25.20ID:bvVmxQGC
>>640
マクロからVBAプロシジャを実行するのを、呼び出すと言うのはすごく一般的だとおもうが
むしろ呼び出す以外にどう言うんだ

>>642
戻り値を指定しないFunctionだって戻り値はちゃんとあるんだが
まあそもそもプログラミング上でいう関数は数学的定義の関数ではないんだがな

>>643
一般的なプログラム用語としてはそうかもしれんが
VBAや旧VB,VB.NET,C#なんかはプロパティはメソッドとは別な構文で定義されてる
VBAの話するならちゃんと区別しれ

新着レスの表示
レスを投稿する