他の方の質問ですが
http://okwave.jp/qa2149125.html
このコードを実行してファイル名を取得する時に
存在しないフォルダを指定した時
「autoexec.bat」と「config.sys」が取得されます。
これは私だけですか?
ちなみにアクセス2003で試しています。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

MyPath = WSH.SpecialFolders("MyDocuments")


の"MyDocuments"に、存在しないフォルダーを指定という意味でしょうか?
これは、環境、ユーザーにより異なる、MyDocumentsのフルパスを取得する方法なので、ここに任意のフォルダー名を入れた場合、
Debug.Print "MyPath:", MyPath
で確認すると、空文字列になっていると思います。
したがって、
MyFileName = Dir("\" & "*.*")
が実行され、Cドライブ直下のファイルが表示されるのだと思います。
http://www.happy2-island.com/vbs/cafe02/capter00 …
    • good
    • 0
この回答へのお礼

説明不足ですいません。
MyDocumentsはあるのですが「d:\○○」と言うファイルがない場合があります。
ありがとうございます。

お礼日時:2009/05/24 11:33

こんにちは。



>http://okwave.jp/qa2149125.html

まず、WSH というのは、WScript Host のことで、VBAで使うものは、VBAのコードではありません。
CreateObject で生成されるものを、オートメーション・オブジェクトと呼んでいます。

>存在しないフォルダを指定した時

WshShellのSpecialFoldersのオブジェクトはコレクションで、その引数は組み込み定数/Indexがあります。使用できない場合は、「""」(長さ0の文字列または空文字--Helpには書かれていません) が返されます。

例えば、Window XP の場合は、元のコードで、WSH.SpecialFolders(17)でも可能です。言い換えると、それ以外のものを入れても、「""」が返されて、その使用する親ディレクトリしか取得できません。

詳しくは、ここをお読みください。
http://msdn.microsoft.com/ja-jp/library/cc364490 …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/05/24 19:04

例えば 

http://www.moug.net/tech/acvba/0090003.htmの中ごろの記述
>データベースがあった場合は、「ProjectA.mdb」がメッセージボックスに表示され、なかった場合は長さ0の文字列が返されるのでメッセージボックスには何も表示されません。
従ってその結果の""と文字列¥を結合している場合は、¥だけ残り先頭に来ます。
ーー
コマンドプロンプト画面で
Dir \
と入れると、
「c:\のデレクトリ」としてまず表示され、次行以下にフォルダ名、ファイル名が出てきます。これは人(パソコン)によって出てくるものは当然違います。
ドライブ名の後の最初の¥(英語ではバックシュラッシュ)はルートディレクトリをさします。この考えがUNIXなどの勉強では強調された記憶がありますが、
http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3% … 参考
ウンドウズでは、ファイル選択のダイアロウグ画面でほとんど用が足り、エクセルやアクセスの解説書では、説明が省略されているように思う。だから疑問に思うのでしょう。
    • good
    • 0
この回答へのお礼

よく読んでみます。ありがとうございます。

お礼日時:2009/05/24 11:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA(マクロ)を勉強したい

VBAを勉強したいのですが、オススメの本等教えて下さい。
今FOM出版のマクロ入門を買って勉強しています。大体の基本操作は分かった気がします。

Aベストアンサー

こんにちは。

ここら辺が参考になると思います。

日本VBA協会の参考書籍
の準拠本
http://www.vbaa.jp/training/books.htm

アマゾンのExcelVBA
http://www.amazon.co.jp/exec/obidos/ASIN/4774119660/vbaajpn-22/249-7235447-7367506

Qなぜか先頭ページに移動します.....

いつもお世話になっています。

フォーム画面で入力していくんですが、なぜか会社名を選択するときに コンボで選択すると先頭ページへ戻ります。
会社名はコンボの形をとっています。
なにか設定をしてしまってるのでしょうか?
他のコンボや入力枠は問題なく入力できます。

Aベストアンサー

>会社名を入力後F9をおすと品番が連動するんですが
F9を押すと品番のコンボボックスも連動して変わるようになっているなら、
会社名のコンボボックスのプロパティを開き、イベントタブの更新後処理の[…]の部分をクリック。
コードビルダーを選択しそこにMe!品番.Requeryを記述する。

http://tsware.jp/study/vol16/vbabegin_23.htm

http://hamachan4.exblog.jp/2308675/

マクロで記述する場合はコントロール名を指定してください。
コントロール名を指定しない場合はフォームが対象になります。

QマクロとVBAの違いは?

最近officeのVBAを勉強してるのですが「マクロ」と「VBA」って何が違うのでしょうか?

アクセスはマクロとVBA(VBE)が別れてるけど、
エクセルは「マクロの記録」でVBAコードが取得できますよね。

マクロとVBAは同じ意味なのか、違う意味なのか教えていただけますか?

Aベストアンサー

こんにちは。

#2さんの引用先と同じ内容ですが、日本語として出ていたはずです。

マクロとVBAを、一応、定義として把握していないと、きちんと人には教えられないと思いますね。アクセスには、一般的に、VBA側で作られたものは、マクロとは呼べません。

理由は、「マクロ」というのは、その取り扱い言語は別として、ひとつの作業(タスク)の自動実行を目的とする機能のことです。逆にいうと、ひとつの作業を実行できないものは、マクロとは呼びません。例えば、引数を必要とするユーザー定義関数は、マクロの範疇から外れます。

マイクロソフトでは、こう定義しています。

以下は、内容的に、あくまでも、VBAの範疇に対して書かれています。

マクロは、より意味の限定された用語で、引数を持たないパブリックなSub プロシージャのことだけを指します。すべてのマクロはプロシージャですが、すべてのプロシージャがマクロであるとは限りません。マクロの記録機能を使って生成されるプロシージャとOffice アプリケーションの[マクロ]ダイアログボックスから実行できるプロシージャは、すべてマクロです。

それに反して、VBAというのは、アプリケーション用のVisual Basic プログラミング言語です。

「VBA」で書かれたものを総称して、プロシージャと呼び、マクロとは厳密には意味が異なります。また、Ver.4 の「マクロ関数」で書かれたものも、プロシージャで自動実行で作業をするものも、総称してマクロと呼びます。また、ひとつのブックにあるモジュール(=プロシージャを呼び出すためのオブジェクト)群をプロジェクトと呼び、「モジュール」を組み合わせ一貫した仕事をするようにしたものを「システム」と呼んだりします。

これで、違いが分かっていただけたかと思います。

こんにちは。

#2さんの引用先と同じ内容ですが、日本語として出ていたはずです。

マクロとVBAを、一応、定義として把握していないと、きちんと人には教えられないと思いますね。アクセスには、一般的に、VBA側で作られたものは、マクロとは呼べません。

理由は、「マクロ」というのは、その取り扱い言語は別として、ひとつの作業(タスク)の自動実行を目的とする機能のことです。逆にいうと、ひとつの作業を実行できないものは、マクロとは呼びません。例えば、引数を必要とするユーザー定義関数は、マクロの...続きを読む

QApplication.Dialogs(xlDialogSaveAs)でキャンセルの取得

エクセル2000です。
Sheet1を複製し名前をつけて保存するマクロを書きました。
以下のとおりですが、キャンセルされた場合でも「保存しました」のメッセージが出てしまいます。
キャンセルされたことを取得するにはどう書けばいいでしょうか?

Sub tesy01()
Dim ns As Workbook
Dim fn As String
Sheets("Sheet1").Copy
Set ns = ActiveWorkbook
With ns.Sheets(1)
.Cells.Copy
.Cells.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
fn = .Range("A1") & Format(Date, "yymmdd")
End With
Application.Dialogs(xlDialogSaveAs).Show ARG1:=fn & ".xls", ARG2:=1
ns.Close (False)
Set ns = Nothing
MsgBox "保存しました。"
ThisWorkbook.Activate
Sheets("Sheet1").Activate
End Sub

エクセル2000です。
Sheet1を複製し名前をつけて保存するマクロを書きました。
以下のとおりですが、キャンセルされた場合でも「保存しました」のメッセージが出てしまいます。
キャンセルされたことを取得するにはどう書けばいいでしょうか?

Sub tesy01()
Dim ns As Workbook
Dim fn As String
Sheets("Sheet1").Copy
Set ns = ActiveWorkbook
With ns.Sheets(1)
.Cells.Copy
.Cells.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
...続きを読む

Aベストアンサー

Msgboxを使ったりして
Application.Dialogs(xlDialogSaveAs).Show
の戻り値を確認してみればわかるが,
OKを押した時はTrueで
Cancelを押した時はFalseだ。

#MSDNのどのページに載っているかよくわからんかった。
#そういやあ、http://support.microsoft.com/kb/139723/en-us の method2との違いはなんだろう?

QVBAとマクロ

お世話になります。田吾作7です。

ふと思ったのですが。。。

VBAとマクロの違いって何でしょう?
「マクロの記録」ボタンを押したのがマクロですか?
VBAは、MS-Officeのモジュールにユーザ自身が書き込んだら、それはVBAですか?
もしそうなら、[マクロの記録]ボタンはなぜ[VisualBasicツールバー]にボタンがあるのでしょうか。マクロを編集しやすくするためでしょうか?

記録で
Range("A1").select
それを編集で
Range("A2").select
としたらVBA?

さらに最初っから
Range("A2").select
と記録したマクロは、やっぱりマクロ?


VBAとマクロって違いあるのでしょうか?
いつも疑問に感じて、モヤモヤしてます。
だれか、このモヤモヤ感を解消してください。

よろしくお願いします。


余談ですが・・・
VBAは[VB for Application]ですよね?
Office関連のためのVBってことですよね。
でもAPIを使ってWINDOWSを制御することもできるから[for App]の意味が無いような気がする今日この頃・・・

お世話になります。田吾作7です。

ふと思ったのですが。。。

VBAとマクロの違いって何でしょう?
「マクロの記録」ボタンを押したのがマクロですか?
VBAは、MS-Officeのモジュールにユーザ自身が書き込んだら、それはVBAですか?
もしそうなら、[マクロの記録]ボタンはなぜ[VisualBasicツールバー]にボタンがあるのでしょうか。マクロを編集しやすくするためでしょうか?

記録で
Range("A1").select
それを編集で
Range("A2").select
としたらVBA?

さらに最初っから
...続きを読む

Aベストアンサー

マクロという言語があるわけではないので
決まった処理を登録しておいて後で実行できる機能を
マクロと呼んでいるんじゃないですか?

そのマクロの情報をスクリプトとして保存しておきますので
そのスクリプトがVBAという事だと思いますが。

Qvista office2007 テキストをbatファイルに変換

vistaを使用しています。
XPであればファイル名に拡張子が表示されていたので
テキストをバッチにする際は、名前の変更で
.txt→.batにしていました。

vistaは名前に拡張子の表示がないのですが
どのように変えたら良いのでしょうか?

Aベストアンサー

次の手順で設定してください。
(1)スタートメニュー
(2)ドキュメント
(3)整理
(4)フォルダと検索のオプション
(5)表示タブ
(6)詳細設定の「登録されている拡張子は表示しない」のチェックを外す。
(7)OK

QVBAとマクロの違い

こんばんは。エクセル初心者です。
VBAとマクロの違いについて教えてください。
VBAというのは、プログラミング言語のことで
よろしいのでしょうか?
そのVBAで記述されたものをマクロとよぶ
といったイメージでよろしいのでしょうか?

たとえば、あるエクセルにはいってるマクロを
実行する、ということを作業マニュアルに記述
する場合
「○○マクロを実行する」というのが
正しいのでしょうか?それとも
「VBAを実行する」というのが正しいのでしょうか?

まったく見当違いのご質問だったら申し訳ありません。
教えてください。

Aベストアンサー

「○○マクロを実行する」というほうが正しいです。

VBAは言語のことです。
マクロとは特定の操作手順をプログラムとして記述して自動化することです。

今回の場合、特定の処理なので「マクロ」という表現を使いましょう。

QエクセルVBAよりBATファイルを起動する方法。

エクセルVBAよりBATファイルを起動する方法を教えてください。

現在下記の様な内容で作ってみましたがうまくいきません。

***VBA側***
Private Sub CommandButton5_Click()
Dim myID As String
myID = Shell("D:\test.bat", vbMaximizedFocus)
End Sub

***BATファイル側***
xcopy "d:\test1" "d:\test2"/I/Y

エクセル2003で実行してみましたがうまくいきません。BATファイルは起動しているようなのですが、BATファイルの処理がうまくいかなくて困っています。(ちなみにBATファイル単体をダブルクリックで実行すると問題ないのですが…)

同じ内容をエクセル2007で実行するとうまくいきました。(ちなみにOSはVISTA)
2003(ちなみにOSはxp)で上手くいかないのがどうしてかわかりません。
どうか詳しい方ご教授ください。よろしくお願いいたします。

Aベストアンサー

こんばんは。

私は、こちらで試してみて、BATのパス・ファイル名のショートネーム(8.3型)の制約があるからだと解釈しましたが、もう一度読み直してみて、それは違ったようです。

>上手くいかないのがどうしてかわかりません。

パソコン自体を調べてみないと分かりませんが、おそらく、BATプログラム用のメモリ不足しているのではないかと思います。おそらく、完全に、VBAに移行するか、Excelの起動をやめるかしないと解決は難しいかもしれません。

ただ、もう一度、他の方法を二つ作ってみましたので、以下を試してみてください。きわめて微妙な内容です。貼り付けるのはそのままでよいのですが、出来るなら、試すのは、2番目からにしてください。2番目で成功すれば、1番目は使わなくてよいです。

'-------------------------------------------
'モジュールの先頭に置く
Private Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hWnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
Private Const SW_SHOWNORMAL As Long = 1 'ウィンドウをアクティブにして、表示します
Private Const SW_SHOW As Long = 5 'ウィンドウをアクティブにして、現在の位置とサイズで表示します。
'-------------------------------------------
'1番目
Sub Test1()
'Sub CommandButton5_Click()
  Dim ret As Long
  Const FILENAME As String = "D:\test.bat"
  ret = ShellExecute(Application.hWnd, "Open", FILENAME, vbNullString, vbNullString, SW_SHOWNORMAL)
  If ret = 0 Then
    MsgBox "失敗しました。", vbExclamation
  End If
End Sub
'-------------------------------------------
'2番目
Sub Test2()
'Sub CommandButton5_Click()
  Const FILENAME As String = "D:\test.bat"
  CreateObject("WScript.Shell").Run FILENAME
End Sub

こんばんは。

私は、こちらで試してみて、BATのパス・ファイル名のショートネーム(8.3型)の制約があるからだと解釈しましたが、もう一度読み直してみて、それは違ったようです。

>上手くいかないのがどうしてかわかりません。

パソコン自体を調べてみないと分かりませんが、おそらく、BATプログラム用のメモリ不足しているのではないかと思います。おそらく、完全に、VBAに移行するか、Excelの起動をやめるかしないと解決は難しいかもしれません。

ただ、もう一度、他の方法を二つ作ってみましたので...続きを読む

QVBAとマクロの違い

VBA初心者です。
会社の人からVBAとマクロの違いについて質問され、ちゃんと説明できませんでした。
なにがちがうんでしょうか?
私は「VBAのプログラミング=マクロを組む」と思ってました。
よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

Excel(2000)については、No.1の方の説明通り、
「マクロ = VBAというプログラミング言語で記述された一塊の動作」
です。
したがって、miyacさんの、
「VBAのプログラミング=マクロを組む」
で、おおよそあっています。
また、自分で書いたコードをマクロとして登録することも出来ます。
しかし、Access(2000)での"マクロ"は少しニュアンスが異なります。
Accessの場合は、マクロはいくつかの動作・操作は順に登録しておき、それを自動実行させる、という使い方です。自分で書いたコードをマクロとして登録するというやり方ではありません。(本当はそういうやり方も出来ますが。)
したがって、VBAとマクロは何となく別物のような印象を受けます。
それにAccessでは、「マクロを組む」という表現は通常使いません。
ただし、マクロをVBAに変換することが出来ますし、マクロに登録する各動作・操作も、VBAで自分で書くことが出来ます。
ですから、結局同じことなんですけどね。
まとめると、「マクロは自動実行処理を登録すること」で、「VBAはそのアプリケーションのあらゆる操作を記述すること」ですかね。
では。

こんにちは。maruru01です。

Excel(2000)については、No.1の方の説明通り、
「マクロ = VBAというプログラミング言語で記述された一塊の動作」
です。
したがって、miyacさんの、
「VBAのプログラミング=マクロを組む」
で、おおよそあっています。
また、自分で書いたコードをマクロとして登録することも出来ます。
しかし、Access(2000)での"マクロ"は少しニュアンスが異なります。
Accessの場合は、マクロはいくつかの動作・操作は順に登録しておき、それを自動実行させる、という使い方です。...続きを読む

Q[Access VBA] DoCmd.OpenForm ...の書式について(VBAに詳しい方求む!)

仕事でAccessを使用しています。
帳票管理のデータベースを作ってて
帳票名フィールドに各種の帳票の名前が格納されています。
ここはコンボボックスにしてあり、データベース化する
対象の帳票も決まってます。
メインのフォームには帳票の基礎データを入力し
フォーム上に作ったボタン(ボタン名「詳細記録」)を押すことで
各帳票の詳細な記録を書きこむフォームが現れるように設計する予定です。

そこで、メインのフォームに設けたボタンの
「クリック時」のイベントプロシージャに以下の記述をしました。

Private Sub 詳細記録_Click()
DoCmd.OpenForm 帳票名
End Sub

ボタンをクリックした時点で帳票名フィールドに記載されている
帳票の詳細記録フォームがたちあがります。
例えば帳票名フィールドが
「AA」の時→ボタンClick→AAの詳細記録フォームが立ちあがる。
「BB」の時→ボタンClick→BBの詳細記録フォームが立ちあがる。
(企業秘密のため具体的な帳票名を書けません。)

実はこのような動作をしてくれるのが目的だったのですが
疑問があるんです。
それより前には、上述のと1箇所だけ記述がいろいろ変えてました。

DoCmd.OpenForm "帳票名"

帳票名のところがダブルクォーテーションでくくってあるかないか
の違いです。
くくるとエラーが出ますが、くくらないとうまく行きます。

[帳票名]のときもうまく行きましたが、"[帳票名]" はだめのようです。

また、" "の中を具体的な帳票の名前にすると
(例:DoCmd.OpenForm "AA")
いつでもそのAAフォームだけがたちあがります。
(帳票名フィールドの記述がBBでも)

たまたまダブルクォーテーションをはずすと
うまく反応してくれたんでよかったんですが
ダブルクオーテーションひとつで
なぜこんなに動きが違うのか?
わかる方よろしくお願いします。

仕事でAccessを使用しています。
帳票管理のデータベースを作ってて
帳票名フィールドに各種の帳票の名前が格納されています。
ここはコンボボックスにしてあり、データベース化する
対象の帳票も決まってます。
メインのフォームには帳票の基礎データを入力し
フォーム上に作ったボタン(ボタン名「詳細記録」)を押すことで
各帳票の詳細な記録を書きこむフォームが現れるように設計する予定です。

そこで、メインのフォームに設けたボタンの
「クリック時」のイベントプロシージャに以下の記述をし...続きを読む

Aベストアンサー

文字列と要素名との使い分けで混乱なさってるようですね。

ダブルクォーテーションで括るのは、「ソースコード中に直接、文字列を記述する」場合のみです。

'テキストボックスに「こんにちは」と表示する
MsgBox "こんにちは"

この例では、MsgBox命令に対して、「こんにちは」という文字列を渡しています。

Dim Message as String
Message = "こんにちは"
MsgBox Message

この例では、Message という変数に「こんにちは」という文字列を代入し、MsgBox命令にMessage という変数を渡しています。
Messageは変数であって文字列ではないため、ダブルクォーテーションで括る必要がないのです。

DoCmd.OpenForm でも同様。

DoCmd.OpenForm "帳票A"
は、「帳票A」という文字列をDoCmd.OpenForm命令に渡しています。


帳票フィールドに「帳票A」という文字が格納されているとき、

DoCmd.OpenForm Me![帳票フィールド]

とすると、DoCmd.OpenFormに渡されるのは「Me![帳票フィールド]」という文字列ではなく、帳票フィールドに格納されている「帳票A」という文字列が渡されるのです。

尚、この命令文は

Dim Chouhyou As String
Chouhyou = Me![帳票フィールド]
DoCmd.OpenForm Chouhyou

とするのと同じです。

あんまりいい説明じゃないかもしれませんが、VBA理解の一助にでもなれば幸いです。

文字列と要素名との使い分けで混乱なさってるようですね。

ダブルクォーテーションで括るのは、「ソースコード中に直接、文字列を記述する」場合のみです。

'テキストボックスに「こんにちは」と表示する
MsgBox "こんにちは"

この例では、MsgBox命令に対して、「こんにちは」という文字列を渡しています。

Dim Message as String
Message = "こんにちは"
MsgBox Message

この例では、Message という変数に「こんにちは」という文字列を代入し、MsgBox命令にMessage という変数を渡しています...続きを読む


人気Q&Aランキング