[リストへもどる]
新着記事

- 新着記事50件を表示しました -

投稿時間:2004/08/11(Wed) 08:34
投稿者名:uchi
URL :
タイトル:Re^2: エクセルシートの1行ずつを別ブックにコピー
Renardさま、ありがとうございます。

赤入れしていただいたソースに修正して、実行させたところ、
問題点だった
(1)コピー元シートの行数分のファイルが作成される。しかも、中身は空。
(2)for-nextの中のロジックが不格好で、ブックやシートのActivateを繰り返しているためか、
  非常に処理時間がかかる。
は、解決しました。
エクセルの自動マクロ作成機能で作られたソースに、xlApp,xlBook1,xlSheet1を付けただけだと、
正常に機能しないのですね。

また、細かい指摘事項も初心者の私にとって勉強になりました。
ありがとうございました。

投稿時間:2004/08/10(Tue) 22:54
投稿者名:Renard
Eメール:
URL :
タイトル:Re: エクセルシートの1行ずつを別ブックにコピー
質問がよく分からないのですが、とりあえずソースの赤入れ。

> -----------------------------------------------------------------------------
> Private Sub Command1_Click()
>     'xlBook2の内容を1行ずつxlBook1にコピーする練習
>     'テスト環境:Win2000(SP4) VB6(SP6) EXCEL2000
> 
>     Dim xlApp As Excel.Application
>     Dim xlBook1 As Excel.Workbook, xlBook2 As Excel.Workbook
>     Dim xlSheet1 As Excel.Worksheet, xlSheet2 As Excel.Worksheet
>     
>     Dim RowPos As Long    'xlBook2のxlSheet2シートの最大行を保存
>     Dim i As Long      'For-Nextのカウンター
>     
>     Set xlApp = CreateObject("Excel.Application")
>     '新規のブック
>     Set xlBook1 = xlApp.Workbooks.Add
>     Set xlSheet1 = xlBook1.Worksheets(1)
>     '既存のブック(ReadOnlyで開く)
>     Set xlBook2 = xlApp.Workbooks.Open("C:\データ.xls",,True)
      Set xlBook2 = xlApp.Workbooks.Open("C:\データ.xls",ReadOnly:=True) とした方が分かりやすい

>     Set xlSheet2 = xlBook2.Worksheets("sheet1")
>     
>     xlApp.Visible = False            
>     xlApp.Application.ScreenUpdating = False  'xlApp.ScreenUpdating = True?
      xlApp.ScreenUpdating = False     '非表示なのに必要なのかな?(未検証)

>     'xlBook2のsheet1シートの使用されている最大行を取得(A列のセルは必ずセットされている)
>     RowPos = xlSheet2.Range("A65536").End(xlUp).Row  
>     
>     '1行ずつをコピー
>     For i = 1 To RowPos
>    xlApp.Application.CutCopyMode = False
>    xlBook2.Activate
>    xlSheet2.Activate
>    xlSheet2.Rows(i & ":" & i).Select
>    xlApp.Selection.Copy
>    xlBook1.Activate
>    xlSheet1.Activate
>    xlSheet1.Range("A" & i).Select
>    xlApp.ActiveSheet.Copy
>     Next i
'コピーする時は、範囲を直接指定します。Activeにする必要なし。
'selectionとかも、普通使わない。
    For i = 1 To RowPos
        xlSheet2.Range("a" & CStr(i) & ":" & "iv" & CStr(i)).Copy _
            xlSheet1.Range("a" & CStr(i))
    Next i
     
>     'ファイルの保存と終了
>     xlApp.Application.DisplayAlerts = False 
      xlApp.DisplayAlerts = False

>     xlSheet1.SaveAs ("C:\結果.XLS")    'xlBook1.SaveAS("...") ?
      xlBook1.SaveAs "C:\結果.xls"
      xlBook1.Close                         '閉じるのを忘れずに

>     xlBook2.Close (False)
      'Methodの引数には普通括弧をつけない

>     xlApp.Application.DisplayAlerts = True
> 
>     xlApp.Application.ScreenUpdating = True   'xlApp.ScreenUpdating = true ?
>     xlApp.Application.Quit       'xlApp.Quit ?
      'ここら辺もね。xlAppがApplicationなんだから・・・。

>     Set xlSheet1 = Nothing
>     Set xlSheet2 = Nothing
>     Set xlBook1 = Nothing
>     Set xlBook2 = Nothing
>     Set xlApp = Nothing
>     
> End Sub
> -----------------------------------------------------------------------------

投稿時間:2004/08/10(Tue) 22:49
投稿者名:Ichiro
Eメール:
URL :
タイトル:Re^2: MSFlexGridの行をまとめて削除したい
kenさん、ご指摘有難うございます。
何かとんでもない勘違いをしていました。赤面です(-_-;)

Command2を以下のようにして解決しました。
どうも有難うございました。

Private Sub Command2_Click()
Dim i As Integer
i = 10
With MSFlexGrid1

 Do While i > 0
      .RemoveItem 1
      i = i - 1
 Loop
End With
End Sub

投稿時間:2004/08/10(Tue) 21:50
投稿者名:ken
Eメール:
URL :
タイトル:Re: MSFlexGridの行をまとめて削除したい
削除したんだから当然行数は減りますよね?

まず10行追加した段階では
行1
行2
行3
行4
・
・
・
行10
となります。

ここから1行目を削除すると
行2
行3
行4
・
・
・
行10
になります。

For文で削除する行番号を加算しているので次は2行目を削除するということになり
行2
行4
・
・
・
行10
となりますよね。

