プロが教えるわが家の防犯対策術!

あちこち検索してみたのですが思うような答えが見つからなかったので
良い方法があれば教えて頂ければと思います。

エクセルVBAで、ブックを開いた時に、シート上に配置したテキストボックス
(コントロールツールボックスで作成)にフォーカスが移動していて、
すぐに入力できるようにしたいのですが、どうすればいいでしょうか?

現状はファイルを開いてマウスでテキストボックスをクリックしてから
入力しています。

ちなみに、2000を使用しています。

A 回答 (2件)

ThisWorkbook.Open に



Private Sub Workbook_Open()
  Worksheets("Sheet1").Activate
  Worksheets("Sheet1").TextBox1.Activate
End Sub

とかで希望の動作ですか?
    • good
    • 0
この回答へのお礼

ありがとうございます!
その通りです!

お礼日時:2007/09/13 22:42

ワークブックのWorkbook_Open()イベント・プロシージャ、またはそこから呼び出されるプロシージャに、以下のような記述をされてはいかがでしょうか?


Worksheets(1).TextBox1.Activate
    • good
    • 0
この回答へのお礼

ありがとうございます!
動作しました。

お礼日時:2007/09/13 22:44

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

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

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

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

QVBAフォームのテキストボックスに初期値を表示するには?

VBAのフォームのテキストボックスに、初期値としてフォームを開いた当日の日付を表示したいのです。
開いたときは今日の日付が既に表示されていて、必要に応じて書き換える、そんなふうにしたいのですが。

Aベストアンサー

こんにちは。

こういうことかな?

Private Sub UserForm_Initialize()
  TextBox1.Text = Format$(Date, "yy/mm/dd")
End Sub

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

Qエクセルで、任意のテキストボックス等にフォーカスを移したい

すいません、またまた質問です。

エクセルXPで、ユーザーフォーム上に
複数のテキストボックスやリストボックスを
置いて入力した値が任意のシートのセルに
入力されるというものを作っています。
(しかしながらVBAがほとんど見様見真似レベル
なのでかなり悪戦苦闘(~_~*))

そこで、ユーザーフォームにて例えばTEXTBOX1に
入力後、Enterで次のテキストボックス(又は
リストボックス)にフォーカスを移したいのですが、
その時に任意のテキストボックス等にフォーカスを
移すことは可能でしょうか。

番号順(なのかな?)に自動でフォーカスを
移動させることはできたのですが、任意の対象へ
移動させるやり方とかってあるのでしょうか。

例えばTEXTBOX1からRISTBOX5へ移すとか。

入力する順番に移動できたらユーザーフォーム上での
入力作業が非常に楽になると思って(^o^;)

どうぞよろしくお願いします。

Aベストアンサー

#2 tommy-pie83 さんのご回答で良いとおもいますが、
その作業は面倒なので、

VBE でフォームオブジェクトを表示した状態で、
[表示]-[タブオーダー]

で調整です。ちなみに、フォーカスを取得させない
コントロールなら、「TabStop」プロパティーを
False にします。

QEXCEL VBAについて、ワークシート上に置いたTextBoxに値を入れる方法について

すいませんEXCEL VBAについて質問があります。
エクセルのワークシート上にコントロールツールボックスから
テキストボックスを2つ、コマンドボタンを1つ設置する。
アクティブになっているテキストボックスに”goo”という値を入れる。
これをVBAで処理するにはどうしたらよろしいのでしょうか。
ユーザーフォームのテキストボックスであれば
Private Sub CommandButton1_Click()
Dim i As Object
Set i = ActiveControl
If TypeOf i Is MSForms.TextBox Then
i.Text = i.Text & "goo"
End If
Set i = Nothing
End Sub
これでできるはずですが、シート上に置くテキストボックスだと
うまくいきません。
よろしくお願いいたします。

Aベストアンサー

Getfocusイベントで対応しては いかがですか?
例 当該シートに Textbox1 Textbox2 Commandbutton1
が配置されていた場合で考えます。

シートモジュールに

Option Explicit
Private atobj As Object
Private Sub CommandButton1_Click()
  If TypeName(atobj) = "TextBox" Then
  atobj.Text = atobj.Text & "goo"
  End If
End Sub
Private Sub TextBox1_GotFocus()
  Set atobj = TextBox1
End Sub
Private Sub TextBox2_GotFocus()
  Set atobj = TextBox2
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Set atobj = Nothing
End Sub

Getfocusイベントで対応しては いかがですか?
例 当該シートに Textbox1 Textbox2 Commandbutton1
が配置されていた場合で考えます。

シートモジュールに

Option Explicit
Private atobj As Object
Private Sub CommandButton1_Click()
  If TypeName(atobj) = "TextBox" Then
  atobj.Text = atobj.Text & "goo"
  End If
End Sub
Private Sub TextBox1_GotFocus()
  Set atobj = TextBox1
