前のログ 次のログ

No.2000 RE:TABキーイベント取得    投稿者:匿名 [01/4/04(水)17:48分]

keyDownイベントのvbKeyTabで認識すると思うのですが・・・

TabStopをFalseにする必要があるかもしれませんが。。

No.1999 TABキーイベント取得  投稿者:とみとみ [01/4/04(水)15:38分]

コンボボックス上でTABキーが押された場合にTABキーが押された事を認識し

任意の場所にフォーカスを移動したいのですが、
KeyDownイベントだとTABキーイベントは取得できないとの事で
上記処理を実現できる方法がありましたら教えて下さい。

No.1998 RE:ListViewについて  投稿者:MIZO [01/4/04(水)12:37分]


ListView.ListItems.Clear
ですね。

No.1997 ListViewについて  投稿者:匿名希望 [01/4/04(水)11:16分]

listViewについて質問があります。リストボックスのClearの様に

表示してあるデータを削除したいときlistViewではどうすれば良いのでしょうか?

No.1996 RE:フォルダー選択ダイアログボックス  投稿者:KGEN [01/4/04(水)9:28分]

今回匿名 さん、ありがとうございます。

参考になりました。

No.1995 外字辞書の取り扱い  投稿者:JA [01/4/03(火)22:59分]

VBで作成したプログラムを実行中で、

漢字入力で外字を取り扱いたいときの方法が全くわかりません。
FEPはatok11を使っています。
できれば、FDの中に外字辞書を置きたいのですが...
よろしくお願いします!

No.1994 RE:RichTextBoxの現在桁の取得について  投稿者:花ちゃん [01/4/03(火)16:55分]

APIも見たのですがバイト単位の取得はできるようですが?
文字数単位での取得のよい方法は見当たりませんでした。
(私が知らないだけ)

そこで事前の改行位置を調べ、その行の先頭位置が何文字目かを割り出し取得しました。 いい方法が見つかるまでの暫定処置にでもお使いください。

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINEFROMCHAR = &HC9


Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim MaxRow As Long
Dim PosRow As Long
Dim PosCol As Long
Dim lngCounter As Long
Dim lngGyoStart As Long

MaxRow = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&)
PosRow = SendMessage(Text1.hwnd, EM_LINEFROMCHAR, -1&, 0&)
'PosCol = Text1.SelStart - SendMessage(Text1.hwnd, _
EM_LINEINDEX, PosRow, 0)

For lngCounter = Text1.SelStart To 1 Step -1
If Mid$(Text1.Text, lngCounter, 1) = vbCr Then
lngGyoStart = lngCounter + 1
Exit For
End If
Next lngCounter
PosCol = Text1.SelStart - lngGyoStart

Debug.Print "総行数 : " & MaxRow _
& " 現在行 : " & PosRow + 1 _
& " 文字位置 : " & PosCol
End Sub

'過去のログ No.366 RE:エディターを作りたいのです  投稿者:たくボン [99/4/29(木)3:15分] を一部変更したものです。

Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim MaxRow As Long
Dim PosRow As Long
Dim PosCol As Long
Dim lngCounter As Long
Dim lngGyoStart As Long
MaxRow = SendMessage(RichTextBox1.hwnd, EM_GETLINECOUNT, 0&, 0&)
PosRow = SendMessage(RichTextBox1.hwnd, EM_LINEFROMCHAR, -1&, 0&)

'バイト単位での取得
'PosCol = LenB(StrConv(Left$(RichTextBox1.Text, RichTextBox1.SelStart), _
vbFromUnicode)) - SendMessage(RichTextBox1.hwnd, _
EM_LINEINDEX, PosRow, 0)



'事前の改行位置から行の先頭の文字数を割り出している
For lngCounter = RichTextBox1.SelStart To 1 Step -1
If Mid$(RichTextBox1.Text, lngCounter, 1) = vbCr Then
lngGyoStart = lngCounter + 1
Exit For
End If
Next lngCounter
PosCol = RichTextBox1.SelStart - lngGyoStart


Debug.Print "総行数 : " & MaxRow _
& " 現在行 : " & PosRow + 1 _
& " 文字位置 : " & PosCol
End Sub


No.1993 RE:フォルダー選択ダイアログボックス    投稿者:今回匿名 [01/4/03(火)4:53分]

> フォルダー選択ダイアログボックス(SHBrowseForFolderを使用)で、

> @ 選択したフォルダーに指定したファイルが無い時は「OK」ボタンを押せなくしたい。
>  (例えば、指定したフォルダーに「JPG」拡張子のファイルが無かったらボタンが押せない)
> A 表示した時に、指定したフォルダーになっていて欲しい。

