前のログ 次のログ

No.4300 RE:ファイルの削除について  投稿者:花ちゃん [02/4/09(火)9:28分]

念のため、WindowsXP でも確認しましたが、ごみ箱に移動しておりました。

そのままいじらずにコピー・アンド・ペーストして削除指定の部分を
Private Sub Command1_Click()
sFileDelete Me, "削除したいファイル名をフルパスで指定"
End Sub

で確認して下さい。
うまくごみ箱に移動していたら、後は応用して自分のアプリに組み込んで下さい。


No.4299 基本中の基本でですみませんが...  投稿者:かず [02/4/09(火)7:05分]

現在、エクセルVBAで苦闘しているんですが、次の処理が良く分かりません。

基本中の基本なのですが、どなたかお助けをm(__)m

処理の内容(住所録の作成)
1.名前をキーにして、同一の名前が入力された場合はメッセージを表示後に上書きするか、キャンセル
2.ワークシートの印刷
3.データの前後の検索
4.データの削除

上記の1.2については何とか解決したのですが、3.4(3に絡んで)の処理が旨くできません。
イメージとしては、前後検索のボタンが押されたら、前後のデータ内容を表示し、
削除ボタンが押されたらその行を削除する といったごく単純なことなのですが...
(エクセルに標準であるフォームとほぼ同一の処理)


以下に作成したコードを記述させていただきます。 読むに耐えないかもしれませんが、 是非回答をお願いします。
'--------------------------------------------------------
Private Sub UserForm_Initialize()

lpos = 1
End Sub

'--------------------------------------------------------
Private Sub 登録_Click()
Dim chk As Integer
lpos = 1

'【チェック】
If 区分.Text = "" Then
区分.Text = 0
End If

chk = 区分.Text
If chk > 1 Then
bun1 = "区分の入力が誤っています。  確認してください"
msgop = MsgBox(bun1, vbYes, "入力エラー")
従業員form.区分.SetFocus
GoTo endmsg
End If


' 【名簿検索】
Do
lpos = lpos + 1 'I行目
celdata = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 2)
If 名前.Text = celdata Then
bun1 = "既にデータが登録されています。  上書きしますか?"
msgop = MsgBox(bun1, vbYesNo, "入力確認")
If msgop = vbNo Then
bun1 = "この従業員のデータを表示しますか?"
msgop = MsgBox(bun1, vbYesNo, "入力確認")
If msgop = vbNo Then
従業員form.名前.SetFocus
GoTo endmsg
Else
名前.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 2)
携帯.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 3)
電話.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 4)
住所.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 5)
生年月日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 6)
入社日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 7)
退職日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 8)
区分.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 9)
従業員form.名前.SetFocus
GoTo endmsg
End If
Else
Exit Do
End If
End If
Loop While celdata <> ""

With Workbooks("従業員データ.xls").Worksheets("名簿")
.Cells(lpos, 2) = 名前.Text
.Cells(lpos, 3) = 携帯.Text
.Cells(lpos, 4) = 電話.Text
.Cells(lpos, 5) = 住所.Text
.Cells(lpos, 6) = 生年月日.Text
.Cells(lpos, 7) = 入社日.Text
.Cells(lpos, 8) = 退職日.Text
.Cells(lpos, 9) = 区分.Text
End With

名前.Text = ""
携帯.Text = ""
電話.Text = ""
住所.Text = ""
生年月日.Text = ""
入社日.Text = ""
退職日.Text = ""
区分.Text = ""
従業員form.名前.SetFocus

endmsg:

End Sub

'--------------------------------------------------------
Private Sub 印刷_Click()

Workbooks("従業員データ.xls").Worksheets("名簿").PrintOut Copies:=1, Collate:=True

End Sub

'--------------------------------------------------------
Private Sub 削除_Click()

Rows(lpos & ":" & lpos).Select
Selection.Delete Shift:=xlUp

End Sub

'--------------------------------------------------------
Private Sub 次検索_Click()

' 【名簿検索】
lpos = lpos + 1 'I行目
If Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 2) <> "" Then
名前.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 2)
携帯.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 3)
電話.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 4)
住所.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 5)
生年月日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 6)
入社日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 7)
退職日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 8)
区分.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 9)
従業員form.名前.SetFocus
Else
lpos = lpos - 1
End If

End Sub

'--------------------------------------------------------
Private Sub 前検索_Click()
' 【名簿検索】
If lpos >= 2 Then
lpos = lpos - 1 'I行目
名前.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 2)
携帯.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 3)
電話.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 4)
住所.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 5)
生年月日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 6)
入社日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 7)
退職日.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 8)
区分.Text = Workbooks("従業員データ.xls").Worksheets("名簿").Cells(lpos, 9)
従業員form.名前.SetFocus
End If
End Sub

