この二つの違いはどういう違いがあるのでしょうか?
どなたか教えてください。お願いいたします。

A 回答 (4件)

実際にフォーム1とフォーム2を作成し、フォーム1に二つのコマンドボタンを用意して、以下のコードを貼り付けて見てください。



Private Sub Command1_Click()
Form2.Show vbModal, Me
MsgBox "vbModal"
End Sub

Private Sub Command2_Click()
Form2.Show vbModeless, Me
MsgBox "vbModeless"
End Sub

Command1でもCommand2でもフォーム2が開きます。しかしMsgBoxが表示するタイミングが変わってるはずです。
Command1の場合はフォーム2が閉じたあと
Command2の場合はフォーム2が表示されたあと
にメッセージボックスが表示されます。
つまりCommand1はShowのあとのロジックを、フォーム2が閉じるまで、未処理のままとなるわけです。

画面上はフォーム2が前面、フォーム1が背面になるどちらも似たような表示に見えますが、
Command1の場合はフォーム1はフォームをクリックしても、フォーカスを持たない
Command2の場合はフォーム1はフォームをクリックすると、フォーカスを持ちえる
という点も違います。


簡単にまとめると、
vbModalの場合はフォーム2だけに作業処理を固定させたい時に使用します。vbModelessの場合はフォーム2はポップアップ的な使用方法の時に使います。
    • good
    • 0

モーダルフォームは、オプションやバージョン情報などをだす時に使います。

一度見たらあまり開かないフォームに使います。
例.Excelのバージョン情報、IEのオプション等

モードレスフォームは、1つのアプリケーションで複数フォームを見たいとき使います。
例.Wordで文書新規作成
    • good
    • 1

モーダルとはその画面を閉じないと呼び出した画面に戻れないモードです。


モードレスなら画面を閉じなくても別画面の操作もできます。
    • good
    • 0

モーダルは、ほかのウィンドウがアクティブにならない。


モードレスは、アクティブになる。

画像を保存する時などに出てくるダイアログボックス(出ている時に元画像をアクティブにできない)などがモーダル。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QAccess2000のフォームでのフォームのIMEが、2度目以降変更してしまう。

アクセス初心者です。
Accsss2000のフォームでのデータ入力を楽におこなうために、例えば名前ならばテキストボックスのプロパティシートのその他タブから、IME入力モードをオンにしてかつIME変換モードを人名/地名に変更したのですが、1回目の入力はIMEが全角・人名モードになるのですが、2度目以降は半角カタカナ・人名/地名モードになってしまいます。全角ではありません。なぜでしょうか?
また上のタブにIME入力モード保持というのもありますが、どういう時に利用すればよいのでしょうか?

Aベストアンサー

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、「ひらがな/全角カタカナ/半角英数」などのモードを特に指定
 しない場合に使用します。そのため、特定モードで固定したい場合は、
 それに合わせた設定値(ここでは「ひらがな」)を指定する必要がある、
 ということです)


> 上のタブにIME入力モード保持というのもありますが、どういう時に
> 利用すればよいのでしょうか?

私自身はこの設定は使用していないのですが・・・(汗)

例えば、取引情報を入力する場合、『企業略称』テキストボックスには
「アルファベットの略称」や「漢字の略称」、「カタカナの略称」がそれぞれ
連続することになります。
このとき、同テキストボックスの『IME 入力モード』を「ひらがな」などに固定
してしまうと、アルファベットやカタカナの略称のデータを入力する際には
毎回手動で「全角カタカナ」や「半角英数」に切り替える・・・という使い方を
する方もいる可能性があります。
『IME 入力モード保持』は、恐らくそういう場合を想定した機能ではないかと
思います。
(もちろん、ひらがなからの変換で全角カタカナや半角英数に変換するように
 している人の場合は、切替は不要ですので、この設定は使用しなくても
 かまわないことになります)

> 1回目の入力はIMEが全角・人名モードになるのですが、
> 2度目以降は半角カタカナ・人名/地名モードになってしまいます。

恐らく、1回目の入力から2回目に当該テキストボックスへの移動までの
間に、半角カタカナを指定したテキストボックス(またはコンボボックス)を
経由しているのではないでしょうか。
(或いは『IME 入力モード』が「オフ」や「使用不可」、または英数系?)