投稿時間:2004/08/10(Tue) 21:00
投稿者名:Ichiro
Eメール:
URL :
タイトル:MSFlexGridの行をまとめて削除したい
MSFlexGridのRemoveItemメソッドで複数行をまとめて削除したいのですが、うまくいきません。
環境はWindowsXPとVB6SP6です。

以下の例で、フォーム上にMSFlexGridとCommand1、Command2の2つのボタンを用意します。

Command1ボタンをクリックするとMSFlexGridに10行を追加します。
Command2ボタンをクリックすればその10行を削除できるはずなのですが
なぜか2,4,6,8行が削除されず「その行はグリッドには含まれていません」というエラーになります。
デバッグモードで見ると変数i=7で止まっています。

何がいけないのでしょうか。ご指導お願いします。

Private Sub Command1_Click()

Dim i As Integer
With MSFlexGrid1
      .Rows = 1
      .Cols = 1
   For i = 1 To 10
      .AddItem i
   Next i
End With

End Sub

Private Sub Command2_Click()

Dim i As Integer
With MSFlexGrid1
   For i = 1 To 10
      .RemoveItem i
   Next i
End With

End Sub

投稿時間:2004/08/10(Tue) 12:24
投稿者名:kamurin
Eメール:kamurin@hotmail.com
URL :
タイトル:Re^2: MSFlexGridの強制スクロール
有難うございました。

投稿時間:2004/08/10(Tue) 12:06
投稿者名:uchi
URL :
タイトル:エクセルシートの1行ずつを別ブックにコピー
お世話になります。

エクセルVBAでの開発はありますが、VBでのオブジェクト操作は初めてです。
こちらのサイトのサンプルを参考にして、既存エクセルシートの内容を1行ずつ、
新規ブックのシートにコピーするプログラムを作成しました。
(シートコピーの方が早いですが、ここでは1行ずつのコピーとしています。)

[以下のプログラムをご参照下さい]
(1)実行結果は、DisplayAlert=Falseを入れているのにも関わらず、自動的に作成されたブックの
  保存を確認するメッセージが表示されてしまいます。
  また、作成された「結果.xls」をダブルクリックして開くと、コピー元シートの行数分の
  エクセルファイルが作成されていて、それらも開いてしまいます。
(2)オブジェクト操作が初めてのため、For-Nextの中での文法エラー、
  かつ、処理終了後にエクセルタスクを残さないように、試行錯誤して行き着いたのが
  今のロジックです。
  しかし、結果.xlsにデータがコピーされていないので、ロジックエラーがあるようです。
  さらに処理時間は、エクセルVBAで実行するのに比べて、かなり遅いです。

上記(1)(2)の点について、下記のロジックでの不具合をご指摘ください。
お手数ですが、よろしくお願いします。

-----------------------------------------------------------------------------
Private Sub Command1_Click()
'xlBook2の内容を1行ずつxlBook1にコピーする練習
'テスト環境:Win2000(SP4) VB6(SP6) EXCEL2000

Dim xlApp As Excel.Application
Dim xlBook1 As Excel.Workbook, xlBook2 As Excel.Workbook
Dim xlSheet1 As Excel.Worksheet, xlSheet2 As Excel.Worksheet

Dim RowPos As Long    'xlBook2のxlSheet2シートの最大行を保存
Dim i As Long      'For-Nextのカウンター

Set xlApp = CreateObject("Excel.Application")
'新規のブック
Set xlBook1 = xlApp.Workbooks.Add
Set xlSheet1 = xlBook1.Worksheets(1)
'既存のブック(ReadOnlyで開く)
Set xlBook2 = xlApp.Workbooks.Open("C:\データ.xls",,True)
Set xlSheet2 = xlBook2.Worksheets("sheet1")

xlApp.Visible = False            
xlApp.Application.ScreenUpdating = False  'xlApp.ScreenUpdating = True?

'xlBook2のsheet1シートの使用されている最大行を取得(A列のセルは必ずセットされている)
RowPos = xlSheet2.Range("A65536").End(xlUp).Row

'1行ずつをコピー
For i = 1 To RowPos
   xlApp.Application.CutCopyMode = False
   xlBook2.Activate
   xlSheet2.Activate
   xlSheet2.Rows(i & ":" & i).Select
   xlApp.Selection.Copy
   xlBook1.Activate
   xlSheet1.Activate
   xlSheet1.Range("A" & i).Select
   xlApp.ActiveSheet.Copy
Next i

'ファイルの保存と終了
xlApp.Application.DisplayAlerts = False
xlSheet1.SaveAs ("C:\結果.XLS")    'xlBook1.SaveAS("...") ?
xlBook2.Close (False)
xlApp.Application.DisplayAlerts = True

xlApp.Application.ScreenUpdating = True   'xlApp.ScreenUpdating = true ?
xlApp.Application.Quit       'xlApp.Quit ?

Set xlSheet1 = Nothing
Set xlSheet2 = Nothing
Set xlBook1 = Nothing
Set xlBook2 = Nothing
Set xlApp = Nothing

End Sub
-----------------------------------------------------------------------------

投稿時間:2004/08/10(Tue) 10:39
投稿者名:nanashi
Eメール:
URL :
タイトル:Re: MSFlexGridの強制スクロール
TopRowプロパティというのがあります。

投稿時間:2004/08/10(Tue) 10:13
投稿者名:kamurin
Eメール:kamurin@hotmail.com
URL :
タイトル:MSFlexGridの強制スクロール
MSFlexGridをクリックすると一番下までスクロールする処理をしたいのですが、
どうすればいいでしょうか?
宜しくお願いします。