'--------------------------------------------------------
Private Sub 終了_Click()

Workbooks("従業員データ.xls").Save
Workbooks("従業員データ.xls").Close
Unload 従業員form

End Sub

No.4298 ファイルの削除について  投稿者:みもり [02/4/09(火)2:26分]

お聞きします。

ファイル操作関係のごみ箱へ移動ってので
ごみ箱へ移動させたいのですが、ごみ箱にもなく削除されます。

'指定方法はお好みで設定して下さい。
MyFlag = FOF_ALLOWUNDO 'ごみ箱へ
MyFlag = MyFlag + FOF_NOCONFIRMATION '確認しない
MyFlag = MyFlag + FOF_MULTIDESTFILES '複数ファイル
MyFlag = MyFlag + FOF_NOERRORUI 'エラーのダイアログを非表示

ここはこのままでよろしいのでしょうか?
なにぶんVB始めたばっかりで悪戦苦闘中です。
いろいろためしてみたんがてんでわかんないです。(T_T)
よろしければ教えてください。

No.4297 re:keybd_event APIについて  投稿者:花ちゃん [02/4/09(火)1:26分]

選択できました。


Private Const VK_SHIFT = &HA0
    ↓

Private Const VK_SHIFT = &H10


No.4296 RE:フレックスグリッドを印刷  投稿者:花ちゃん [02/4/09(火)0:55分]

ここの(左のフレームのメニュー)MSFlexGrid関係をご覧になっていないなら

一度目を通して下さい。

No.4295 re:keybd_event APIについて  投稿者:花ちゃん [02/4/09(火)0:53分]

NAO★さん ありがとうございます。


>私が作ってみたサンプル

試させて頂きました。
やはり、VK_SHIFT がうまく動作しないようですね
行末に移動はするのですが、選択状態にはなりませんね。

No.4294 フレックスグリッドを印刷  投稿者:GARU [02/4/09(火)0:41分]

こんばんは。

フレックスグリッドに表示したデータを表の形のまま印刷する方法はあるでしょうか?
どなたかご教授していただけないでしょうか。

No.4293 re:keybd_event APIについて    投稿者:NAO★ [02/4/09(火)0:11分]

>どうも Win2000以降はVK_SHIFT がうまく動作しないようです。


あ、そうだったんですか。
実はSendInputで試してみたんですが、同じ症状でした。(^^;

>SendInput こちらも色々調べたのですが、私に理解できるように解説しているところが >見あたりませんでした。

http://www.vbapi.com/ref/s/sendinput.html
これがサンプルが載っていてわかりやすかったです。

私が作ってみたサンプル
Private Declare Sub SendInput Lib "user32.dll" _
(ByVal nInputs As Long, ByRef pInputs As INPUT_TYPE, _
ByVal cbsize As Long)
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _ (Destination As Any, Source _
As Any, ByVal Length As Long)
Private Type LPINPUT
wVk As Integer
wScan As Integer
dwFlags As Long
time As Long
dwExtraInfo As Long
End Type
Private Type INPUT_TYPE
dwType As Long
xi(0 To 23) As Byte
End Type
Private Const INPUT_KEYBOARD = 1
Private Const INPUT_MOUSE = 0
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SHIFT = &HA0
Private Const VK_HOME = &H24
Private Const VK_END = &H23
Private Function set_ki(wVk As Integer, wScan As Integer, dwFlags As Long) As LPINPUT
Dim wk As LPINPUT
wk.wVk = wVk
wk.wScan = wScan
wk.dwFlags = dwFlags
wk.dwExtraInfo = 0
wk.time = 0
set_ki = wk
End Function

Private Sub Command1_Click()
Dim wk As LPINPUT
Dim ki(6) As INPUT_TYPE
AppActivate "(無題)(更新) - 秀丸"
DoEvents
wk = set_ki(VK_HOME, 0, 0&)
ki(0).dwType = INPUT_KEYBOARD
CopyMemory ki(0).xi(0), wk, Len(wk)

wk = set_ki(VK_HOME, 0, KEYEVENTF_KEYUP)
ki(2).dwType = INPUT_KEYBOARD
CopyMemory ki(2).xi(0), wk, Len(wk)

wk = set_ki(VK_SHIFT, 0, 0&)
ki(1).dwType = INPUT_KEYBOARD
CopyMemory ki(1).xi(0), wk, Len(wk)

wk = set_ki(VK_END, 0, 0&)
ki(3).dwType = INPUT_KEYBOARD
CopyMemory ki(3).xi(0), wk, Len(wk)

wk = set_ki(VK_END, 0, KEYEVENTF_KEYUP)
ki(4).dwType = INPUT_KEYBOARD
CopyMemory ki(4).xi(0), wk, Len(wk)

wk = set_ki(VK_SHIFT, 0, KEYEVENTF_KEYUP)
ki(5).dwType = INPUT_KEYBOARD
CopyMemory ki(5).xi(0), wk, Len(wk)

Call SendInput(6, ki(0), Len(ki(0)))
End Sub

No.4292 re:keybd_event APIについて  投稿者:花ちゃん [02/4/08(月)23:39分]

ありがとうございます

どうも Win2000以降はVK_SHIFT がうまく動作しないようです。
色々、調べていたら英文のページ変った使い方していたので下記のようにして試してみたら 一応問題なく動作するのですが、この使い方でいいのでしょうか?

Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)