ともあれ、回避策としては、『IME 入力モード』を、現在の「オン」から
「ひらがな」に変更します。
(「オン」は、...続きを読む

Qどなたかマクロの修正お願いします。

以下のようなマクロを作りました。
-----------------------------------------------
Private Sub CommandButton1_Click()

ActiveCell.SpecialCells(xlLastCell).Select
cend = ActiveCell.Row
Dim p As Variant
Dim re As Integer
re = MsgBox("この作業は担当者のみです。実行しますか?", vbYesNo + vbQuestion + vbDefaultButton2)
If re = vbYes Then
p = Application.InputBox(Prompt:="送信する月を入力。 (例:10月の場合) 10(半角)", Type:=2)

'指定以外を非表示
For i = 2 To cend
If InStr(1, Cells(i, 2), p, 1) > 0 Then
GoTo pas1
Else
Rows(i).EntireRow.Hidden = True
End If
pas1:
Next
Else
Exit Sub
End If
'表示行選択
Range(Cells(1, 1), Cells(cend, 15)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
'シ-ト"mySheetA"を追加しそこに貼り付け
Sheets.Add.Name = "新規"
ActiveSheet.Paste

Dim Sh1 As Worksheet
Set Sh1 = Worksheets("新規")
Dim outPath As String
outPath = "C:\Documents and Settings\****\デスクトップ\人事ファイル\"
Dim sheetNum As Integer
Sheet = "新規"

Sheets("新規").Activate
ActiveSheet.SaveAs Filename:=outPath & ActiveSheet.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False

Sheets("新規").Activate
ActiveWorkbook.SendMail Recipients:="****@****.co.jp", Subject:="シート(テスト)"

End Sub

-------------------------------------------------
二つ目のメッセージ、InputBoxの部分で「OK」をクリックしたら作業を引き続き実行し、「キャンセル」なら中止としたいです。どなたかお願いします。

以下のようなマクロを作りました。
-----------------------------------------------
Private Sub CommandButton1_Click()

ActiveCell.SpecialCells(xlLastCell).Select
cend = ActiveCell.Row
Dim p As Variant
Dim re As Integer
re = MsgBox("この作業は担当者のみです。実行しますか?", vbYesNo + vbQuestion + vbDefaultButton2)
If re = vbYes Then
p = Application.InputBox(Prompt:="送信する月を入力。 (例:10月の場合) 10(半角)", Type:=2)

'指定以外を非表示
Fo...続きを読む

Aベストアンサー

インプット後に
If p = False Then Exit Sub
でどうでしょう。

マクロを見る限り、一つ目のメッセージボックスの時にキャンセルした場合にも終了処理をしてあげないと、続きの処理をしてしまうと思いますよ。

Qフォーム等入力時においてIMEが働かない(?)

よく起こる現象で、インターネットでフォーム入力や、Yahooとかの検索入力で日本語入力をしたいときに、IMEが働かない現象が起きています。半角英数のみ入力ができます。私の環境だけでしょうか‥。
キーボードの「半角/全角」キーが効かないので、IMEツールバーを出して、マウスで日本語入力の「あ」にしても入力画面では半角英数に戻ったりします。
Wordやメモ帳を起動すると、正常に働くので、メモ帳を立ち上げてそこへ入力して、コピーしてペーストをしたりして対処をしています・・。
常にメモ帳を立ち上げておけば解決とかの意味ではありません。
IEをアクティブウィンドウにした場合、IMEが働くなくのです。

Aベストアンサー

確かIEのバグだったと思います。

対処法のリンクを貼っておきますので、参考にしてください。
http://www.tku.ac.jp/~densan/local/ie7-ime/ie7-ime.html

QプログラミングにおいてOrの使い方がいまいち理解できません。 どなたかご教授お願い致します。

プログラミングにおいてOrの使い方がいまいち理解できません。
どなたかご教授お願い致します。

Aベストアンサー

仮に、a or b であれば、
a 真、b 真 → 真
a 真、b 偽 → 真
a 偽、b 真 → 真
a 偽、b 偽 → 偽

となります。
一つでも真があれば、結果は真となります。

QWebフォームのIMEモードを入力項目毎に自動切替

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにアプリケーション側で制御されるものが大半だと思っておりました。それを聞いてある人は「そんなことはない、世の中の大半のアプリはそんなことを制御していない、「普通」は自分でIMEで制御しながら入力するものだ」、と言っていたので議論になりました。これからウェブサイトを作ろうと思っているので、最終的にはこの議論はアプリ側にそのような実装をするかどうかというところに帰着するのですが、まずは「一般的にどうなのか」というところでご意見を頂きたいと思います。ちなみに、日本のメジャーなサイト(航空会社、ポータル、携帯電話、電気屋)10個でユーザ登録フォームを確認したところ、名前欄をクリックしてもいずれもIMEのモードはひらがなに変更されませんでした。そこで今は友人が正しくて、僕が間違っていたどころか、「そもそも、名前入力時に自動的にひらがなにモード変換されるようなサイトって本当にあるのだろうか。。」というような状態になっております。どなたか、教えてください。よろしくお願いします。

ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにア...続きを読む

Aベストアンサー

IMEのON/OFFができるスタイルシート「ime-mode」は、Internet Explorerが独自に追加した仕様で、Internet Explorerでは入力モードが切り替わりますが、その他のブラウザでは保証されません。
http://www.htmq.com/style/ime-mode.shtml

今、確認したところ、IE8はもちろん切り替わり、Firefox 3.6も切り替わりましたが、Google Chromeは切り替わりませんでした。
Opera,Safari,Sleipnir…等は試してません。

大手のサイトでは「より多くのブラウザで表示できること」が求められますので、独自仕様の「ime-mode」を使っているところは少ないのではないでしょうか。
逆に「Internet Explorerしか表示できなくて良い」と割り切ってるサイトや、社内だけに公開するようなページは「ime-mode」が使われていると思います。

Qマクロについてどなたかご教授お願い致します。 全て同シートの作業です。 エクセルのセルコピーして値の

マクロについてどなたかご教授お願い致します。
全て同シートの作業です。
エクセルのセルコピーして値のみ貼り付けをするのですが、毎日貼り付けるセルが違うように設定したいのです。
C2が1日 D2が2日と毎日今日の日付に貼り付けたいです。マクロ記録ぐらいしか出来ない素人でございます。コピーする場所は毎回同じです。

Aベストアンサー

No3です。
すみません。セルのコピー&ペーストですね。
セルの値だけでなく、書式も含めてコピーされたいのなら、以下のようにしてください。
Option Explicit
Sub Macro1()
Dim colNo As Long
colNo = day(Date)
Range("A1").Copy
Cells(2, colNo).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End Sub
コピー元はA1セルにしています。これは、あなたの環境に合わせてください。

QACCESS フォーム上 テキストボックスを移動するごとに文字の入力モードが戻ってしまう

ACCESSでフォーム上で入力をしています。
テキストボックスを移動するごとに半角英数になってしまい非常に不便です。

テーブルではIME入力モード:ひらがな、IME返還モード:一般としています。
テーブルのデザインビューの状態では指定している通りのひらがなで入力できるのが、フォームになると半角英数の状態です。
フォームのプロパティから何か設定を変更しなければいけないのでしょうか?
よろしくお願い致します。

Aベストアンサー

maigo-no-konekoさん
ACCESS2000では次の機能があります。
テーブルの項目定義のIMEの設定内容が引き継がれる仕様なのか
否か不明ですが、フォームの定義画面でテキスト項目やコンボボックス
など入力項目毎に指定します。
(ただし、シフトキーを押しながらマウスクリックすることで
複数選択できます)

1)テキストポックスのプロパティ画面を呼び出します。
2)その他 タブにIME関連の項目があります。
  IME入力モード保持 直前に入力した項目のIMEの入力設定
  状態を引き継ぐ場合は「はい」にします。直前の入力項目の
  設定によらない場合は「いいえ」にします。
  IME入力モード オンまたはひらがな等にします。
           ここでご希望の入力方法を選択します。
  IME変換モード 一般(人名や地名などを入力す場合は
  人名/地名)にします。