投稿時間:2004/08/10(Tue) 09:52
投稿者名:とも
Eメール:
URL :
タイトル:Re^4: 原因わかりました。
> SetWindowLong関数 の使い方に問題があるように思ったので、外して見て下さいと言った
> のですが、やはりここに原因があったのなら使い方を色々試してみたらどうでしょうか?
>
> まず、GetWindowLong で現在のスタイルを先に取得しておく
> 次に、SetWindowLong でスタイルを設定
> SetWindowPos で再描画 (※ ShowWindow は使用しない)
>
> のような方法や私の No.195 のサンプルで使っている方法等。
>
> 再現できるコードを投稿して貰った方が解決が早いと思うのですが。

原因わかりました。

再現できるコードを投稿させてもらおうと思い、実現したい機能だけの
サンプルプログラムを作成していろいろ試したところ、原因つかめました。

理由はわからないのですが、原因は
フォームを最大化するのに
フォームのHeight、Width、Top、Leftプロパティを使用していたのがまずかったようです。

現在は、
No.195のサンプルを流用させてもらって、
フォームの最大化を、AppTasklist関数のAPI関数(SetWindowPos)で行うようにしています。

第三者に確認作業をしてもらっていたので、返事おくれました。
助かりました。ありがとうございました。

投稿時間:2004/08/09(Mon) 11:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: ExcelでのSort操作について
ここのExcel&Word関係のエクセル!ワンポイントテクニック集の並び替えのコードと
見比べて下さい。

又、Excel のタスクを正常に終了できない現象(こちらも合せてお読み下さい)も
見ておいて下さい。

投稿時間:2004/08/09(Mon) 11:24
投稿者名:Tuyo
Eメール:
URL :
タイトル:ExcelでのSort操作について
こんにちは。

VBからのExcel操作で、sort文を使用しますと、EXE起動中はExcelが
終了せず作成したファイルが表示されません。
EXEを終了させるとファイルは表示されるようになります。
sort文をはずすと問題なく動作します。

  xlApp.Selection.Sort Key1:=Range("Y" & Sort_1), Order1:=xlDescending, Header:=xlGuess, _
     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin

上記がコードです。
おかしいところありませでしょうか?
分かりましたら教えて下さい。
宜しくお願いいたします。

投稿時間:2004/08/09(Mon) 11:20
投稿者名:ももたろう
Eメール:
URL :
タイトル:Re: 試してみましたが
下記方法で解決しました、ありがとうございました。
何故かは結局わかりませんでした。

>     sURL1 = "http://www.bcap.co.jp/hanafusa/in.html"
>     WebBrowser1.Navigate sURL1

   '----ここから追加----
   '1秒待つ
      StartTime = timeGetTime
      Do
          DoEvents
      Loop While (timeGetTime - StartTime < 1000)
   '----ここまで----
                
>     Do While WebBrowser1.Busy
>         DoEvents
>     Loop
>                 
>     Do While WebBrowser1.Document.ReadyState <> "complete"
>         DoEvents
>     Loop
>     Call check(1)
> End Sub

投稿時間:2004/08/09(Mon) 10:37
投稿者名:EXEC
Eメール:
URL :
タイトル:Re^2: シート名の取得について
魔界の仮面弁士様

私が期待する結果が得られました。
ありがとうございました。

投稿時間:2004/08/08(Sun) 22:19
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^5: EOF が効かない
> ExcelのデータをCSVに落としています。
Excelのセルの中に(データ中), や "" が含まれている可能性があるので
Excel上で  , や "" を検索して使っていないか確認して下さい。

> Debug.printで確認すると、データは一番最後の行まで読み込んでいますが
> その後、エラーが発生しています。
列×行 の数が合わないからデータの最後でエラーが発生しているのです。

データのどの辺に(前の方か後ろの方か), "" (又は問題)があるのか調べる
ためにExcel上で仮に100行なら50行づつにして半分づつ読み込んでみれば
どちらに問題があるか解りますよね。
その前に検索して, "" を使っていないか探して見て下さい。

データの途中に , や "" が含まれていてもそこでエラーが発生する訳ではありません。
, や "" が含まれていた場合 1列が2列としてカウントされるのです。
5列×100行ならデータは500個のはずが501個になるからEOFの位置が合わずエラーが
発生するのです。(最後まで読み込まないと違うか解らないから最後まで読んでいるのです)


# 先の投稿で一部データと出力結果が違っておりました。お詫びして訂正します。

Excel に下記のように書いてCSV形式で保存して下さい。
1	1,1	a
2	1,2"	b
3	1,3	c

下記のコードを実行すると
Private Sub Command1_Click()
    Dim lngDatN    As Long
    Dim intFileNo  As Integer
    Dim dat(2) As String
    lngDatN = 0
    intFileNo = FreeFile
    
    Open "c:\book1.csv" For Input As #intFileNo
    Do Until EOF(intFileNo)
        Input #intFileNo, dat(0), dat(1), dat(2)
        Debug.Print dat(0), dat(1), dat(2)
    Loop
    Close #intFileNo
End Sub

結果下記のように出力されます。(当然エラーが出ます)
1             1,1           a
2             1,2           
b             3             1,3


Excel に下記のように書いてCSV形式で保存して下さい。
1	1	a
2	2	b
3	3	c

実行すると 当然ながら下記のようになります。
1             1             a
2             2             b
3             3             c

