投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/1/13 18:38:06
> If デフォルトパスが設定されているか? Then
>     sTemp = String(256, Chr(0))
>     Call SHGetSpecialFolderPath(Me.hwnd, sTemp, CSIDL_DESKTOP, 0)
> Else
>     sTemp = デフォルトパス
> End If

エラーが発生する場合、この部分では True 処理(If ブロック)と False 処理(Else ブロック)の
いずれが処理されていますか?


> cmnDlg.InitDir = Trim$(sTemp)
この部分の処理を見直しください。

sTemp の中身にもよりますが、先の SHGetSpecialFolderPath を通過していた場合、
文字列 sTemp の後半は Chr(0) で埋められているはずです。

しかし Trim 関数では Chr(0) を除去できません。Trim 関数で除去できる文字は、
全角空白(" ")と半角空白(" ")だけであることに注意してください。提示されたコードでは不完全です。

# CommonDialog.InitDir では、Chr(0) 以降の文字列が無視されるため、
# 結果として、この問題に気付きにくいかも知れませんが。


> cmnDlg.ShowOpen  <-----------ここでエラーと思います???
ちょっと待ってください。
本当に、そこで発生するエラーが最初の質問にあった
> 1.実行時エラー393 leftプロパティの値の取得は出来ません。
> 2.実行時エラー383 Heightプロパティは値の取得のみ可能です。
という事なのでしょうか?
(提示されたコードには、どこにも left / Height の表示がありません)

本当は、別の箇所でエラーが発生していたりはしませんか?
あるいは、その場所で発生するエラーは、別の内容だったりはしませんか?


> 'ファイルが存在しないとき処理を終了する
> If Dir(msFileName) = "" Then
ShowOpen する前に、cmnDlg の Flags プロパティの値を、どのように設定していますか?

もし、既存のファイルのみを選択させたいのであれば、Dir で判定せずとも、
  cmnDlg.Flags = cmnDlg.Flags Or cdlOFNFileMustExist
というコードを事前に入れておくだけで済みますよ。


> ファイル選択ダイアログが表示する前に
> エラーになってしまいます。 
あれ? On Error GoTo CANCEL_PROC を組み込んでありますから、この Private Sub cmdRegist_Click() 内で
エラーメッセージが表示される事は無いと思いますよ。

それともこのコードは抜粋で、実際の cmdRegist_Click はもっと複雑なコードなのでしょうか?
(CANCEL_PROC ラベル以下に、エラーの内容を記述するコードが含まれているなど)