(1),(2)共、コールバック関数(BrowseCallbackProc等)を使用すれば可能と思います。

(1)の場合、コールバック関数内でBFFM_SELCHANGEDメッセージを捕らえ、SHGetPathFromIDList()
APIで選択フォルダーのパス名を取得し、Dir関数で指定ファイルの有無を調べて、BFFM_ENABLEOK
をSendMessage()すれば、[OK]ボタンを有効/無効に設定できます。

(2)の場合は、Web検索すればサンプルが見つかります。例えば、
http://plaza5.mbn.or.jp/~heropa/vba.htm
 Visual Basic Tips - ドライブ・フォルダー・ファイル - フォルダーの選択ダイアログ

No.1992 ダウンロードについて  投稿者:ユタカ [01/4/03(火)1:25分]

はじめまして。

なんか Visual Basic 6.0 体験版がダウンロードできるって聞いたんですけど、
いったいどこでやったらいいんでしょうか?
もし知ってたらぜひ教えてください。

No.1991 フォルダー選択ダイアログボックス  投稿者:KGEN [01/4/02(月)21:44分]

フォルダー選択ダイアログボックス(SHBrowseForFolderを使用)で、

@ 選択したフォルダーに指定したファイルが無い時は「OK」ボタンを押せなくしたい。
 (例えば、指定したフォルダーに「JPG」拡張子のファイルが無かったらボタンが押せない)
A 表示した時に、指定したフォルダーになっていて欲しい。

どのようにすればよろしいのでしょうか?
(Win98・VB6-SP3です。)

宜しくお願いします。

No.1990 RichTextBoxの現在桁の取得について  投稿者:コバヤシ [01/4/02(月)17:35分]

はじめまして。

ちょっと教えていただきたいことがあります。

「リッチ・テキストボックス内の総行数・現在行・現在桁の取得」のやり方で
現在桁の取得を行いたいのですが、文字が半角ならうまく動くのですが
全角文字が入っていると、入った分だけずれてしまいます。
(バイト計算されているからでしょうか?)

何かうまい方法がありましたら、教えていただけますでしょうか?
宜しくお願いいたします。

No.1989 BOFとEOF  投稿者:ちびびん [01/4/02(月)14:29分]

BOFとEOFプロパティの意味と違いを教えていただきたいです。

No.1988  RE:コンボボックスの制御について  投稿者:ゴン [01/4/02(月)11:23分]

無事解決しました。

No.1987 コンボボックスの制御について  投稿者:ゴン [01/4/02(月)10:59分]

テキストボックスのようにコンボボックスにもMaxLengthを

つけたいのですが、どのように制御したらよいでしょうか?

No.1986 プリンター切替器のデータ送信方法  投稿者:若杉 [01/4/02(月)10:45分]

はじめまして、若杉と申します。


現在、プリンター切替器の切替で、
Shell "command.com /c echo *** >PRN
とコーディングしているのですが、普通は動作するのですが
ある特定の処理をすると落ちてしまいます。

なのでechoを使用しないで作成したいのですが、どのようにすれば宜しいでしょうか?
宜しくお願い致します。m(__)m

No.1985 RE:Excelで印刷したい  投稿者:花ちゃん [01/3/30(金)9:05分]

ここのHPの逆引きヘルプ一覧の中の ”エクセル******” を参考にして下さい。


No.1984 RE:Excelで印刷したい    投稿者:旦那 [01/3/30(金)9:03分]

よければどうぞ。但し、変数の宣言などは、省略しているので適当に。

これが、正しいのかわかりませんが、印刷は出来ます。

Set oleExcel = GetObject(, "Excel.Application")
If Err.Number <> 0 Then 'Excelが起動されていない
Set oleExcel = CreateObject("Excel.Application")
End If

'シート名
strSheetName = "sheet1"
strFileName = "c:\a.xls"
'ブックを開く
oleExcel.Workbooks.Open FileName:=strFileName
'シート1をカレントにする
oleExcel.ActiveWorkbook.Sheets(strSheetName).Activate
'印刷
oleExcel.ActiveWorkbook.Sheets(strSheetName).PrintOut

No.1983 テキストファイルの読込について  投稿者:重蔵 [01/3/29(木)17:12分]

 初めて投稿させて頂きます初心者です。

ADOを使ってテキストファイルを読込む事はできたのですが、ヘッダーが本当はないのに
あるものとして読込んでいるので、一行目を読込む事ができません。
ヘッダーがない時のテキストファイルの読込み方法がわかりません。
どなたかヒントを頂けないでしょうか?