投稿時間:2004/08/08(Sun) 21:10
投稿者名:みなこ
URL :
タイトル:Re^4: EOF が効かない
> 見た目でなく検索等して調べられたのでしょうか?
> どちらにしてもデータに問題があるかと思います。

ExcelのデータをCSVに落としています。

Debug.printで確認すると、データは一番最後の行まで読み込んでいますが
その後、エラーが発生しています。

最後の行を消してみるということでしょうか?

投稿時間:2004/08/08(Sun) 00:52
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^3: タスクバーに消したはずのアイコンが残る
> もしSetWindowLong関数を使用する以外の方法にて、切り替えダイアログにアイコン表示する方法を
> ご存知の方があれば、おしえていただけませんか?

SetWindowLong関数 の使い方に問題があるように思ったので、外して見て下さいと言った
のですが、やはりここに原因があったのなら使い方を色々試してみたらどうでしょうか?

まず、GetWindowLong で現在のスタイルを先に取得しておく
次に、SetWindowLong でスタイルを設定
SetWindowPos で再描画 (※ ShowWindow は使用しない)

のような方法や私の No.195 のサンプルで使っている方法等。


>あとは、alt+tabにて表示される切り替えダイアログにアイコンが表示されれば、
>実現したい機能を全て満たすのですが、

私のサンプルでは表示していますが、それとも何か意味が違うのでしょうか?

再現できるコードを投稿して貰った方が解決が早いと思うのですが。

投稿時間:2004/08/08(Sun) 00:25
投稿者名:とも
Eメール:
URL :
タイトル:Re^2: タスクバーに消したはずのアイコンが残る
> 逆引きヘルプの方に2サンプル、アップしてありますのでそちらを
> 試して見てください。
> (改造せずにそのままで)
>
> 又は、貴方のコードで確認しろと言われるなら事象を再現できるコードに
> して頂かないとなかなか他の人は試す気になれないでしょう。
> ましてや10回に1回程度しか発生しないとなれば、投稿されたコードを見た位で
> 解る人は早々いないかと思います。

おっしゃるとおり、投稿後、自分の投稿内容を読み返してみて、
返事をもらえないなこれは、と思っていました。
返事がもらえてとても感謝しています。

> たとへば、今使っておられるコードをフォームを表示するだけのコードにしても
> (不要な部分を削除して)現象はおきるのでしょうか?
> SetWindowLong 等のAPI関数を使用しない状態で試してみた場合とか。
>

ご指摘のAPI関数(SetWindowLong)を使用しない状態で試すと、現象はおきませんでした。

あとは、alt+tabにて表示される切り替えダイアログにアイコンが表示されれば、
実現したい機能を全て満たすのですが、
いまのところ、SetWindowLong関数以外でアイコンを表示する方法が分かっていません。

もしSetWindowLong関数を使用する以外の方法にて、切り替えダイアログにアイコン表示する方法を
ご存知の方があれば、おしえていただけませんか?

投稿時間:2004/08/07(Sat) 16:05
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: タスクバーに消したはずのアイコンが残る
逆引きヘルプの方に2サンプル、アップしてありますのでそちらを
試して見てください。
(改造せずにそのままで)

又は、貴方のコードで確認しろと言われるなら事象を再現できるコードに
して頂かないとなかなか他の人は試す気になれないでしょう。
ましてや10回に1回程度しか発生しないとなれば、投稿されたコードを見た位で
解る人は早々いないかと思います。

たとへば、今使っておられるコードをフォームを表示するだけのコードにしても
(不要な部分を削除して)現象はおきるのでしょうか?
SetWindowLong 等のAPI関数を使用しない状態で試してみた場合とか。


# コードを投稿される場合、図表モードで投稿して頂くと「タブ」が保持されるので
 見易くなります。(下記の修正からも修正できたかと思います)

投稿時間:2004/08/07(Sat) 14:49
投稿者名:とも
Eメール:
URL :
タイトル:タスクバーに消したはずのアイコンが残る

初めて投稿させていただきます。
vb6(sp5) Xp homeにて開発しています。
うまくいかない原因がつかめず困っています。なんでもよいのでご意見いただけたら助かります。

フォームを5つ持ち、フォーム1から5、5から1へ遷移可能な画面を作成しています。
各フォームはvbmodalでshowしています。
フォーム1から5へ遷移する場合、移動元を非表示にしています。
(例えば、フォーム2から3へ遷移するとき、フォーム2および、フォーム2のタスクバーのアイコンを非表示にしています。
つまり、ウィンドウズ上にはひとつのフォームおよびタスクバーにひとつのアイコンのみ表示ということです。
フォーム3から2へ遷移する場合は、フォーム3をunloadしています。)

現状、フォーム2から3へ遷移する場合に10回に1回ぐらい(出る頻度ばらばら)で、
フォーム2のアイコンがタスクバーに残ってしまう現象が出ています。

この現象を解消しようと、ログをとってイベントの発生順序が狂っていないかどうか調べたのですが、
問題なさそうでした。また、タスクバーのアイコン表示非表示はこちらの過去ログ
「アクティブなウィンドウだけをタスクバーに表示」を参考にしているので、
この問題に対する実装の方向性はまちがっていないと思っているのですが、うまくいっていません。

具体的には以下のような実装をしています。

フォーム1から5のForm_Activateイベントにて下記関数(AppTasklistA)呼び出し(フォーム起動時1回のみ)

フォーム2から3を呼び出す場合
'自分自身のフォーム2非表示+タスクバーアイコン削除
call DelTasklistA Me
'フォーム3呼び出し
form3.show vbmodal
'自分自身のフォーム2表示+タスクバーアイコン追加
call AppTasklistA Me