SendInput こちらも色々調べたのですが、私に理解できるように解説しているところが 見あたりませんでした。

No.4291 SQL実行結果をフレックスグリッドに表示する際に、  投稿者:TOMO [02/4/08(月)23:28分]

質問させていただきます。

VB上からSQLを使用してmdbファイル内の値を変更するのですが、
変更した直後にmdbファイルの内容をMSフレックスグリッドに表示するのですが、
mdbファイルの内容は変更されているのですが、グリッド上では変更が反映されません。
10秒ぐらい待ってからグリッドをリフレッシュすると反映されます。

すぐにグリッドに変更を表示したいのですが、何かよい方法はないでしょうか?

No.4290 re:keybd_event APIについて  投稿者:NAO★ [02/4/08(月)22:09分]

うちにはXPはまだないので2000でためしたのですが、やっぱりだめでした。

カーソルは移動しているし、
KEY_UPしているところをコメントアウトするとシフトキーが押された状態のままになるので
動作自体はしているようですが。


いま調べたらNT系のOSでは SendInput を使えって書いてありますね。

No.4289 自作メッセージの作成方法  投稿者:田中美夕 [02/4/08(月)16:49分]

またまたお願いします.

VC++で自作メッセージを作る場合
ヘッダーファイルに
long OnAMessage( WPARAM wParam, LPARAM lParam );
cppファイルに
ON_MESSAGE( WM_USER_RXCOMM, OnAMessage)

OnAMessage関数の中身
long CTestPowerCTRLDlg::OnAMessage( WPARAM wParam, LPARAM lParam )
{
   :
}
という風にします.
VBでも、自作メッセージを作れるのでしょうか?
できるのでしたら、どのようにしたらできるのでしょうか?
お願いします

No.4288 Re: VBが自動で作るプロシージャを他から呼びだせるか  投稿者:とろ [02/4/08(月)16:28分]

全く普通のプロシージャとして扱えます。

しかし、そのような記述を嫌う人もいますし、逆に
普通にイベントプロシージャを Call する人もいます。
『人によりけり』です。

ただ、普通ならば、イベントプロシージャを呼ばずに、
イベントプロシージャで行っている処理を
新しいプロシージャに記述した方が良いと思います。

Private Sub Text1_Change()
Call AAA()
End Sub

Private Sub AAA()
'* 本来 Text1_Change() の中に記述していたコード
End Sub

Private Sub BBB()
'* ここからは Text1_Change() を呼ばない
Call AAA()
End Sub

No.4287 DLLをデバッグしたい  投稿者:わかぷう [02/4/08(月)16:13分]

VBで作成したDLLをMS-Accessで使用しています。

MS-Accessのプログラムをデバッグしながら、DLLもデバッグしたいのですが、
方法はありますか?
同様に、VBからもそのDLLのデバッグを行うことは出来ますか?

No.4286 VBが自動で作るプロシージャを他から呼びだせるか  投稿者:kiiya [02/4/08(月)16:03分]

Private Sub Text1_Change()

End Sub
等、VBが自動で作ってくれるプロシージャを別のプロシージャの中から
CAll Text1_Change() のように使うのは間違った使い方でしょうか?
問題なく動いているようですが気になります。ご指導のほどお願いします。

No.4285 RichTextBoxでIMEをONにしたい  投稿者:kiiya [02/4/08(月)15:44分]

TextBoxをRichTextBoxに変えたところ、IMEmodeというプロパティにがみあたりません。