No.1982 Re:ダブルクォーテーションを含む文字列  投稿者:ゆう(U) [01/3/29(木)12:16分]

完全に解決されているみたいですが・・・


Split関数(VB6.0)が無くともOKなコードです・・・
※VB4.0/VB5.0でも動作するはずです
 VB4.0では動作確認してませんが・・・

myCharを""とすると、Split的に動作します。

'==========================================================
'文字列をセパレーターで区切り配列にする関数 (Split代用関数:拡張版)
'==========================================================
' result = fSplit2(myString, [mySeparator], [myChar], [myCompare])
' 引数 myString :元の文字列
'    mySeparator:区切り文字(省略可:,)
'    myChr :文字列引用符(省略可:")
'    myCompare :比較モード(省略可:バイナリ モード)
' 戻値 result :切出した文字列(バリアント配列)
'     :エラー時(Empty)
'----------------------------------------------------------
'サンプル)
'Dim varArray As Variant
'Dim varTemp As Variant
'Dim strTemp As String
'
'strTemp = "123,456,""123,456"",""ABC"""
'varArray = fSplit2(strTemp, ",") ' 実際には「,」は半角です
'
'Debug.Print UBound(varArray) - LBound(varArray) + 1
'For Each varTemp In varArray
' Debug.Print varTemp
'Next varTemp
'' 通常の For〜Next でもOK
'' Dim i As Long
'' For i = LBound(varArray) To UBound(varArray)
'' Debug.Print varArray(i)
'' Next i
'結果)
' 4 ←区切られた項目数
'123 ←第1項目
'456 ←第2項目
'"1234,567"←第3項目
'"ABC" ←第4項目
'注意)
'文字列引用符と区切り文字の関係に注意して下さい。
'"123,456,""ABC,EFG""H,IJK"
' ^こんなのに注意ってこと(普通はないけど)
'----------------------------------------------------------
Public Function fSplit2(ByRef myString As String, _
Optional ByRef mySeparator _
As String = ",", _
Optional ByVal myChar _
As String = """", _
Optional ByVal myCompare _
As VbCompareMethod = vbBinaryCompare) As Variant
Dim strArray() As String
Dim lngLength As Long
Dim lngArrayCount As Long
Dim i As Long, j As Long, k As Long

On Error GoTo FUNCTION_ERR

j = 1&
lngLength = Len(mySeparator)
i = InStr(j, myString, mySeparator, myCompare)
k = InStr(j, myString, myChar, myCompare)
Do While i > 0&
If k = 0 Then
k = Len(myString)
End If
If k < i - 1& Then
k = InStr(k + 1&, myString, myChar, myCompare)
i = InStr(k + 1&, myString, mySeparator, myCompare)
Else
ReDim Preserve strArray(lngArrayCount)
strArray(lngArrayCount) = Mid$(myString, j, i - j)
lngArrayCount = lngArrayCount + 1&
j = i + lngLength
i = InStr(j, myString, mySeparator, myCompare)
k = InStr(j, myString, myChar, myCompare)
End If
Loop
ReDim Preserve strArray(lngArrayCount)
strArray(lngArrayCount) = Mid$(myString, j, Len(myString) - j + 1&)

fSplit2 = strArray
Exit Function

FUNCTION_ERR:
'エラー発生
'Emptyのまま(TypeName(戻り値)="Empty"で判定可能)
End Function


標準モジュールに貼り付けておけば・・・イミディエイトウィンドウで
動作確認が出来ます。

? fSplit2("123,456,""ABC,EFG""H,IJK", ",", "")(2)
普通のSplit的動作

? fSplit2("123,456,""ABC,EFG""H"",IJK", ",")(2)
Split関数拡張版

No.1981 Excelで印刷したい  投稿者:佐藤 慎二 [01/3/29(木)12:03分]

VBからExcelを起動し、データをExcelへ渡すことはできるのですが、データを渡した後に

自動的に印刷するようにしたいのですが、どのようなコードを書けばいいのか良くわかりません。
このようなケースでわかる方いましたら、教えてください.

No.1980 Setup.exeについて  投稿者:旦那 [01/3/29(木)9:43分]

初めまして、旦那と申します。

初歩的な質問で、申し訳ないのですが、例えばWindowsNT4SP6aで、 作成したSetup.exeをWindows98などにインストールしても
良いのでしょうか?一応、OSやSPのインストール順序などは、正しいと仮定します。
以上、よろしくお願いします。

No.1979 お礼  投稿者:Tとーちゃん [01/3/28(水)16:13分]

gtkさん

 早々の返答、本当にどうもありがとうございました。
 早速、実行したところ、うまく作動しました。
 とりあえず、これで進めて見ます。
 
 また、何かあったら、よろしくお願いします。

No.1978 RE:MDIFormのポップアップメニューについて  投稿者:gtk [01/3/28(水)15:48分]

前回の書きこみで説明不足がありました。

fMainFormは親フォームのオブジェクト変数です。
多分もうお気づきかと思いますが、親フォームでも親フォームの名前で直接参照すると、 実行時エラーが出てしまいます。
下記のように、親フォームのオブジェクトを変数にセットして参照してください。

<標準モジュールの宣言部分>
Public fMainForm As frmMain '("frmMain"は親フォームの名前)
<Sub Mainモジュール>
set fMainForm = New frmMain

No.1977 MDIFormのポップアップメニューについて  投稿者:gtk [01/3/28(水)15:32分]

MDI親フォームでメニューエディターを開き、親フォームのメニュー項目に子フォームの
ポップアップメニューの項目を追加します。

子フォームのポップアップメニューの項目はもちろん非表示としておきます。

親フォームでメニューエディターを開き下記のように子フォームのポップアップメニューの項目を追加
ファイル --------------------------------------
・・・・開く
・・・・保存
・・・・閉じる
編集       親フォームのメニュー項目
・・・・切り取り
・・・・コピー
・・・・貼りつけ
・・・・削除 --------------------------------------
ポップアップ(例として名前をCHildPopupとします)======================================
・・・・切り取り                     子フォームで表示する
・・・・コピー                    ポップアップメニューの項目を追加
・・・・貼りつけ                  ======================================
(ちょっとわかりづらいかな)

ポップアップメニューを呼び出す時は
PopuoMenu fMainForm.CHildPopup
とすれば、ポップアップメニューが表示されます。
これでとりあえずはお望みの動作をします。
(これよりももっといい方法があるかもしれません。)

No.1976 MDIFormのポップアップメニューについて  投稿者:Tとーちゃん [01/3/28(水)14:48分]

こんにちは、初めて投稿します。

MDIForm(親)でメニューバーを付け、その中のMDI子Formでポップアップメニューを
作ろうとした際、MDI子Formを呼び出すと子FormのメニューがMDIform(親)のメニューバーに
表示されてしまいました。

出来ればMDIForm(親)のメニューバーの内容をそのまま残した上で子Formのポップアップメニューを作成
したいのですが可能でしょうか?

知恵を貸していただきたいのですが・・・ 
   よろしく、お願い致します。

No.1975 Re4:値の切り捨てについて    投稿者:石井 [01/3/28(水)8:11分]

ありがとうございました。変数Currency型でもうまくいきました。 

No.1974 Re3:値の切り捨てについて  投稿者:花ちゃん [01/3/27(火)10:21分]

お節介かもしれませんが?

変数をCurrency型か Variant型に変えられるだけでもOKだと思います。
Variant型は、メモリの消費が多く処理速度が遅くなるのでお薦めはできませんが!

Private Sub Command1_Click()
Dim A As Double
Dim B As Double
Dim Ans As Double
' Dim A As Currency
' Dim B As Currency
' Dim Ans As Currency
'Dim A As Variant
'Dim B As Variant
'Dim Ans As Variant
A = 123
B = 0.15
Ans = Int((A * B) * 1000) / 1000
'Ans=18.45 のはずが 18.449 となる
Text1.Text = Format(Ans, "#,###.########")
End Sub

No.1973 Re3:値の切り捨てについて    投稿者:石井 [01/3/27(火)9:02分]

度々返答ありがとうございます。σ=c/100のσのデータ型については、特に宣言しませんでした。

また、入力値ですが、Text1.Textに131.660、Text2.Textに1を入力しました。σのデータ型については
Doubleでもやってみたのですが、結果は同じでした。Singleでも同じようです。

代替案のほうですが、コードを修正してみたところ、前回のような不具合はなくなりました。
ありがとうございました。

No.1972 お礼<”を含む文字列  投稿者:ななし [01/3/26(月)22:56分]

お返事ありがとうございます。


おっしゃるとおり、別の方法(たいそう回りくどい処理です。
1文字読んで、「"」だったらフラグを立てて、
その次の文字が「,」だったらまたフラグを立てて、
さらにその次が「"」だったらやっとこさそこを区切りと認める。
恥ずかしいので、ソースは書きません・・・(^^;)
で、切り分けようとしていたのですが、
gtkさんに教えていただいた方法のほうが、何倍もスマートですね。
ぜひとも参考にさせていただきます。

大変勉強になりました。ありがとうございます。
また、何かありましたらよろしくお願いします。
私もいつか知識と技術を身に付けて恩返しを・・・
できるようになんて、いつなれるんでしょ?(^^; 精進します!

No.1971 Re2:値の切り捨てについて  投稿者:mimpi [01/3/26(月)19:17分]

σ = c / 100 の σ はデータ型は何でしょうか。

Text1.Text,Text2.Text に入力した値もお教えください。

Double,Single 型の近似値計算によるものかもしれません。
以下に代替案を書きましたのでお試しください。

Private Sub Command1_Click()
Dim a As Double
Dim b As Integer
Dim σ As Double
Dim m$, i As Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
m$ = Str$(a*b)
i = InStr(m$, ".")
If i > 0 Then
σ = Val(Left$(m$, i + 2))
Else
σ = Val(m$)
End If
Label1.Caption = Format(σ, "0.00")
End Sub

No.1970 RE:VBからEXCELファイル作成  投稿者:gtk [01/3/26(月)16:45分]

ごめんなさい重要なことを忘れていました。

上のメニューの「プロジェクト」の中の「参照設定」で、
“Microsoft Excel 8.0 object Libraly"にチェックを入れてください。
チェックをいれていないとプログラムは動作しません。


No.1969 RE:VBからEXCELファイル作成  投稿者:gtk [01/3/26(月)16:39分]

邪道といわれるかもしれませんが、実際にEXCELをつかうという方法があります。

EXCELを使うことにより、VBAでプログラムを組むことができるようになります。
(まあ、VBでやっているのではなくEXCELでやっているので当然ですね・・・)
どういったことをやりたいのかログからはちょっとわかりづらいところがありました。
ひとつだけ、セルを結合するという具体例がありましたので、それを行うプログラムです。
注意:このプログラムはEXCELがインストールされていないとできません。

'---------------------------------------------------------------------------------------
'サンプルプログラム
'---------------------------------------------------------------------------------------
Dim ExlApp As Excel.Application 'EXCELアプリケーションオブジェクト変数を宣言
Set ExlApp = New Excel.Application '新たにEXCELアプリケーションオブジェクトをセットする
'上のセットステートメントを実行すると、表示されていませんがEXCELが起動しています。
'起動されているか確認したい場合は、下のコメントをはずすとEXCELが表示されます。
'(CTL+ALT+DELでも確認できます。"Excel"と表示されていればOK)
'ExlApp.Visible = True
With ExlApp
'VBAが使用できますので、VBAでファイルを開く。
'(この例では、ファイルを開いていますが、作成するのでしたらVBAが
'使えますのでVBAをつかってやってみるのもいいかもしれません)
.Workbooks.Open FileName:="C:\My Documents\Book1.xls"
'同じくセルを結合
.ActiveWorkbook.ActiveSheet.Range("A1:B1").MergeCells = True
'ファイルをセーブ
.ActiveWorkbook.Save
'EXCELを終了する。
.Quit
End With
'EXCELアプリケーションオブジェクト変数を解放する(必ず解放してください)
Set ExlApp = Nothing

No.1968 RE:ダブルクォーテーションを含む文字列  投稿者:gtk [01/3/26(月)15:25分]

もう二日も経っていますので、問題は解決したかと思われますが、

私も、仕事でほぼ同じような条件が発生しましたので、
その時書いたプログラムを元に書いてみました。
但し、このプログラムは、ただ短に出力結果をほぼ忠実に再現すると言うことを
第一にしておりますので、もし、このプログラムでそのたの不具合が出る
用でしたらごめんなさい。また、このプログラムでは、Split関数を使用して
います。この関数はVB6からでしか使用できませんので注意してください。
(ログを見たところVB6でしたから大丈夫ですね)
このプログラムの特徴としてファイル全体を取得しSplit関数で切り分けている
と言ったところでしょうか。(これよりもいい方法があるかもしれません)

プログラムの説明
まず、フォームにCommand1(コマンドボタン)、List1/List2(リストボックス)を配置してください
GetData1の取得結果をList1に、GetData2の取得結果をList2に表示します。
@CSVファイルをバイナリモードで開く。
Aファイルのバイト数分バッファーを確保。
Bバッファーにファイルの内容を全部とりこむ
Cバッファーの内容より、文字列に変換
D変換した文字列をSplit関数で切り分け配列に変換。
E変換した配列から、データの中に","カンマが含まれているか
 を調べ、調整してGetData1配列とGetData2配列に振り分ける

なお、出力結果の文字列はダブルクォーテーションでくくられておりますので、
変換するなり削除するなりしてください。
また、リストボックスは改行はしません。改行部分は"・・"で表示されます。
テキストボックスなどで表示すればちゃんと改行されて表示されます。
'---------------------------------------------------------
'Command1のクリックイベント
'---------------------------------------------------------
Private Sub Command1_Click()
Dim Filenumber As Integer
Dim Buffer() As Byte
Dim StrData As String
Dim BaseGetData
Dim GetData1() As String, Getdata2() As String
Dim Cnt As Integer
Dim Cnt2 As Integer
Dim CommaFlg As Boolean

'リストを初期化する
List1.Clear

'空いているファイル番号を取得
Filenumber = FreeFile
'CVSファイルを開く
Open App.Path & "\" & "test.cvs" For Binary As #Filenumber '<----@
'CVSファイルのデータを取得
'ファイルの大きさ分のバッファーを確保
ReDim Buffer(LOF(Filenumber) - 1) '<----A
'ファイルの中身を全部バッファーに取得
Get #Filenumber, , Buffer '<----B
'CVSファイルを閉じる
Close #Filenumber
'バッファーの内容を文字列に変換
StrData = StrConv(Buffer, vbUnicode) '<----C
'区切り文字を","(コロン)で文字列を区切り、BaseGetData配列に入れる
BaseGetData = Split(StrData, ",") '<----D
'GetData1配列及びGetData2配列数を定義する。
ReDim GetData1((UBound(BaseGetData) + 1) / 2 - 1)
ReDim Getdata2((UBound(BaseGetData) + 1) / 2 - 1)

For Cnt = 0 To UBound(BaseGetData) '------------------(ここからNextまで)E
'<文字列の最後の文字がダブルクォーテーションじゃない場合>
If Right(BaseGetData(Cnt), 1) <> """" Then
'そのデータの中に","(コロン)があるということなので、現在のデータと次のデータを
'","で結合した文字列をStrDataにセットする
StrData = BaseGetData(Cnt) & "," & BaseGetData(Cnt + 1)
'フラグをセットする
CommaFlg = True

'<文字列の最後がダブルクォーテーションの場合>
Else
'そのデータの中に","(コロン)がないので、現在のデータをそのままStrDataに入れる。
StrData = BaseGetData(Cnt)
'フラグをクリアする
CommaFlg = False
End If

'<GetData1配列、GetData2配列にデータを割り振る>
If Cnt Mod 2 = 0 Then
'StrDataの内容をGetData1(Cnt \ 2)に入れる
GetData1(Cnt \ 2) = StrData
'GetData1(Cnt \ 2)の内容をリスト1に表示
List1.AddItem GetData1(Cnt \ 2)
Else
'StrDataの内容をGetData2(Cnt \ 2)似入れる
Getdata2(Cnt \ 2) = StrData
'GetData2(Cnt \2)の内容をリスト2に表示
List2.AddItem Getdata2(Cnt \ 2)
End If
'データの中に","(コンマ)が入ってる場合は、2つの文字列を結合したので、
'カウントを1追加する
If CommaFlg Then Cnt = Cnt + 1
Next
End Sub

No.1967 DataReport  投稿者:よっぴ [01/3/26(月)13:58分]

はじめて投稿します。

DBプログラムを作ろうと思っているのですが、
DataReportで帳票を作って印刷しようとすると、
レコード数が増えてくると時間が妙にかかるように
なりました。
レスポンスをよくする秘訣って有るのでしょうか。

No.1966 Re:値の切り捨てについて  投稿者:石井 [01/3/26(月)13:27分]

早速の返答ありがとうございました。教えて頂いた方法でコードを修正してみたのですが、

一部おかしな数値を取得してしまいます。具体的には、cの値が131.660→131.65 , 0.030→0.02
になってしまうのです。データ型に問題があるのでしょうか?

Private Sub Command2_Click()
Dim a As Double
Dim b As Integer
Dim c As Double
a = Text1.Text
b = Text2.Text
c = Int((a * b) * 100)
σ = c / 100
Label1.Caption = Format(σ, "0.00")
End Sub

よろしくお願いいたします。

No.1965 RE:テーブルの内容をエクセル形式で保存するには  投稿者:匿名 [01/3/26(月)8:32分]

接続しているテーブルの形式がMDBなら、下記にCSV出力のサンプルがありますが・・


http://homepage2.nifty.com/inform/vbdb/

No.1964 ダブルクォーテーションを含む文字列  投稿者:ななし [01/3/24(土)17:26分]

初めて投稿させていただきます。


VB6.0、SP3、OSはWin2000という環境で開発をしているのですが、
ダブルクォーテーションを含む文字列をうまく読み込むことができません。
改行を含むカンマ区切りのテキスト(CSV?)ファイルを、順次読み込んでいく
処理を行いたいのですが、ひとつのデータ中に「"」が含まれていると、
そこで切り分けに不都合が生じてしまいます。

Inputを用いた処理の例--------------------------------------------
Num = FreeFile
Open File For Input As Num
For i = 0 To 2
Input #Num, GatData1(i), GatData2(i)
Next i
Close
----------------------------------------------------------------
ファイル内容の例------------------------------------------------
"意見1","Aに関しては
Bだと思う。","意見2","これからは
Aではなく"AA"としよう。","意見3","Bは,Aとは違う"
----------------------------------------------------------------
(いいかげんな例ですいません・・・)
上のような処理で、例示したデータを読み込むと、

GatData1(0)
「意見1」
GetData2(0)
「Aに関しては
Bだと思う。」

GatData1(1)
「意見2」
GatData2(1)
「これからは
Aではなく」

GetData1(2)
「AA"としよう。"」
GetData2(2)
「意見3」

となってしまいます。これを、

GatData1(0)
「意見1」
GetData2(0)
「Aに関しては
Bだと思う。」

GatData1(1)
「意見2」
GatData2(1)
「これからは
Aではなく"AA"としよう。」

GetData1(2)
「意見3」
GetData2(2)
「Bは,Aとは違う」

と読み込むためには、どうしたら宜しいでしょうか?
改行を含んでいるため、「Line Input」もうまくいかず、
既存のファイルを読み込むため、区切り文字を変更することもできず、
ほとほと手を焼いております。

検索エンジンで、いくつかのキーワードを入れて検索したところ、
このBBSがヒットしたのですが、ちょうどその投稿のあったころの
ログが残っていないようなので、以前、出た話とは存じておりますが、
知恵をお貸しください。 よろしくお願いします。

No.1963 テーブルの内容をエクセル形式で保存するには?  投稿者:みみ [01/3/23(金)19:33分]

接続しているテーブルの内容をエクセルでCSV形式でファイルに保存する方法が分かりません

VBAではDoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, (テーブル名), (ファイル名)
としていたところをVBで実現したいのですが

No.1962 Re:値の切り捨てについて  投稿者:mimpi [01/3/23(金)19:25分] http://www22.freeweb.ne.jp/travel/kanjou/index.html

Label1.Caption = Format(c, "#.##")


Label1.Caption = Format(c, "0.00")
とすると、0.03なら0.03と表示されます。ちなみに0.30は0.30と表示されます。
私の場合、切捨ては
Label1.Caption = Format(Int(c*100), "#.##")
としています。cが負の値の場合は Int と Fix 関数を使い分ける必要があります。 関数についてはヘルプをご覧ください。
また、ご質問の場合はcがDouble型なのでいいのですが、Single型の場合、 値によってはまるめ誤差が生ずる場合があります。

No.1961 値の切り捨てについて  投稿者:石井 [01/3/23(金)14:05分]

始めまして、石井と申します。VB4.0で下記のようなコードを書いたのですが

Cで計算される値を少数第三位で切り捨てにすることができません。どなたか
ご教授願えないでしょうか?よろしくお願いいたします。

Private Sub Command2_Click()
Dim a As Double
Dim b As Integer
Dim c As Double
a = Text1.Text
b = Text2.Text
c = a * b
Label1.Caption = Format(c, "#.##")
End Sub

例えばCの値が17.286なら17.28を取得するような感じです。また値が0.03のよ
うに整数じゃない場合、表示が.03になってしまうのは何故でしょうか?合わせて
ご教示願えると幸いです。

No.1960 VBからEXCELファイル作成  投稿者:ばふっ [01/3/22(木)18:14分]

こんにちは。初めて投稿させていただきます。


現在、VB6でEXCELのファイルを出力するプログラムを作っています。
ファイル作成時に、一部のセルを結合させたいのですが、ヘルプ等を検索してもわかりません…。

どなたかご存知の方はいらっしゃいませんでしょうか?
お知恵をお貸し下さい!宜しくお願い致します。

No.1959 RE:textboxのバイト数取得    投稿者:発泡野郎 [01/3/21(水)21:34分]

さっそくの返答、ありがとうございます。

そうですね まず自分でいろいろ試してみようと思います。
またそのときはお願いします。

No.1958 RE:textboxのバイト数取得  投稿者:花ちゃん [01/3/21(水)16:09分]

>リッチテキストボックスの内容を行数とファイルサイズを取得したいのですが、
>方法を知っている方は教えて下さい。

>この場合、テキストボックスも同様の方法となるのでしょうか?
>お願いします。

ファイルサイズを取得は ヘルプで FileLen 関数を調べて下さい。 (ここのHPのVB簡易リファレンスのファイル関係にも載ってますよ)
行数 は ここのHPのテキストボックス内の総行数・現在行・現在桁の取得及び過去のログの  #366を見て下さい。
まず、自分で解かる範囲は自分で調べるようにされた方が覚えも早く上達への道かと思います。


No.1957 Re:テキストファイルの内容を印刷  投稿者:ゆう(U) [01/3/21(水)13:50分]

>> 80桁で改行されずに表示されるのであれば・・・

>> 改行コード(vbNewLine等)を80桁以降に追加するとOKでしょう。
> というのは、どのようにコードを書いたらいいのですか?

文字列変数内の(へ)・・・

 文字数を調べる方法をご存知ですか?
 文字列を分割する方法をご存知ですか?
 文字列を結合(追加)する方法をご存知ですか?


全角・半角を調べる方法をご存知ですか?

ヘルプで「文字列 操作」等で文字列処理関数について
調べなおしてみてください。

※ここの「逆引きヘルプ」等も参考になります

自分で考えて動作する物(プロシージャ)を作ってみてください。

No.1956 textboxのバイト数取得  投稿者:発泡野郎 [01/3/20(火)0:38分]

突然ですがVBビギナーの発泡野郎といいます。

リッチテキストボックスの内容を行数とファイルサイズを取得したいのですが、 方法を知っている方は教えて下さい。
この場合、テキストボックスも同様の方法となるのでしょうか?
お願いします。

No.1955 ADOでのメモリ解放  投稿者:いく [01/3/19(月)15:12分]

はじめまして

現在 ADOを利用しVBでDBに接続しています。
その際、ローカルにレコードセットを宣言していますが、
このレコードセットは他のイベント、関数に移った時に(スコープから外れた時)
メモリは解放されるのでしょうか?

MSDN HELPでは
>また、すべての変数は、適用範囲外に制御が移ると自動的にクリアされます。
>変数が、プロシージャの外で値を取得する必要がある場合は、
>パブリック変数またはフォームモジュールレベル変数を使うか、
>目的のオブジェクトを返すプロシージャを作成します。
>次のコードは、パブリック変数の使用方法を示しています。
と、言うようなことが書いてあるのですが HELP内の他の場所では
NOTHINGを必ず指定しないと 解放されないような記述もあります。

正直 私が素人でよく分かっていないこともあるのですが、
正しくはどちらなのでしょうか?
また、このレコードセットのメモリ解放が行われる処理は
他に何かあるのでしょうか?ENDやUNLOADはどうなるんでしょうか?

No.1954 テキストに*を表示する方法  投稿者:匿名 [01/3/19(月)14:48分]

環境はVB2とInputManV1.1を使用してます。

IMTEXTコントロールに入力した文字を*で表示したいのですが、
何か良い方法はないでしょうか?
よろしくお願いします。

No.1953 Re:現在行の色をかえるには?  投稿者:den [01/3/18(日)21:00分]

ありがとうございました。--> くりちゃん


ヘルプを読んで試してみます。

No.1952 RE:文字列型2次元配列  投稿者:うな41 [01/3/18(日)21:00分]

自己レスです。


こんなの見つけました。
Microsoft Knowledge Base [J031874]
Visual Basic 5.0 から呼び出し可能な DLL の作成例

これによると、VBの配列は単純配列ではなく「SAFEARRAY型」で
DLL側の対応が必要みたいです。

DLL側はいじれないので、結局緩衝DLL作ることになりそうです。
・・・うぐぅ

No.1951 文字列型2次元配列のアドレスを要求するDLLとのインターフェイス  投稿者:うな41 [01/3/18(日)19:41分]

初めまして、うな41と申します。

現在、文字列型の配列のポインターを要求するDLLとのインターフェイスで
ハマってしまってます。

具体的に言うと、C言語内で
typedef char proDATA[32];
typedef proDATA FAR* ptrcDATA;
という記載があって、DLLの入り口が「ptrcDATA」になっています。
これは、バッファーを呼び出し側で確保し、DLL側で書き込む仕様によるためです。

私のイメージではVBで単に32文字長の文字列配列を取ってByrefで()付きで渡せば
平気かなと考えていたのですが、ダメなようです。

VCで緩衝DLL書いてしまえば問題ないのでしょうが、せっかくなので
VBのみで完結する方法がわかる方いらっしゃいましたらお願いいたします。

前のログ 次のログ


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