Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8395 / 13646 ツリー ←次へ | 前へ→

【33495】APIを使ってDIV形式で書き出し 琴音 06/1/13(金) 7:00 質問[未読]
【33496】Re:APIを使ってDIV形式で書き出し Blue 06/1/13(金) 9:00 発言[未読]
【33504】ユーザーフォームの行き来 琴音 06/1/13(金) 11:59 質問[未読]
【33506】Re:ユーザーフォームの行き来 inoue 06/1/13(金) 12:29 発言[未読]
【33507】Re:ユーザーフォームの行き来 Blue 06/1/13(金) 12:32 発言[未読]
【33543】Re:ユーザーフォームの行き来 琴音 06/1/14(土) 19:35 お礼[未読]
【33545】Re:ユーザーフォームの行き来 Blue 06/1/14(土) 19:55 質問[未読]
【33546】Re:ユーザーフォームの行き来 琴音 06/1/14(土) 20:04 発言[未読]

【33495】APIを使ってDIV形式で書き出し
質問  琴音  - 06/1/13(金) 7:00 -

引用なし
パスワード
   いつもこちらにお世話になっています。
どうしてもわからないので教えてください。

1.ユーザーフォームで、ボタンを押すとリストボックスに特定のひとつのエクセルファイルからファイル名を数十行(可変)読み出す。

2.ボタンを押すと参照フォルダを指定でき、そのフォルダへリストボックスでチェックボックスにチェックの入ったエクセルファイル名の特定の行を読みに行く。
(リストボックスでファイル2・4・6と指定されていたとしたら、その3つのファイルのAとDとKの3行目から、以下データが入っている分すべて…等)

3.読んだデータを任意のユーザー指定の関数に含ませておく

4.新規ファイルに3で読んだデータを書き出していき、文字コードをAPI関数を用いてUTF-8に変換し、.div形式で特定のフォルダに保存


2まではできたのですが、3と4、特に3の文字コードを変換するということと、.div形式で保存というのがまったくわかりません。
どなたか教えてください<(_ _)>

【33496】Re:APIを使ってDIV形式で書き出し
発言  Blue  - 06/1/13(金) 9:00 -

引用なし
パスワード
   とりあえず、文字コード変換だけ

> 文字コードをAPI関数を用いて
ADODB.StreamオブジェクトのCharSetを利用すると簡単に出来ます。
API関数を用いるとしたら、MultiByteToWideChar&WideCharToMultiByte APIを使うことになりますが、
日本語サイトのドキュメント(ヘルプやサンプル)が少ないし、分かりくいのでお勧めしません。

参考スレ)
保存形式をUTF-8にしたい
http://rararahp.cool.ne.jp/cgi-bin/lng/vb/vblng.cgi?print+200508/05080003.txt
※私のサンプルが正しい保証はないので気をつけてください。

ところで
> .div形式
について、どうも一般的な拡張子ではありませんね。
ただ単にバイナリファイルの拡張子を .div にするだけなのでは?
# 仕様がこちらにはわからないので、答えようがないです。
# 分からないようならば、担当者に聞きましょう。

【33504】ユーザーフォームの行き来
質問  琴音  - 06/1/13(金) 11:59 -

引用なし
パスワード
   >Blue さん

ありがとうございました。
API関数は使わなければいけないようなんで、もう少し勉強してみます。

重ねて質問を失礼します。
現在ユーザーフォーム2つを行き来するようになっているのですが、メニューフォームの
選択と、メインフォームの戻るボタンの行き来では問題ないのですが、×ボタンでは
メニューフォームは表示されますが、メインフォームは消えず、メニューからメインに
戻るとエラーになってしまいます。
×ボタンに関する記述が間違っているのでしょうか?

■メニューフォーム

Private Sub CommandButton1_Click()
On Error GoTo error1
Select Case OptionButton1.Value
    Case True     
      SFg = 1
      Ans = MsgBox("作業1でよろしいですか?", vbYesNo, "作業選択")
        If Ans = vbYes Then
          Unload Me
          UserForm4.Show
          Me.Hide
          Else
        End If
    Case False
      SFg = 2    
      Ans = MsgBox("作業2でよろしいですか?", vbYesNo, "作業選択")
        If Ans = vbYes Then
          Unload Me
          UserForm4.Show
          Me.Hide          
          Else
        End If
End Select
Exit Sub
error1: MsgBox "エラー"
End Sub

