人に聞けない痔の悩み、これでスッキリ >>

VBAのユーザーフォームを初めに表示した位置から、動かせないようにするためにはどうしたらよいでしょうか。Moveableのプロパティもないようです。よろしくお願いします。

A 回答 (1件)

Private Sub UserForm_Layout()


UserForm1.Left = 0
UserForm1.Top = 0
End Sub

で、似たような状態になります。
数字のゼロは表示したい場所により、変更して下さい。
    • good
    • 0
この回答へのお礼

ありがとうございました。
教えていただいたとおりで十分です。
助かりました。

お礼日時:2007/08/24 10:01

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

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

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

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

QExcel VBA で、マクロを実行した時のフォームを固定する方法

Excel VBA で、マクロを実行した時のフォームを固定し、移動できないようにする方法を教えてください。
画面一杯にして、最小化も含め指示したフォームのみの表示で他の操作をできないようにしたいと思っておりますが、どのようにしたらいいか教えてください。

Aベストアンサー

フォームではないけど

Sub test2()
With Application
'.DisplayFullScreen = True
.DisplayFormulaBar = False
.DisplayStatusBar = False
End With
ActiveWindow.DisplayWorkbookTabs = False
For Each CB In Application.CommandBars
CB.Enabled = False
Next CB

MsgBox "フォームじゃないけど、こんな感じです。"

With Application
'.DisplayFullScreen = False
.DisplayFormulaBar = True
.DisplayStatusBar = True
End With
ActiveWindow.DisplayWorkbookTabs = True
For Each CB In Application.CommandBars
CB.Enabled = True
Next CB
End Sub

フォームではないけど

Sub test2()
With Application
'.DisplayFullScreen = True
.DisplayFormulaBar = False
.DisplayStatusBar = False
End With
ActiveWindow.DisplayWorkbookTabs = False
For Each CB In Application.CommandBars
CB.Enabled = False
Next CB

MsgBox "フォームじゃないけど、こんな感じです。"

With Application
'.DisplayFullScreen = False
.DisplayFormulaBar = True
.DisplayStatusBar = True
End With
ActiveWindow.DisplayWorkbookTabs = True
For Each CB In...続きを読む

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

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

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

Aベストアンサー

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

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QユーザーフォームをWorkSheet(1)に固定

●質問の主旨

WorkSheet(1)(「柴田8月分」)にユーザーフォームを固定的に
表示させつつ、WorkSheet(1)以降のWorkSheet(2)、
WorkSheet(3)、WorkSheet(4)の表を参照しながら
ComboBox1、ComboBox2、ComboBox3にリストを
選択して、データベースに入力したいと考えています。

以下のコードをどのように書き換えれば良いでしょうか?
ご教示のほどよろしくお願い申し上げます。

●質問の補足

現在のコードでは、ComboBox1、ComboBox2、ComboBox3を
それぞれ選択しているとユーザーフォームがそれぞれ
WorkSheet(2)、WorkSheet(1)(顧客リスト)、WorkSheet(3)(社員名)、
WorkSheet(4)(大分類)にとんでしまいます。
転記入力が終了すると、また手作業でWorkSheet(1)に戻らなければなりません。
その手作業を回避したいと考えています。

なお添付画像はComboBox1の選択前なのでWorkSheet(1)
に留まってくれています。

●コード
Option Explicit

'ユーザーフォームの初期化
Private Sub UserForm_Initialize()

Dim r As Range
Dim n As Range
Dim d As Range

With Worksheets(2)

Set r = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox1
.ColumnCount = 2
.ColumnWidths = ";0"
.List = r.Value
End With

With Worksheets(3)

Set n = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox2
.ColumnCount = 2
.ColumnWidths = ";0"
.List = n.Value
End With

With Worksheets(4)

Set d = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox3
.ColumnCount = 2
.ColumnWidths = ";0"
.List = d.Value
End With

Set r = Nothing
Set n = Nothing
Set d = Nothing

TextBox3.Value = Worksheets(1).Range("A2").Value + 1
txtdate = Date
OptionButton1.Value = True

End Sub

'ComboBox1をクリックしたときの処理
Private Sub ComboBox1_Click()

Worksheets(2).Select
With Me.ComboBox1
Me.Label19.Caption = .List(.ListIndex, 1)
Worksheets(2).Select Replace:=False

End With

End Sub

'ComboBox2をクリックしたときの処理
Private Sub ComboBox2_Click()

Worksheets(3).Select
With Me.ComboBox2
Me.Label20.Caption = .List(.ListIndex, 1)
Worksheets(3).Select Replace:=False

End With

End Sub

'フォームからデータベースへの転記
Private Sub CommandButton3_Click()

Dim Rowpos As Long
Dim ColPos As Long

Rowpos = Worksheets("柴田8月分").Range("a10000").End(xlUp).Row
ColPos = 1

Rowpos = Rowpos + 1

With Worksheets("柴田8月分")

.Cells(Rowpos, ColPos) = TextBox3.Value
.Cells(Rowpos, ColPos + 1) = txtdate.Value
.Cells(Rowpos, ColPos + 2) = Label19.Caption
.Cells(Rowpos, ColPos + 3) = ComboBox1.Text
.Cells(Rowpos, ColPos + 4) = ComboBox2.Text
.Cells(Rowpos, ColPos + 5) = Label20.Caption
.Cells(Rowpos, ColPos + 6) = ComboBox3.Text

End With

'Noの加算
Dim i As Long


For i = 1 To 1 Step 1
TextBox3.Value = TextBox3.Value + 1

Next

Call Clearcmb

End Sub

'データベース入力後にコンボボックスを空欄にする
Private Sub Clearcmb()