Qマクロでエクセルに貼り付け、毎日今日の行を選択して貼り付けるようにさせたいのです。どなた様かお願い致

マクロでエクセルに貼り付け、毎日今日の行を選択して貼り付けるようにさせたいのです。どなた様かお願い致します。
C1からAG1まで日付順に1日、2日、3日…31日
貼り付けは2列目のセルに入力
1日ならC2に貼り付けます。

Aベストアンサー

以下のようにしてください。
-----------------------------------
Option Explicit
Sub Macro1()
Dim colNo As Long
colNo = day(Date)
Cells(1, colNo).Copy
Cells(2, colNo).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End Sub

QAccess フォームのテキストボックスに半角英字のみで入力する設定は

IME入力モードをテーブル・フォームともオフにしたのですがひらがな入力モードになってしまいます。
フォームのテキストボックスに半角英字のみで入力する設定としてプロパティのIME入力モードをオフにするやり方自体が間違っているのでしょうか。
それともATOKを使っているなど利用するパソコン側の問題でしょうか

Aベストアンサー

IME入力モードを「使用不可」にしましょう。

QエクセルIE操作、クラスが二つあり、片方をコピー

お世話になります。
エクセルマクロでのIE操作について質問です。

環境
エクセル2007
visual basic 6.5
参照設定、デフォルトと下記二つを追加
'Microsoft Internet Controls
'Microsoft HTML object Library