Public Sub DelTasklistA(ByRef p_frmForm As Form)
'ウィンドウ非表示
Call ShowWindow(p_frmForm.hWnd, CST_SW_HIDE)

'以下過去ログのサンプル流用
Dim objTaskbar As New TaskbarList
objTaskbar.HrInit
objTaskbar.DeleteTab p_frmForm.hWnd
Set objTaskbar = Nothing
Exit Sub

Public Sub AppTasklistA(ByRef p_frmForm As Form)
'alt+tabにて表示される切り替えダイアログにアイコンが表示されるようウィンドウスタイルにWS_EX_APPWINDOWを追加
Call SetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE, GetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW)

'ウィンドウ表示
Call ShowWindow(p_frmForm.hWnd, CST_SW_SHOW)

'以下過去ログのサンプル流用
Dim objTaskbar As New TaskbarList
objTaskbar.HrInit
objTaskbar.AddTab p_frmForm.hWnd
objTaskbar.ActivateTab p_frmForm.hWnd
Set objTaskbar = Nothing
Exit Sub

気づいた点等ありましたらご意見いただけたら助かります。
よろしくお願いいたします。

投稿時間:2004/08/06(Fri) 21:03
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^3: EOF が効かない
> ・データは全て2個セット
> ・カンマ ( , ) やダブルコーティション ( "" )  は含まれていません。

見た目でなく検索等して調べられたのでしょうか?
どちらにしてもデータに問題があるかと思います。

半分から以降のデータを削除して試して見るとか?

1行づつ増やしながら試してみるとかすればデータのどこに問題があるか
つかめると思います。

又、Excelで仮のデータを作って試してみればどちらに問題があるかはっきりするかと
思います。

 If strTag(i) = "" Then GoTo LoopExit  この部分も気になるのですが一度コメント化
して試してみては。

投稿時間:2004/08/06(Fri) 20:30
投稿者名:みなこ
URL :
タイトル:Re^2: EOF が効かない
> 1行に strTag(i) と strDscr(i) の2ケがセットでありますか?
> 各項目の中に半角のカンマ ( , ) やダブルコーティション ( "" ) が含まれたり
> していませんか? 含まれていると1行の項目数が2ヶ以上と言う事になります。
> 
> 総項目数が偶数(2の倍数)で無ければ
> 「ファイルにこれ以上データがありません。62」のエラーが出ると思います。

はい。

・データは全て2個セット
・カンマ ( , ) やダブルコーティション ( "" )  は含まれていません。

debug.printで見ていると、最後の行まで読んでいますが
それを最後とプログラムでは認識していません。

投稿時間:2004/08/06(Fri) 19:52
投稿者名:nobu
Eメール:
URL :
タイトル:Re: EOF が効かない
>         Input #intFnum, strTag(i), strDscr(i)

入力ファイルの内容を確認して下さい。
1行に strTag(i) と strDscr(i) の2ケがセットでありますか?
各項目の中に半角のカンマ ( , ) やダブルコーティション ( "" ) が含まれたり
していませんか? 含まれていると1行の項目数が2ヶ以上と言う事になります。

総項目数が偶数(2の倍数)で無ければ
「ファイルにこれ以上データがありません。62」のエラーが出ると思います。

投稿時間:2004/08/06(Fri) 19:38
投稿者名:みなこ
URL :
タイトル:EOF が効かない
初めて投稿させていただきます。
よろしくお願い致します。

テキストファイルを全部読み込みたいのでこのように↓してみました。


  Open gstrDir & "Tags.txt" For Input As #intFnum

    Do Until EOF(intFnum)
        Input #intFnum, strTag(i), strDscr(i)
        
        If strTag(i) = "" Then GoTo LoopExit

        i = i + 1
        ReDim Preserve strTag(i)
        ReDim Preserve strDscr(i)
        
    Loop


しかし、「ファイルにこれ以上データがありません。62」のエラーが出てしまいます。
EOFを検知してくれていないのでしょうか?
使い方がまずいのですか?(今までもこのように書いていましたが、エラーは出ませんでした。)

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

投稿時間:2004/08/06(Fri) 18:53
投稿者名:花ちゃん
Eメール:
URL :
タイトル:試してみましたが
Private Sub Command1_Click()
    sURL1 = "http://www.bcap.co.jp/hanafusa/in.html"
    WebBrowser1.Navigate sURL1
               
    Do While WebBrowser1.Busy
        DoEvents
    Loop
                
    Do While WebBrowser1.Document.ReadyState <> "complete"
        DoEvents
    Loop
    Call check(1)
End Sub

試してみましたが、問題なく取得できています。

投稿時間:2004/08/06(Fri) 17:54
投稿者名:ももたろう
Eメール:
URL :
タイトル:Re6:WebBrowser1・・・
アドバイス頂いたように試してみましたが、HTMLのコードを取得できていない状態で、
次の処理へ移ってしまってるみたいです。(花ちゃん、魔界の仮面弁士さん両方とも)
何か根本的に書き方がおかしいのでしょうか?

ソースの修正箇所の確認です。
---修正前---
WebBrowser1.Navigate sURL1   'ホームページ表示               
Do Until (WebBrowser1.ReadyState = READYSTATE_COMPLETE And Not WebBrowser1.Busy)
    DoEvents
Loop

---修正後---
WebBrowser1.Navigate sURL1   'ホームページ表示
                
Do While WebBrowser1.Busy
Loop
                
Do While WebBrowser1.Document.ReadyState <> "complete"
Loop

※Do Loopを修正するだけで、他はさわらないですよね?