ComboBox1.Text = ""
ComboBox2.Text = ""
ComboBox3.Text = ""


End Sub

'ユーザーフォームの終了
Private Sub CommandButton5_Click()

Unload UserForm1
End

End Sub

以上よろしくお願い申し上げます。使用機種はWindowsVistaで、
Excel2007です。私はVBA初心者です。

●質問の主旨

WorkSheet(1)(「柴田8月分」)にユーザーフォームを固定的に
表示させつつ、WorkSheet(1)以降のWorkSheet(2)、
WorkSheet(3)、WorkSheet(4)の表を参照しながら
ComboBox1、ComboBox2、ComboBox3にリストを
選択して、データベースに入力したいと考えています。

以下のコードをどのように書き換えれば良いでしょうか?
ご教示のほどよろしくお願い申し上げます。

●質問の補足

現在のコードでは、ComboBox1、ComboBox2、ComboBox3を
それぞれ選択しているとユーザーフォームがそれぞれ
WorkShee...続きを読む

Aベストアンサー

>'ComboBox1をクリックしたときの処理
>'ComboBox2をクリックしたときの処理
それぞれ
Worksheets(xx).Select
Worksheets(xx).Select Replace:=False
この箇所のシート選択を削れば良いです。

それによって他のコード箇所に
Range("A1").Value = ...
など、Rangeの親が指定されていない箇所があれば、
それはActivesheetに対するRangeになってしまいますので
Worksheets(xx).Range("A1")...
..というようにWorksheetから指定するようにしてください。

QExcel UserForm の表示位置

Excel UserForm を選択セルの右下に表示させたいのです。

皆様こんばんわ。
セル選択を(例)B5:F5とし、右クリックでユーザーフォームを表示させているのですが
最後のセルF5の右下にユーザーフォームの左上がくる様な表示方法はあるのでしょうか?

Set Area = Selection
With UserForm1
.StartUpPosition = 0
.Top = 400
.Left = Area.Left + Area.Width
.Show vbModeless
End With

などと行っていますが、エクセル画面の最大表示とそうでない場合とで表示位置が異なってしまいます。
ウィンドウズのエリアとエクセルのエリアで座標が異なるのかなぁと思いつつ。。。
良いアイデア(?)が浮かびません。

良い方法が御座いましたら
皆様、宜しくご教示願います。

Aベストアンサー

#1、#2です。
修正しました。これでたぶんどこのセル範囲でも大丈夫だと思います。
なお画面の右の方だったり下のほうだったりした時にユーザーフォームが切れるのは直していませんので悪しからず。
----------------

Sub test()
Dim x As Long
Dim y As Long
Dim str As String
Dim rng As Range
Dim adr As String

str = Selection.Address
If InStr(str, ":") = 0 Then
adr = str
Else
adr = Mid(str, InStr(str, ":") + 1, Len(str) - InStr(str, ":"))
End If

Set rng = Range(adr).Offset(1, 1)

x = ActiveWindow.PointsToScreenPixelsX(0) * 72 / 96 + rng.Left * ActiveWindow.Zoom / 100
y = ActiveWindow.PointsToScreenPixelsY(0) * 72 / 96 + rng.Top * ActiveWindow.Zoom / 100

Load UserForm1

With UserForm1
.StartUpPosition = 0
.Left = x
.Top = y
End With

UserForm1.Show

End Sub

#1、#2です。
修正しました。これでたぶんどこのセル範囲でも大丈夫だと思います。
なお画面の右の方だったり下のほうだったりした時にユーザーフォームが切れるのは直していませんので悪しからず。
----------------

Sub test()
Dim x As Long
Dim y As Long
Dim str As String
Dim rng As Range
Dim adr As String

str = Selection.Address
If InStr(str, ":") = 0 Then
adr = str
Else
adr = Mid(str, InStr(str, ":") + 1, Len(str) - InStr(st...続きを読む

Qエクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?

エクセルのVBAでユーザーフォームの中に
テキストボックスとラベルがあります。

ラベルの縦幅とテキストボックスの縦幅は
同じです。(文字1行分くらい)

そのテキストボックスの左隣にラベルを置いて、
項目名的なものを表示させたいと思うのですが
ラベルの値が上に寄っているので、垂直方向に
中央揃えさせたいのですが、設定の仕方が
分からず困っています。

ちなみにエクセルはXPで、VBAは詳しくありません。
詳しくないけど調べながらちょっとずついろいろ
作業しています。

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

Aベストアンサー

文字の上下中央設定は、確かにできませんね。
代案ですが、次のような操作はいかがでしょうか。

1.双方を選択した状態でプロパティを表示し、AutuSize の値を True にする。
2.前回のようにコントロールの位置を上下中央で揃える。
3.各コントロールの長さ(幅)や文字サイズを調整する。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QExcelでマクロ実行中に画面を固定する方法

Excelでマクロ(VBA)を実行しているとお考えください。
内容は他のシートのデータを別のシートにコピー&ペーストするとお考えください。
すると、画面がめまぐるしく動きます。
これをとめる方法をご存知の方教えていただければうれしいです。
(以前、やったことがあるんですが、忘れてしまいました)
(また、検索で調べようとしたのですが、どのようなキーワードで検索すればいいのかわかりませんでした(私のキーワードでは見つかりませんでした))
よろしくお願いいたします。

Aベストアンサー

はじめまして.

以下のコマンドでできると思いますよ。

マクロの最初に
Application.ScreenUpdating = False '画面更新抑止
を入れて、

マクロの最後に
Application.ScreenUpdating = True '画面を更新
を入れる。

こんなのでどうでしょう!?
では。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


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

人気Q&Aランキング