エクセルでB列に入力してある単語を、http://www.langtolang.com/から、指定の言語で検索し、
検索結果をシートに貼り付けるものを作ろうとしているのですが、貼り付けに困っています。

作業手順
1、B6から下へ検索したい単語を入力する
2、C2に元の言語、D2に調べたり言語を入力(入力規則で指定しました)
ここからがマクロの手順です
3、IEを開き、指定のページへ移動
4、getelementsbytagnameで、言語の選択と、インプットボックスに単語入力
5、submit
6、検索結果が"no translation found"以外の場合、新しいシートを挿入し、シート名を検索単語に変更し、そこに検索結果をテーブルで貼り付け
7、テーブルに貼り付けたれた検索結果を、検索単語が羅列してあるシートの、検索単語の横に貼り付ける。訳が複数見つかった場合、横並びして張り付ける
これを繰り返す。

このようなものを作りたいのですが、テーブルが複数あり、また同じクラス名のテーブルも複数あるため、どうやって、検索結果だけを選択すれば良いのか困っています。

今のコードは以下です。
よろしくお願いします。

Sub open_ie()

'enable the following reference
'Microsoft Internet Controls
'Microsoft HTML object Library

'VBA version
'VBA version 6.5.10.53



Dim home As Worksheet
Set home = Sheets("Search page")
home.Activate



'open IE

Dim objIE As Object 'create variable
Set objIE = CreateObject("InternetExplorer.Application") 'create object
objIE.Visible = True 'make ie visible


objIE.Navigate "http://www.langtolang.com/" 'navigate Ie to dictionary

'wait while IE is busy
Do While objIE.Busy = True
DoEvents
Loop




'static-------------------------

'Create object variable for source and target language on IE
Dim objSourceLanguage As Object
Dim objTargetLanguage As Object

'choose language by variable.
Dim SourceLanguage As String
Dim TargetLanguage As String
SourceLanguage = Worksheets("Search page").Cells(3, 2).Value
TargetLanguage = Worksheets("Search page").Cells(5, 2).Value


'cell setting--------------------------

Dim i As Integer
i = 6

Dim word As String


'looping procedure stard from here-----------------------------


word = Cells(i, 2).Value

Do While objIE.Busy = True
DoEvents
Loop

objIE.document.forms("frmSozluk").getElementsByTagName("selectFrom") = SourceLanguage 'set source language
objIE.document.forms("frmSozluk").getElementsByTagName("selectTo") = TargetLanguage 'set target language
Do While objIE.Busy = True
DoEvents
Loop
objIE.document.forms("frmSozluk").Item("txtLang").Value = word 'set word in cells(i,2)
objIE.document.forms("frmSozluk").submit

Do While objIE.Busy = True
DoEvents
Loop


'copy output----------------------------------------


Dim table As HTMLTable
Dim sheet As Worksheet

For Each table In objIE.document.all
If table.className = "blue" Then

Sheets.Add after:=Sheets("Search page")
ActiveSheet.Name = word
Set sheet = ActiveSheet

End If
Next

home.Activate


End Sub

お世話になります。
エクセルマクロでのIE操作について質問です。

環境
エクセル2007
visual basic 6.5
参照設定、デフォルトと下記二つを追加
'Microsoft Internet Controls
'Microsoft HTML object Library

エクセルでB列に入力してある単語を、http://www.langtolang.com/から、指定の言語で検索し、
検索結果をシートに貼り付けるものを作ろうとしているのですが、貼り付けに困っています。

作業手順
1、B6から下へ検索したい単語を入力する
2、C2に元の言語、D2に調べたり言語を入力(入力規則で指定し...続きを読む

Aベストアンサー

>C2に元の言語、D2に調べたり言語
でしたら、
>SourceLanguage = Worksheets("Search page").Cells(3, 2).Value
>TargetLanguage = Worksheets("Search page").Cells(5, 2).Value
は、それぞれ、Cells(2, 3)、Cells(2, 4)、です。

 コード の方が正しいと見なして、「B3に元の言語、B5に調べたい言語」として回答いたします。

>クラスが二つあり、片方をコピー
>テーブルが複数あり、また同じクラス名のテーブルも複数ある
とのことで、html ソース を見てみましたが、特に目的の <table> に「id」や「name」が付いている訳でもありませんので、このような場合は、html ソース を丸ごと読み取り、その中から、目的のものを切り出していくか、あるいは、WEB クエリ が使えるのなら、そちらをお使いになるのが簡単ではないでしょうか?

 ということで、
1)html ソース を丸ごと読み取り、その中から、目的のものを切り出していく例
2)WEB クエリ を使った例
の2つを、ご参考に供します。
 私の環境で試したところ、キーワード が6個の場合で、(1) は9秒、(2) は5秒掛かりました。

 なお、