Private Sub CommandButton2_Click()
On Error GoTo error1
  Ans = MsgBox("終了してよろしいですか?", vbYesNo, "作業選択")
    If Ans = vbYes Then
      ThisWorkbook.Close
      Else
    End If
Exit Sub
error1: MsgBox "エラー"
End Sub
Private Sub UserForm_Activate()

  If (SFg = 1) Or (SFg = 2) Then
    Select Case SFg
        Case 1
         Me.OptionButton1.Value = True
        Case Else
         Me.OptionButton2.Value = True
    End Select
  Else
    SFg = 1
    Me.OptionButton1.Value = True
  End If
End Sub


■メインフォーム(戻るボタン)

Private Sub CommandButton8_Click()
Dim Ans As String
  Ans = MsgBox("メニュー画面に戻りますか?", vbYesNo, "選択")
    'Yesならメイン画面が開く
    If Ans = vbYes Then
        Unload Me
        Load UserForm2
        UserForm2.Show
      Else
    End If
End Sub

■メインフォーム(右上×ボタン)

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode <> vbFormCode Then
Dim Ans As String
  Ans = MsgBox("メニュー画面に戻りますか?", vbYesNo, "選択")
    If Ans = vbYes Then
        Unload Me
        Load UserForm2
        UserForm2.Show
    Else
    End If
    Cancel = 1
  End If
End Sub

【33506】Re:ユーザーフォームの行き来
発言  inoue E-MAILWEB  - 06/1/13(金) 12:29 -

引用なし
パスワード
   モーダルなフォームを交互に開くのに、
自分をUnload(Hideも同じ)して、相手をShowする方法を採ると、
Show以降の記述がシステムキューに貯まった状態になってしまいます。

通常ならShow以降に書かれた記述がフォームを閉じた後で
動くことから、このようになることは分かるはずです。

[2つのフォームを排他表示させるサンプル]
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_060.html

【33507】Re:ユーザーフォームの行き来
発言  Blue  - 06/1/13(金) 12:32 -

引用なし
パスワード
   ▼琴音 さん:
>API関数は使わなければいけないようなんで、もう少し勉強してみます。
なぜADODB.Streamじゃなんでダメなのかはっきりきいておいてください。
# 安全性、操作性からいっても差は歴然。
# (汎用性がネックなのかなぁ?というかExcelという前提があるからあんま関係ないような)
# 一部APIは、VBAの知識だけでは分かりにくいです。(C言語のポインタ等の知識があると理解が進みますが)

それと、別の質問ならば、スレを新しく建ててください。
回答してくださる方は、 一覧の題名をみてしますので。

【33543】Re:ユーザーフォームの行き来
お礼  琴音  - 06/1/14(土) 19:35 -

引用なし
パスワード
   inoueさま
回答ありがとうございました。無事にできました。

Blueさま
トピは新しくたてたほうがよかったのですね;;
申し訳ありません。
関数はそれを使って作るようにとのことなので(理由は不明です)
調べながら頑張ってみます。

【33545】Re:ユーザーフォームの行き来
質問  Blue  - 06/1/14(土) 19:55 -

引用なし
パスワード
   ▼琴音 さん:
>関数はそれを使って作るようにとのことなので(理由は不明です)
それって?

>調べながら頑張ってみます。
だから、調べようにも
> 日本語サイトのドキュメント(ヘルプやサンプル)が少ないし
ということだし、
> 安全性、操作性、保守性からいっても差は歴然。
ということを上司に伝えておいてください。

その上で、理由を聞いてください。
> 理由は不明です
では、私は納得できませんので。

もし私が上司で、業務で使うようなものを作らせるのならば、
>関数はそれを使って作るようにとのことなので
なんてことはいわないな。
ただ、学習用にAPIを勉強せよというもので、業務等に使うことを考えていないならばちがうけど。

【33546】Re:ユーザーフォームの行き来
発言  琴音  - 06/1/14(土) 20:04 -

引用なし
パスワード
   ▼Blue さん:

こんばんは。

>だから、調べようにも
>日本語サイトのドキュメント(ヘルプやサンプル)が少ないし
>安全性、操作性、保守性からいっても差は歴然。
>ということを上司に伝えておいてください。
>その上で、理由を聞いてください。
>では、私は納得できませんので。

学習ではなく業務なのですが…。
申し訳ありませんが納得いく回答は得られないような気がします。
ただ、今後理由がわかるようなことがあって(なにかそれでなければ
いけないような理由等)掲示板で書いても差し支えないような類のものならば、
改めてご報告させて頂きます。
失礼致します。

8395 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free