RichTextBoxにfocusが移ったときIMEをONにしたいのですが、
どのようにすれば可能でしょうか?

No.4284 keybd_event APIについて  投稿者:花ちゃん [02/4/08(月)15:43分]

Private Declare Sub keybd_event Lib "user32.dll" _

(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SHIFT = &H10
Private Const VK_HOME = &H24
Private Const VK_END = &H23
Private Sub Command1_Click()
AppActivate "無題 - メモ帳"
DoEvents
Call keybd_event(VK_HOME, 0, 0&, 0&)
Call keybd_event(VK_HOME, 0, KEYEVENTF_KEYUP, 0&)
Call keybd_event(VK_SHIFT, 0, 0&, 0&)
Call keybd_event(VK_END, 0, 0&, 0&)
Call keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0&)
Call keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0&)
End Sub

上記の状態で Win98(VB6.0) では 1行選択状態になるのですが
WinXP(VB6.0) ではなぜか選択状態にはなりません。
WinXP ではどこか違うのでしょうか?
SendKeys ステートメントに換わるものをと思って作っているのですが。
ご存知の方、又は他の方法でいい方法がありましたら教えて下さい。


No.4283 Re: VBのSQLでアクセスのテーブルを作成したりでき  投稿者:とろ [02/4/08(月)14:38分]

> テーブルを作成したり、削除したりすることはVB6.0の

> SQLでは可能なのでしょうか?

多少、データベースの種類によって、
キーワードや予約語などは変わりますが、
基本的に SQL ですべてできます。

テーブル作成は
create table TABLE1 ( FIELD1 DATATYPE1 [, FIELD2 DATATYPE2] )
こんな感じの SQL 文。
テーブルの削除は
drop table TABLE1
こんな感じの SQL 文。

No.4282 VBのSQLでアクセスのテーブルを作成したりできますか?  投稿者:ami [02/4/08(月)14:34分]

現在VB6.0SP5

を使用してアクセス2000にADOを使用して接続しております。
アクセス2000は、テーブル作成クエリとか、テーブル削除クエリ
とかありますが、VB6.0でSQLのSERECT文はできるのですが、
上記で述べたテーブルを作成したり、削除したりすることはVB6.0の
SQLでは可能なのでしょうか?
ご教授おねがいします。

No.4281 Re: No.2394 PDFWriterでPDFファイルに書き足し  投稿者:miko [02/4/08(月)11:34分]

mikoです。


随分と古い発言へのコメントになりますが、調べごとをしてたら、
こちらのページにたどり着いたので。

> ACCESS2000で帳票をPDFWriterでPDFにする処理を作っていますが、
> 複数種類の帳票をキーごとに1つのPDFファイルにまとめたいんですが可能でしょうか?
> いろんな過去ログを参照してもSDKのページを参照してもわかりません。

との内容でしたが。
Adobeのページに、2002/01/04付けで、
Issue:How do I insert pages using Visual Basic?

http://support.adobe.com/devsup/devsup.nsf/docs/51009.htm
というページが追加されており、こちらのサンプルコードで、対応可能です。
(PDFWriterで、とはいきませんが。)
以上

No.4280 変数宣言について  投稿者:美夕 [02/4/08(月)11:25分]