>参照設定、デフォルトと下記二つを追加
>'Microsoft Internet Controls
>'Microsoft HTML object Library
 上記2件は必要ありません。参照設定を外してください。

 また、
>6、検索結果が"no translation found"以外の場合
は考慮しておりません。

'----------------------------------

Sub use_html_source()
'Microsoft Forms 2.0 Object Libraryを参照設定
  Dim home As Worksheet
  Dim objIE As Object
  Dim i As Integer
  Dim word As String
  Dim mytable As String
  Dim CB As New DataObject

  Set home = Sheets("Search page")
  home.Activate
  Set objIE = CreateObject("InternetExplorer.Application")

  Application.ScreenUpdating = False
  With objIE
    .Navigate "http://www.langtolang.com/"
    While .Busy Or .readyState <> 4: DoEvents: Wend
    .document.forms("frmSozluk").Item("selectFrom").Value = home.Cells(3, 2).Value
    .document.forms("frmSozluk").Item("selectTo").Value = home.Cells(5, 2).Value
    For i = 6 To home.Range("B6").End(xlDown).Row
      word = Cells(i, 2).Value
      .document.forms("frmSozluk").Item("txtLang").Value = word
      .document.forms("frmSozluk").submit
      While .Busy Or .readyState <> 4: DoEvents: Wend
      mytable = .document.body.innerHTML
      mytable = Mid(mytable, InStr(mytable, "class=""title"""))
      mytable = Mid(mytable, InStr(mytable, "class=""blue"""))
      mytable = "<table><tbody><tr" & Left(mytable, InStr(mytable, "</table>")) & "/table>"
      With CB
        .SetText mytable
        .PutInClipboard
      End With
      Sheets.Add after:=Sheets(Sheets.Count)
      ActiveSheet.Name = word
      Range("A1:B1").Value = Array(home.Cells(3, 2).Value, home.Cells(5, 2).Value)
      Range("A2").Select
      ActiveSheet.Paste
      Range(Range("B2"), Range("B" & Rows.Count).End(xlUp)).Copy
      home.Select
      Range("C" & i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
       False, Transpose:=True
      Application.CutCopyMode = False
    Next i
  End With
  home.Activate
  Set objIE = Nothing
  Application.ScreenUpdating = True
End Sub

'----------------------------------

Sub use_web_query()
  Dim home As Worksheet
  Dim i As Integer
  Dim word As String

  Set home = Sheets("Search page")
  home.Activate

  Application.ScreenUpdating = False
  For i = 6 To home.Range("B6").End(xlDown).Row
    word = Cells(i, 2).Value
    Sheets.Add after:=Sheets(Sheets.Count)
    With ActiveSheet.QueryTables.Add(Connection:= _
     "URL;http://www.langtolang.com/?selectFrom=" & home.Cells(3, 2).Value & _
      "&selectTo=" & home.Cells(5, 2).Value & "&txtLang=" & word _
      , Destination:=Range("A1"))
      .WebFormatting = xlWebFormattingNone
      .WebTables = "6"
      .Refresh BackgroundQuery:=False
    End With
    ActiveSheet.Name = word
    Range(Range("B2"), Range("B" & Rows.Count).End(xlUp)).Copy
    home.Select
    Range("C" & i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
     False, Transpose:=True
    Application.CutCopyMode = False
  Next i
  home.Activate
  Application.ScreenUpdating = True
End Sub

>C2に元の言語、D2に調べたり言語
でしたら、
>SourceLanguage = Worksheets("Search page").Cells(3, 2).Value
>TargetLanguage = Worksheets("Search page").Cells(5, 2).Value
は、それぞれ、Cells(2, 3)、Cells(2, 4)、です。

 コード の方が正しいと見なして、「B3に元の言語、B5に調べたい言語」として回答いたします。

>クラスが二つあり、片方をコピー
>テーブルが複数あり、また同じクラス名のテーブルも複数ある
とのことで、html ソース を見てみましたが、特に目的の <table> に「id」や「na...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報