ちなみに、Do Loopの後はコールで下記を呼び出して、リンク切れか判断しています。
花ちゃん、魔界の仮面弁士さんの場合、リンク切れでなくても、●●●印の処理を通ってきて
しまっています。また、処理速度も"修正前"と比較すると一瞬にして終わります。
Call check(i)

Private Sub check(i)
    Text1.Text = WebBrowser1.Document.body.innerHTML    'HTMLソースを文字列として取出す
    If InStr(Text1.Text, "ファイルが見つかりません") <> 0 _
        Or InStr(Text1.Text, "ページを表示できません") <> 0 _
        Or InStr(Text1.Text, "ページが見つかりません") <> 0 _
        Or InStr(Text1.Text, "Object not found") <> 0 _
        Or InStr(Text1.Text, "Not Found") <> 0 _
        Or InStr(Text1.Text, "The page cannot be found") <> 0 Then
        xlSheet.Range("D" & i).Interior.ColorIndex = 3  '赤●●●
    ElseIf InStr(Text1.Text, "URLが変わりました") <> 0 _
        Or InStr(Text1.Text, "URL変更") <> 0 _
        Or InStr(Text1.Text, "URLが変更") <> 0 _
        Or InStr(Text1.Text, "ページは移動") <> 0 _
        Or InStr(Text1.Text, "移動しました") <> 0 _
        Or InStr(Text1.Text, "移動いたしました") <> 0 _
        Or InStr(Text1.Text, "ホームページ移転") <> 0 _
        Or InStr(Text1.Text, "URLに移動") <> 0 Then
        xlSheet.Range("D" & i).Interior.ColorIndex = 5  '青
    End If
End Sub

ネット検索でも調べてみますが、何かお気づきの点があったら教えて下さい。

投稿時間:2004/08/06(Fri) 17:20
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^5: WebBrowser1.ReadyState
 http://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=6255#6264

の下記を試して見てください。

   1.  『.Busy = False』まで待機してから、
   2.  『Not .Document Is Nothing』まで待機し、最後に
   3.  『.Document.readyState = "complete"』まで待機する。

多くの場合下記ですましているようです。それでもだめなら魔界の仮面弁士さんの
方法でどうぞ

Do While objIE.busy
Loop

Do While objIE.Document.readyState <> "complete"
Loop

又、上記1.2.3の「」内の語句をキーワードに検索すればいくらでもサンプルが
でてきますよ。(定番の処理なので)

投稿時間:2004/08/06(Fri) 17:13
投稿者名:宮田
Eメール:
URL :
タイトル:Re^4: トランザクションエラー
ありがとうございます。ヘルプより詳しく読んでみたいと思います。
開始方法ですが、上記の作業は行ってみました。それだけでいけるのでしょうか?

投稿時間:2004/08/06(Fri) 17:04
投稿者名:ももたろう
Eメール:
URL :
タイトル:Re^4: WebBrowser1.ReadyState
> > 下記ではどうですか?
> > http://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=6255#6264

一応できたのですが、上手くいかない時があるので、教えて下さい。

ソースの一部を表記します。
------------------------------------
WebBrowser1.Navigate sURL1   'ホームページ表示               
Do Until (WebBrowser1.ReadyState = READYSTATE_COMPLETE And Not WebBrowser1.Busy)
    DoEvents
Loop
-------------------------------------

ほとんどは、WebBrowser1.ReadyState = READYSTATE_COMPLETEで処理が進みますが、同じURLを表示
していても、WebBrowser1.ReadyState = READYSTATE_LOADINGと、ずっとこの値のまま処理が進まない
時があります。

ネットで検索して調べてみましたが、WebBrowser1.ReadyState = READYSTATE_LOADINGの意味もわかり
ませんでした。(ヘルプではでてきませんが、それが普通ですか?)
参考URL又は、READYSTATE_LOADINGの意味がわかりましたら、教えて下さい。
よろしくお願いします。

投稿時間:2004/08/06(Fri) 16:45
投稿者名:谷口 里美
Eメール:wangwang@jmail.plala.or.jp
URL :
タイトル:Re^3: txtファイルをxlsファイル形式で保存
> > その逆も同じですが、一旦Excelに読み込んで、ファイル形式を指定して保存するのが
> > 一番簡単かと思います。

成功しました。
ありがとうございました

投稿時間:2004/08/06(Fri) 16:44
投稿者名:谷口 里美
Eメール:wangwang@jmail.plala.or.jp
URL :
タイトル:Re^2: txtファイルをxlsファイル形式で保存
> その逆も同じですが、一旦Excelに読み込んで、ファイル形式を指定して保存するのが
> 一番簡単かと思います。

投稿時間:2004/08/06(Fri) 16:38
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://homepage2.nifty.com/Dee/
タイトル:Re^3: トランザクションエラー
分散トランザクションは、複数のデータベース間での登録や更新の同期を取るために裏で働いている仕組みです。
BooksOnline(SQLServerのヘルプ)に詳しく出ていますので、まずは精読されることをお薦めいたします。
開始方法ですが、SQLServer2000の場合は、
「コントロールパネル」⇒「管理ツール」⇒「サービス」もしくは
SQLServerサービスマネージャで、「サービス」
のところで「Distributed Transaction Coordinator」を選択し、
起動していないようでしたら開始ボタンを押してみてください。

投稿時間:2004/08/06(Fri) 16:09
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: txtファイルをxlsファイル形式で保存
その逆も同じですが、一旦Excelに読み込んで、ファイル形式を指定して保存するのが
一番簡単かと思います。