うーん Publicで宣言すればよかったのね(w

カキコする場合、もう少し調べてからすればよかった(w

変数宣言について  投稿者:美夕 [02/4/08(月)11:12分]

こんにちは、

モジュール内に変数を宣言すれば、そのすべてのモジュール内で有効ということで
Dim ModeIndex As Long

と宣言し、あるボタンAでModeIndexの値を変えて
その値を他の関数内で使うというようにしたのですが、
どうも、値を変えてもその関数内のみでしか値が変わらないです(TT

宣言方法間違っているのでしょうか?
だれかお願いします.

No.4279 チェックボックスについて  投稿者:アンパンマン [02/4/08(月)9:57分]

NAOさんいつもありがとうございます。

おかげさまで、うまく出来ました。

No.4278 RE:ACCESS2000とWindowsXpの相性  投稿者:NAO★ [02/4/07(日)22:39分]

>2、ネットワークで使えない。

だけ。

他のコンピューターから「ネットワークコンピューター」(「マイネットワーク」)、
あるいは「エクスプローラー」から、そのコンピューターにアクセスできますか?

アクセスしたときユーザー名とパスワードを聞くダイアログボックスが表示されませんか?

No.4277 ACCESS2000とWindowsXpの相性  投稿者:小黒 [02/4/07(日)18:53分]

長らくAccessを使っています。

このたびAccess2000をWindowsXpにインストールして使ったら次の異常がみられ
解決できなくて困ってます。
 どなたか解決方法など心当たりがありましたら教えてください。

 1、データベースが不安定。
   他の環境で造ったものを起動すると「最適化」をしないと使えません。
   イベントプロシージャが無視されたりして、やがて壊れてしまいました。
   何度か繰り返してだましだまし使ってます。
   フォームやテーブルのインポートをするとこの現象が顕著です。
 2、ネットワークで使えない。
   他機からネットワークで開こうとすると「開くことができない・・・」みたいなメッセージで
   開けません。
    もちろん共有、フルアクセス、データベースも共有の設定済み
 同データベースは、WindowsMeなど他のバージョンOsでは問題なく作動してます。
 MicroSoftのサポートでもラチがあきません。
 突然ですいませんがよろしくお願いいたします。
 

No.4276 チェックボックスについて  投稿者:NAO★ [02/4/06(土)21:41分]

いろいろやり方は在るだろうけれど1例として…


Checksql = " WHERE"
・もしもCheck1がチェックされているときは
変数Checksql に 文字列" テーブル3=100"を加える
・もしもCheck2がチェックされているとき、
もしも変数Checksqlが7文字以上なら
変数Checksqlに 文字列" OR" を加える
変数Checksql に 文字列" テーブル3=200"を加える
・もしもCheck3がチェックされているとき、
もしも変数Checksqlが7文字以上なら
変数Checksqlに 文字列" OR" を加える
変数Checksql に 文字列" テーブル3=300"を加える

これで全部にチェックが入っていたときはChecksqlに
" WHERE テーブル3=100 OR テーブル3=200 OR テーブル3=300"
となればOKです。

ちなみOR使わずに
"WHERE テーブル3 IN (100,200,300)"
と書く方法もあります(こっちのほうがパフォーマンスも良い?)
加えて、テーブル3の値には0という値が絶対無いなら、
次のようにifを使わずに書くこともできます。
Checksql = " WHERE テーブル3 IN (" _
& str(100 * Check1.Value) & "," _
& str(200 * Check2.Value) & "," _
& str(300 * Check3.Value) & ")"

結果例(Check2のみチェック)
"WHERE テーブル3 IN (0,200,0)"
(0というデータは無い(という条件)ので200のデータしかマッチしない)

No.4275 RE:テキストボックスに入力するものについて  投稿者:花ちゃん [02/4/06(土)19:35分]

ここの逆引きヘルプの[数字しか入力できないように制限する]を見て下さい。

何種類かありますのでお好みをどうぞ

No.4274 テキストボックスに入力するものについて  投稿者:田中美夕 [02/4/06(土)19:12分]

ここ毎日カキコしまくっているみゆです(w

また、基本的なことなんですが
テキストボックスについてなんですが

入力文字を数値のみ入れることはできないのでしょうか?

No.4273 チェックボックスについて  投稿者:アンパンマン [02/4/06(土)17:14分]

NAOさんお返事ありがとうございました。

>単発の条件判断を3回やるだけですが
今まで考えましたが、いまいちよくわかりません。
ヘルプを見てもわかりません。
わかりすくお願いします。
わがまま言ってすみませんm(__)m

No.4272 RE:一般的にADODCを使ってもよろしいでしょうか?  投稿者:NAO★ [02/4/06(土)16:53分]

>ADODCなどのVisualコンポーネントを使用して、プロパティで設定しても

>よろしいのでしょうか?

全然大丈夫です。使えるものはなんでも使うべきでしょう。

>一般的にしっかりした会社などではどのように作成しているのか?

意外に一般の会社だと、制約がきつくて
いまだにWindows95で、VB4とか使わなくちゃいけなかったりして
新しい技術に取り残されているところ、多いようです。
(特に古いプログラムを引きずっているところは…)

No.4271 RE:チェックボックスについて  投稿者:NAO★ [02/4/06(土)13:39分]

どちらの質問も条件判定の OR について理解されると良いでしょう

厳密には最初の質問はORじゃなくて、単発の条件判断を3回やるだけですが…

これでヒントになりますか?

No.4270 RE:SQLについて  投稿者:NAO★ [02/4/06(土)12:32分]

こういう場合、作成した文字列をdebug.print などで表示させればすぐ分かります。


"WHERE〜" の前に空白がない為、テーブル名とくっついてしまっているのが
原因だと思います。
"〜 FROM テーブル名WHERE 〜"

No.4269 チェックボックスについて  投稿者:アンパンマン [02/4/06(土)12:20分]

今度は困っています。

Check1〜Check3までフォーム上にあり、
Check1がチェックされている時は、100の物を、
Check2がチェックされている時は、200の物を、
Check3がチェックされている時は、300の物を、
表示させたいのですが、
If文で作ったら、Check1、Check2にチェックが入っている時、
100の物しか表示されません。2つ以上チェックされた場合、
やはり地道に
If Check1.Value = vbChecked And Check2.Value = vbuncheked And Check3・・Then
と書いていくしか方法は無いでしょうか?

後、WHEREで100と200を両方抽出するにはどう書けばいいでしょうか?
初歩的な質問でゴメンナサイ。

No.4268 SQLについて  投稿者:アンパンマン [02/4/06(土)11:36分]

いつも拝見しています。

SQL文についての質問です。

Dim sql As String
Dim Checksql As String

sql = "SELECT フィールド1,フィールド2 FROM テーブル名"
Checksql = "WHERE テーブル3=100"

If Check1.Value = vbChecked Then
Data1.RecordSource = sql & Checksql
Data1.Refresh
End If

Check1にチェックが入っている時、テーブル3が100の物だけを表示させたいのですが、
上記の様に書くと「FROM句の構文エラーです」と表示され、
Data1.Refreshの所で止まってしまいます。
普通に
Data1.RecordSource = "SELECT フィールド1,フィールド2 FROM テーブル名" & _
"WHERE テーブル3=100"
こう書くとうまく行きます。&の所が違うのでしょうか?
困ってはいないですが、気になるので教えてください。

No.4267 一般的にADODCを使ってもよろしいでしょうか?  投稿者:キッチン窓 [02/4/06(土)11:10分]

はじめまして、VB初心者ですが誰か教えてください。


VB6とACCESS2000でデータベースプログラミングをする際に
コードで接続、処理をするのが一般的なのでしょうか?
ADODCなどのVisualコンポーネントを使用して、プロパティで設定しても
よろしいのでしょうか?

一般的にしっかりした会社などではどのように作成しているのか?
教えていただけましたらありがたいです。

初心者的な質問ですがよろしくお願いいたします。

No.4266 Re:OptionButtonについて  投稿者:ゆう(U) [02/4/06(土)9:57分]

●タイトルは内容を意味する物で、HNは書かないで下さい。


> というやり方になるのでしょうか?BASICについて、全くわからなくてすみません
コードの中身を理解するには、ヘルプで調べれば簡単に
わかりますよ・・・

問題があれば、エラーなり期待する動作になりませんから
直ぐにわかるので実際に動作を確認すると良いです。


別の方法なら・・・

サンプル)
Dim myControl As Control
For Each myControl In Me.Controls
If StrComp(TypeName(myControl), "OptionButton", vbTextCompare) = 0 Then
With myControl
If .Value Then
.Container.Tag = CStr(.Index) & "," & .Name
End If
End With
End If
Next

※フォームのControlsコレクションから
 オプションボタンを検出する

If TypeOf myControl Is OptionButton Then
 でも比較は可能です


当然ですが・・・
1コンテナーに複数のOptionがありそのIndexが同じ場合、
Indexだけでは識別不能です。

※Indexは Val([コンテナー].Tag)
 コントロール名は ,以降
 (SplitやInstrで,の前後で分けられます)


このコードではオプションボタンは必ずコントロール配列
でなければIndexを参照した時点で実行時エラーが発生
します。

No.4265 ゆう(U)様へ  投稿者:田中美夕 [02/4/05(金)18:55分]

ゆう(U)様

Optionボタンの件なんですが
以下のような方法ありがとうございます。
やってみたところ、”おお”っていう気持ちになりました。
Private Sub Form_Load()
Dim myOption As OptionButton
For Each myOption In Option1
With myOption
If .Value Then
.Container.Tag = .Index
' Exit For '複数コンテナーを考慮して
End If
End With
Next
End Sub

ここでOption2についても、同様にする場合
For Each myOption In Option1
With myOption
If .Value Then
.Container.Tag = .Index
End If
End With
Next

For Each myOption In Option2
With myOption
If .Value Then
.Container.Tag = .Index
End If
End With
Next
というやり方になるのでしょうか?BASICについて、全くわからなくてすみません

No.4264 VCとVBの型ちがい  投稿者:田中美夕 [02/4/05(金)18:31分]

なんどもカキコしてすみません(汗

表題の件なんですが
http://homepage1.nifty.com/susho/windoze/datatype.html
でみつかり
unsigned shortの場合Integer
だということがわかりました♪
おさがわせいたしました

No.4263 ありがとうございます  投稿者:田中美夕 [02/4/05(金)18:07分]

NAO★様、ゆう(U)様、とろ様ありがとうございました.


して欲しい動作になりました(^^
>String型はchar * みたいなものですから
>unsigned char は byte型の方がいいですよ
>unsigned を要求している項目が多いので注意が必要かも

なるほど、それでデータがおくられていなかったんだー
あとunsigned short* の場合何型がいいのですか?
Byte,Longをやってみたが、値がずれていったんです(TT
CとBasicのデータの違いが載っているサイトなんかご存知でしょうか?
おねがいさいます

No.4262 RE:RE:ポインターの受け渡しの方法  投稿者:NAO★ [02/4/05(金)17:25分]

追加です

Declare 宣言で ByVal syncclock As Long と指定しているところがありますが
ポインターを渡すなら ByRef syncclock As Long にしないとダメだと思います

No.4261 画面内での変更の有無  投稿者:vb [02/4/05(金)17:14分]

VBで、ユーザーが画面上で設定した内容をファイルへ保存できるようなものがあるのですが、

セーブ後に設定を変更して、その変更後の内容をセーブせずに画面を閉じようとした時に、
セーブされていないことを通知するメッセージを表示させたいのですが、
セーブ後に設定が変更されたかどうかを判断する方法として、何かいい方法はないでしょうか?

変な質問かもしれませんが、どなたかご教授いただけると助かります。
よろしくお願い致します。

No.4260 RE:ポインターの受け渡しの方法  投稿者:NAO★ [02/4/05(金)17:05分]

VBには変数のアドレスを返す

StrPtr(prt as string)
VarPtr(ptr as any)
という非公開関数があります。

VarPtr を使っておけばいいです。

ところでVC++とVBでは型のサイズが違うのでご注意を!
String型はchar * みたいなものですから
unsigned char は byte型の方がいいですよ

unsigned を要求している項目が多いので注意が必要かも

No.4259 Re:OptionButtonについて  投稿者:ゆう(U) [02/4/05(金)17:04分]

こんな方法もあります


実行中オプションボタンのコンテナーにIndexを
保存しておく。

サンプル)
オプションボタン数個(Option1/Indexは欠番OK)
コンテナー用コントロール(なしでもOK)
※同じOpton1でも複数のコンテナーに入れる事で
 グループ分けが可能なので・・・
 そんなわかりづらい設計は普通しませんけど

Indexの参照は・・・
'コンテナーコントロール(フォームでもOK)を指定するだけですが・・・
'今回は最初のOption1のコンテナーでグループ化されている
'オプションボタンのIndexを表示します
With Option1.Item(Option1.LBound).Container
If IsNumeric(.Tag) Then
'文字列で保存しているのでそのまま参照可能ですが・・・
MsgBox CStr(Clng(.Tag)) & "が選択されています"
Else
'デフォルトを指定していれば必要ありません
MsgBox "選択されていません"
End If
End With
※これによりコンテナーのTagは他では使えません、
 まぁフォームレベルの変数でもOKですけど…

'ここ以下でコンテナーTagにIndexを入れています
Private Sub Form_Load()
Dim myOption As OptionButton

For Each myOption In Option1
With myOption
If .Value Then
.Container.Tag = .Index
' Exit For '複数コンテナーを考慮して
End If
End With
Next
End Sub
Private Sub Option1_Click(Index As Integer)
Option1.Item(Index).Container.Tag = Index
End Sub

※べた打ちなので若干の打ち間違いがあるかも

No.4258 Re: ポインターの受け渡しの方法  投稿者:とろ [02/4/05(金)16:56分]

VC++ の方は分かりませんが、

DLL の関数に配列を引数として渡す時は、
配列の先頭要素を渡せば良いと思います。
だからこんな感じでは?
moduledll_setLCDData1 0, 1, j(0), 1, 1, 1

No.4257 ポインターの受け渡しの方法  投稿者:田中美夕 [02/4/05(金)16:09分]

連続なんですが

VBでは、ポインターの受け渡しの方法が見つからないのですが?
方法はないのでしょうか?

現在VC++では次の方法で行なっていました.
//////////
void CModuleSendDlg::OnSendModuleData()
{
unsigned char mode;
unsigned char vsync = 0, hsync = 0, hblank = 0;
unsigned short* sync = new unsigned short[3];
sync[0]=(unsigned short)m_thd;
sync[1]=(unsigned short)m_thp;
sync[2]=(unsigned short)m_ths;
mode = m_dual;
vsync=m_vsync;
hsync=m_hsync;
hblank=m_blank;
int ret,q;
CString error;
moduledll_setLCDData1(mode,m_clock,sync,vsync,hsync,hblank);
delete [] sync;
}
//////
moduledll_setLCDData1( unsigned char mode, double vclock, _
     unsigned short* syncclock, unsigned char vsync, _
      unsigned char hsync, unsigned char hblank );


//////
*moduledll_setLCDData1はVC++で作成したDLLです.
VBで
標準モジュールで
Declare Function moduledll_setLCDData1 Lib "MODULEDLL.dll" (ByVal mode As Long, _
    ByVal vclock As Double, ByVal syncclock As Long, ByVal vsync As String, _
    ByVal hsync As String, ByVal hblank As String) As Long

と宣言してます.
あとは、VC++で行なったようにして
やりたいのですが、今
Dim j(3) As String
j(0) = 5
j(1) = 5
j(2) = 5
moduledll_setLCDData1 0, 1, j, 1, 1, 1
とやってみたのですが
exeを作成するときjの型が一致しないというエラーがでます.
VC++でできたことをVBではどのようにしたら解決できるでしょうか?
お願いします


No.4256 とろ様へ  投稿者:田中美夕 [02/4/05(金)14:49分]

とろ様ありがとうございます

やっぱ。FOR文になるか(w


No.4255 RE:OptionButtonについて  投稿者:NAO★ [02/4/05(金)14:49分]

JavaScript のオプションボタンの SelectedIndex のようなプロパティはないので

ループでValue が True(選択されている)になっているかひとつひとつ
調べる必要があります。

オプションボタンではなくてListBoxコントロールには
選択されている行を教えてくれるListIndex というプロパティがあるので楽です。
オプションボタンの数が多いとかなら、こちらの使用を検討してみてもいいでしょう。

Private Sub Form_Load()
Dim i As Integer
For i = 0 To 9
List1.AddItem "item" & Str(i)
Next
End Sub
Private Sub Command1_Click()
Debug.Print List1.ListIndex & "が選択されています"
End Sub

No.4254 Re: OptionButtonについて  投稿者:とろ [02/4/05(金)14:28分]

> オプションボタンをクリックすれば

> Private Sub Option1_Click(Index As Integer)
> 関数ができ、Indexを取得できるようだが・・・
> 私は、別のボタンで取得したいのです.
> わかりにくいかもいれませんが、だれか教えてください

別のプロシージャから Index の値を
取得したいっていうことですよね?

そのプロシージャの中で、
Dim i As Integer
For i = Option1.LBound To Option1.UBound
If Option1(i).Value = True Then
MsgBox i
End If
Next i
という風に、ループでチェックされているか
どうかを調べるしかありません。

No.4253 OptionButtonについて  投稿者:田中美夕 [02/4/05(金)14:00分]

はじめまして、VB6.0の初心者です

今オプションボタンの使い方について勉強してます。

オプションボタンをいくつか用意して
あるコマンドボタンを押して
現在選択しているオプションボタンによって
値を表示させるのですが、
Select Case True
Case Option1
MgsBox 0
Case Option2
MsgBox 1
    :
  Case Option5
MsgBox 6
End Select
としてます.
ここで、Optionボタンを配列にすれば、オプションボタンのIndex
の情報を表示できるかなと思い、やってみました.
オプションボタンを1つ用意し
それをコピーし貼りつければできるみたいなので
用意してみました.
そして、このオプションボタンの押されているIndexを取得すれば
できるだろうと思いましたが、どうしたらIndexを取得できるかが
わかりません、どうしたらできるのでしょうか?


オプションボタンをクリックすれば
Private Sub Option1_Click(Index As Integer)
関数ができ、Indexを取得できるようだが・・・
私は、別のボタンで取得したいのです.
わかりにくいかもいれませんが、だれか教えてください


No.4252 ありがとう  投稿者:アンパンマン [02/4/05(金)10:12分]

NAOさん、ありがとうございました。

解決しました。
これからもよろしくお願いします。

No.4251 ファイルの重複たちあがりをふせぐ  投稿者:優 [02/4/05(金)10:09分]

こんにちは。


ファイルを閉じるとそれを合図にまた違ったファイルを開くようにしたいのとフォームを
ロードしたときに同じプログラム(たとえばエクスプローラー)などが立ち上がっていたときに
複数たちあがらないようにするにはどうしたらよろしいですか?

どなたかよろしくお願いします。

前のログ 次のログ


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0