End Sub
Private Sub TextBox2_GotFocus()
  Set atobj = TextBox2
End Sub
Pr...続きを読む

QエクセルVBA テキストボックスへのセットフォーカスについて

エクセルVBAでユーザーフォーム内に配置されたテキストボックス
への数値の入力時に、指定範囲内になければメッセージボックスで
規格外であることを警告し、その規格外が入力されたテキストボックス
を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが
どうすればよいのでしょうか?
自分で考えた構文です。
Private Sub TextBox1_AfterUpdate()
Dim A As Single

A = TextBox1.Text
If A < 1.99 Or A > 3.00 Then
MsgBox "規格外!!"
    TextBox1.Text = ""
TextBox1.SetFoucus
End If
Exit Sub

End Sub

これですと、次のテキストボックスにフォーカスが移動してしまいます。
次のテキストボックスにフォーカスを移動させずに、規格内の値が
入力されるまでフォーカスを移動させない方法を教えて下さい。
お願い致します。

エクセルVBAでユーザーフォーム内に配置されたテキストボックス
への数値の入力時に、指定範囲内になければメッセージボックスで
規格外であることを警告し、その規格外が入力されたテキストボックス
を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが
どうすればよいのでしょうか?
自分で考えた構文です。
Private Sub TextBox1_AfterUpdate()
Dim A As Single

A = TextBox1.Text
If A < 1.99 Or A...続きを読む

Aベストアンサー

こんにちは。Wendy02です。

>イベントをAfterUpdateにしましたが、Wendy02さんはExitを使っていますが、AfterUpdateではなぜ正しく動作しないのでしょうか?

イベント自体の問題よりも、イベントの機能を良くみたほうがよいですね。
_Exit(ByVal Cancel As MSForms.ReturnBoolean)

ここで、Return(戻り値)のブーリアン値があるようなので、それを利用しただけです。

>Cancel = True
が、フォーカスの移動をキャンセルしています。

別に、Exit でなくても良いのです。例えば、

_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
のKeyCode に入った 「13(Enter)」のコードを 0 で打ち消す方法でも、可能です。

If が True の時に、
 MsgBox "規格外!!",16
 TextBox1.Text = ""
 KeyCode = 0

でも可能です。

「なぜ?」というよりも、そういうパターンがあるということです。たぶん、AfterUpDateでも、方法によってはできるとは思いますが、かなり難しくなるのではないかなって思うだけです。

こんにちは。Wendy02です。

>イベントをAfterUpdateにしましたが、Wendy02さんはExitを使っていますが、AfterUpdateではなぜ正しく動作しないのでしょうか?

イベント自体の問題よりも、イベントの機能を良くみたほうがよいですね。
_Exit(ByVal Cancel As MSForms.ReturnBoolean)

ここで、Return(戻り値)のブーリアン値があるようなので、それを利用しただけです。

>Cancel = True
が、フォーカスの移動をキャンセルしています。

別に、Exit でなくても良いのです。例えば、

_KeyDown(By...続きを読む

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QVBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。

マクロを含むエクセル(EXCEL2000)をHTMLのページからハイパーリンクで呼び出しています。そのエクセルでボタン操作に従い罫線やセルの着色を行っています。しかし、着色結果が更新されません。スクロールバー等で画面を移動すると正しく着色されています。このエクセルを通常に起動した場合は、問題なく動作するのですが、シート全体を更新する方法を教えて下さい。
各関数では、以下のスクリーンアップデータの処理を入れています。
Application.ScreenUpdating = False
    (処理)
Application.ScreenUpdating = False

Aベストアンサー

たぶん、EXCEL独特の問題だと思うのですが、HTML の場合、すでに色の部分を表面上で使用しているので、それでメモリが占有させているのではないかと私は思っています。

他にも、

 ActiveWorkbook.HTMLProject.RefreshDocument True

というのがありますね。
ホスト アプリケーション内のブックに含まれる HTML プロジェクトを更新する、というのがありますね。

QエクセルVBA ユーザーフォームのTextBoxを日付にしたい

いつもいつも 皆様からのお返事を心待ちにしておりますNannyです。

VBAのユーザーフォームでTextBoxを日付専用入力にしたいのです。

で、入力方法が 20050219 というような形で入力して、2005/02/19という形か、平成17年2月19日というような形に持って行って、セルに貼り付けしたいのです。

出来なさそうな予感満載なのですが、皆様お返事の程宜しくお願い致します。
(出来ないのであればあきらめられるので、出来るかどうかのお返事も期待しております。

宜しくお願い致します。

Aベストアンサー

下記はTextBox1に20050219としCommandButton1をクリックするとシート1のA1に2005/2/19と出力します。
Private Sub CommandButton1_Click()
Worksheets(1).Range("A1").Value = Format(TextBox1.Text, "0000""/""00""/""00")

End Sub

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む


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

人気Q&Aランキング