投稿時間:2004/08/06(Fri) 15:51
投稿者名:谷口 里美
Eメール:wangwang@jmail.plala.or.jp
URL :
タイトル:txtファイルをxlsファイル形式で保存
はじめまして
txtファイル(カンマ区切り)をxlsファイル形式で保存するにはどうすればいいでしょうか?

投稿時間:2004/08/06(Fri) 14:40
投稿者名:ももたろう
Eメール:
URL :
タイトル:Re^3: ちょっと気になったので・・・
> 下記ではどうですか?
> http://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=6255#6264

やってみましたが、直ぐに出来そうではないみたいです。
悩みながらやってみます。
できたら、報告しますのでお待ち下さい

投稿時間:2004/08/06(Fri) 13:50
投稿者名:宮田
Eメール:
URL :
タイトル:Re^2: トランザクションエラー
教えて頂いたサイトは、分散トランザクションが開始されているのが前提の話みたいです。今は分散トランザクションがどうやったら開始されるのかすら分からない状態なのです。分散トランザクションの開始の手順を知っている方がおられましたら、教えて下さい。どうぞ宜しくお願いします。

投稿時間:2004/08/06(Fri) 13:28
投稿者名:宮田
Eメール:
URL :
タイトル:Re^2: トランザクションエラー
参考になりそうです。ありがとうございます(o*。_。)oペコッ
見てみます。

投稿時間:2004/08/06(Fri) 12:57
投稿者名:S.S
Eメール:
URL :
タイトル:Re: トランザクションエラー
http://support.microsoft.com/default.aspx?scid=kb;ja;329332&Product=sqlserverJPN
http://support.microsoft.com/default.aspx?scid=kb;ja;827805&Product=sqlserverJPN
このあたり参考になります?

投稿時間:2004/08/06(Fri) 11:41
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^2: ちょっと気になったので・・・
> 15秒というのは、実行したところ15秒ならページが表示できるのでそうしました。
> もし、今回のプログラム以外でおすすめの方法があったら教えだ下さい!

下記ではどうですか?
http://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=6255#6264

投稿時間:2004/08/06(Fri) 11:16
投稿者名:おじん
Eメール:
URL :
タイトル:Re^4: AutoRedrawについて
いつもありがとうございます。感謝もうしあげております。

> 両方とも .AutoRedraw = True のままにしておけば、 Picture1.Visible = False でも
> Picture2 に画像が転送されますが。
「Formをみえなくする」とは、Formを小さくすることで、.Visible=Falseではありませんでした。

> 又、デザイン時にプロパティに画像ファイルを指定しておけばメモリに読み込まれるので
以下の解説が「本質的」に理解できていないのだと思いました。これまで思考錯誤でやっていました
から。設計時、あるいはそうでない時で状況が変わること、思いもしませんでした。ましてや、
マシン、メモリ、処理速度などに関係することなど。(テスト中、何かのときに、画像がチカッと
一瞬表示し瞬時消えることがあったのですが、なにか関連あったのでしょうか)
AutoRedrawのテストをしようとしてつくったプログラムそのものが「正しく、適切」でなかった
ようです。上記括弧の例以外にも「おかしいな」と思う理由不明の現象がありました。
 
>     DoEvents
> のように DoEvents を入れると表示されません。
良くわからずに使っています。これも「テストねた」の一つです。

> 基本的に転送したり、印刷したり、描画したものが消えては困る場合は、.AutoRedraw = True
プロパディの説明に、「自動的に再描画〜」「継続表示属性を持つ〜」とあります。が、
「〜消えては困る場合は〜」のような説明でないと理解できないようです。なにせ、高校時代の
国語の成績は「2」でしたから。でも、63歳までどうにか生きてこれた、みなさんのおかげで。

投稿時間:2004/08/06(Fri) 10:47
投稿者名:宮田
Eメール:
URL :
タイトル:トランザクションエラー
SQLServerでサーバーが異なる時は、リンクを貼りなおし、張りなおした先にテーブルの登録を行っているのですが、サーバーが同じ時は特に問題なく登録処理が行われますが、サーバーが異なる場合は、INSERTの時に、「指定されたトランザクションコーディネータに、新規トランザクションを参加出来ませんでした。」「SQLOLEDBは分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。」というエラーが出るのですが、原因が全くわかりません。わかるかたどうぞ宜しくお願いします。

投稿時間:2004/08/06(Fri) 10:22
投稿者名:ももたろう
Eメール:
URL :
タイトル:Re: ちょっと気になったので・・・
返信遅くなってしまって、ごめんなさい。

> > '15秒待つ
> なぜ15秒なのでしょう?
> 時間経過での判断は、
> 通信速度とか環境に左右されないのでしょうか?

今回は1台のPCでしか実行しません。また、通信トラブル等がない限りレスポンスは
あまり変わらない環境にあります。
実行するのも、私や近くの人が行うので、何かあれば直ぐ対応でき、工数をかけて
まで完成度の高いものを望まれていないので、このようにしました。
15秒というのは、実行したところ15秒ならページが表示できるのでそうしました。
稀に、表示できないホームページもあります。
そういう場合は、更に待ち時間を増やすといった対策をとりました。
(待ち時間は、実際使ってみて不都合を感じたら修正すればいいかな?程度で考えて
います)

もし、今回のプログラム以外でおすすめの方法があったら教えだ下さい!
まだまだVB経験は浅いので、知らない事がたくさんあり、アドバイス大歓迎です。

投稿時間:2004/08/06(Fri) 08:57
投稿者名:まさお
URL :
タイトル:Re^2: ToolTipText の複数行表示
花ちゃん さん、ありがとうございます。

> > もし、可能なら、どうやれば改行できるのか教えて戴きたく
> > お願い申し上げます。
> API関数をいくつか使ってゴシゴシかけば可能ですが(サンプルNo.313)
>
ウ〜ム、API関数は私の手には余るナ。

この件は諦めることにします。
ご教授、どうもありがとうございました。

投稿時間:2004/08/06(Fri) 06:32
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re^3: AutoRedrawについて
両方とも .AutoRedraw = True のままにしておけば、 Picture1.Visible = False でも
Picture2 に画像が転送されますが。
又、デザイン時にプロパティに画像ファイルを指定しておけばメモリに読み込まれるので
.AutoRedraw =Falseでも表示されます。
.AutoRedraw =False でも画像が表示されているタイミングなら転送可能ですが、最小化や
裏に隠れると消えます。

デザイン時にプロパティに画像ファイルを指定して表示させておくのと
Set Picture1.Picture = LoadPicture(Text1.Text) では、まったく違います。
Set Picture1.Picture = LoadPicture(Text1.Text) は描画になり、.AutoRedraw =False
だと表示していないと転送できません。又、マシンが高速だと完全に表示される前に
転送され表示できない場合があります。

    Picture2.Cls                          'False の場合?
    Set Picture1.Picture = LoadPicture(Text1.Text)
    
    DoEvents
のように DoEvents を入れると表示されません。
基本的に転送したり、印刷したり、描画したものが消えては困る場合は、.AutoRedraw = True
にしておく必要がありますので、前回のような回答をしたまでです。
又、メモリや処理速度に特に問題がなければプログラム上で.AutoRedraw = True や 
False に切り替える必要がないかと思います。

投稿時間:2004/08/06(Fri) 04:26
投稿者名:おじん
Eメール:
URL :
タイトル:Re^2: AutoRedrawについて
> > AutoRedrawの動作について調べるために下記のコードを作成したました。
> 何がお知りになりたいのか知りませんが、描画した画像が消えないようにしたいなら
> プロパティで AutoRedraw=True に設定しておけばいいだけですが。
やっぱり日本文が通じなかったようです。
2つのPicgtureBoxについて、
1つ目は、ファイルからPicture1へ、2つ目はPictureBox1からPicture2へイメージを
移すとき、それぞれのAutoRedrawのプロパディがTrue、Falseの組み合わせによって、
「描画したり(=画像が見える)、描画されない(=画像が見えない)」ことがある。
言い換えると、AutoRedraw=Trueでも描画されなかったり、反対に、
AutoRedraw=Falseでも描画されたりすることがある(Picture1=Trueは必須のよう)。
ただしPicture1がForm上にある=隠れていない場合は、Falseでも描画される。
テストで「目的にかなう組み合わせが見つかっていますので」結果オーライでやります。

投稿時間:2004/08/06(Fri) 00:25
投稿者名:Numawo
Eメール:redwolf_Numao@hotmail.com
URL :
タイトル:Re^2: コンボボックスでの↑↓キー
お二方、投稿どうもありがとうございます。

KeyPressにDebug.Printをはさんだところ、矢印キーはイベント起こらなかったので、
KeyDownにDebug.Printをはさんで調べると、
矢印キーは、@KeyDown、AClickをいう順でイベントが発生することがわかりました。

そこで、kamurinさんの案を少々手直しして
Pravite Sub Combo1_keyDown(略)
If KeyCode = 38 Or KeyCode = 40 then
flgClick = False
End If
End Sub

Private Sub Combo1_Click(略)
If flgClick = True then
Combo2.enabled = True
Combo2.SetFocus
Else
flgClick = True
End if
End Sub

で期待する動作が実行できそうです。
どうもありがとうございました。

投稿時間:2004/08/06(Fri) 00:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: 参照設定
Excelに限らず、プログラム一般について言える事ですが、使用するすべての環境で動作する
関数等だけでプログラムを組むかバージョン(環境)によって処理を分岐する必要があります。
特に今回のように開発環境がExcel10で使用環境がExcel9.0ならExcel10からの機能を使用して
いたら当然、Excel9.0の環境では動作しません。(逆なら動く可能性が高いですが,No.7626参照)

参照設定を外したいなら、定数等は自前で宣言しないといけないし、プログラムミスで
Excel内部でエラーが発生してプロセスが終了しないとか色々問題があるかと思います。
コンパイルする時に両方のバージョン用を作成してもそう手間とも思えません。

この掲示板の No.7626 からの一連のスレッドと No.526 からの一連のスレッドに目を通して
おいて下さい。

投稿時間:2004/08/05(Thu) 23:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: AutoRedrawについて
> AutoRedrawの動作について調べるために下記のコードを作成したました。
何がお知りになりたいのか知りませんが、描画した画像が消えないようにしたいなら
プロパティで AutoRedraw=True に設定しておけばいいだけですが。

投稿時間:2004/08/05(Thu) 22:52
投稿者名:花ちゃん
Eメール:
URL :
タイトル:Re: ToolTipText の複数行表示
> ToolTipText を複数行表示させることはできますか?
VBだけの機能ではできません。

> もし、可能なら、どうやれば改行できるのか教えて戴きたく
> お願い申し上げます。
API関数をいくつか使ってゴシゴシかけば可能ですが(サンプルNo.313)

投稿時間:2004/08/05(Thu) 22:21
投稿者名:旋盤
Eメール:
URL :
タイトル:Re: 参照設定
レイトバインドしれ