Excel VBA質問箱 IV

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

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


10046 / 13644 ツリー ←次へ | 前へ→

【23846】名前を付けて保存 yamazaki 05/4/5(火) 20:06 質問[未読]
【23848】Re:名前を付けて保存 おさる 05/4/5(火) 20:37 回答[未読]
【23849】Re:名前を付けて保存 おさる 05/4/5(火) 20:50 回答[未読]
【23851】Re:名前を付けて保存 おさる 05/4/5(火) 21:16 回答[未読]
【23897】Re:名前を付けて保存 yamazaki 05/4/6(水) 20:35 質問[未読]
【23925】Re:名前を付けて保存 kazu 05/4/7(木) 18:36 発言[未読]
【24041】Re:名前を付けて保存 yamazaki 05/4/10(日) 19:49 お礼[未読]

【23846】名前を付けて保存
質問  yamazaki  - 05/4/5(火) 20:06 -

引用なし
パスワード
   下記の内容で、任意でフォルダ選択し、名前を付けて保存をしようとしたのですが、どうもうまくいきません。
だれかご教授お願いいたします。


On Error GoTo errmsg
Dim Obj As Object
Dim myDir As String

  Set Obj = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "保存したいフォルダを選択して「OK」ボタンをクリックして下さい。", 0)

  If Obj Is Nothing Then Exit Sub
 
  myDir = Obj.Items.Item.Path
  UserForm1.Show
errmsg:

-------------------------------------------------------------------------

Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1 & ".xls"
  Application.DisplayAlerts = True
  Application.Quit

【23848】Re:名前を付けて保存
回答  おさる  - 05/4/5(火) 20:37 -

引用なし
パスワード
   試してみましたがうまくいきましたよ。
あえて言えば

ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1 & ".xls"

ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1.value & ".xls"

ですかね。

あと、テキストボックスにファイル名には不適切な文字が入っているか
もしれません。
また、既存のファイル名と同じでないかの処理も必要です。

【23849】Re:名前を付けて保存
回答  おさる  - 05/4/5(火) 20:50 -

引用なし
パスワード
   エラー処理を施してみました。
※改善の余地があるかもしれませんが、とりあえず
ブック名の重複チェックのみ付け加えました。

On Error GoTo errmsg
Dim Obj As Object
Dim myDir As String
Dim S as String
  Set Obj = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "保存したいフォルダを選択して「OK」ボタンをクリックして下さい。", 0)

  If Obj Is Nothing Then Exit Sub
 
  myDir = Obj.Items.Item.Path
  UserForm1.Show
errmsg:

-------------------------------------------------------------------------

  'Application.DisplayAlerts = False 'エラー処理を行っているので不要かも
   s = myDir & "\" & UserForm1.TextBox1.value & ".xls"
   If Dir(s) <> "" Then
     MsgBox "既に存在します。ブック名を付けなおしてください。"
     Exit Sub
   Else
     ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1.Value & ".xls"
     Application.DisplayAlerts = True
     Application.Quit
   End If

【23851】Re:名前を付けて保存
回答  おさる  - 05/4/5(火) 21:16 -

引用なし
パスワード
   ファイル名の禁則文字です。
※全角だと使えますが、マクロなどで
扱うと半角化して取得してエラーにな
ったりしますので全角でも使わない方
が無難です。
※実際に手動でファイル名を付けて保
存してみたら確認できます。

\
/
:
,
;
*
?
"
<
>
|

【23897】Re:名前を付けて保存
質問  yamazaki  - 05/4/6(水) 20:35 -

引用なし
パスワード
   ▼おさる さん:
>ファイル名の禁則文字です。
>※全角だと使えますが、マクロなどで
>扱うと半角化して取得してエラーにな
>ったりしますので全角でも使わない方
>が無難です。
>※実際に手動でファイル名を付けて保
>存してみたら確認できます。
>
>\
>/
>:
>,
>;
>*
>?
>"
><
>>
>|

早速の返信 おさる さんありがとうございました…残念な事に私のパソコン

ではCドライブにしか書き込みません^^;もしかすると汎用性に

問題があるのでしょうか?コードに問題があるのか...etc?

そのあたりの疑問も解決してもえると助かるのでどうか引き続きお願い

致します

【23925】Re:名前を付けて保存
発言  kazu  - 05/4/7(木) 18:36 -

引用なし
パスワード
   こんな感じでどうでしょうか?


On Error GoTo errmsg
Dim Obj As Object
Dim myDir As String
Dim S As String

  AryNoUse = Array("\", "/", ":", ",", ";", "*", "Print", """", "<", ">", "|")

  Set Obj = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "保存したいフォルダを選択して「OK」ボタンをクリックして下さい。", 0)

  If Obj Is Nothing Then Exit Sub

  myDir = Obj.Self.Path
  
  If Obj.Title = "マイ コンピュータ" Then
    MsgBox "マイコンピュータは選択しないで下さい。", vbExclamation
    Exit Sub
  End If
  
  UserForm1.Show


errmsg:

'-------------------------------------------------------------------------
  Fnm = UserForm1.TextBox1.Value
  If Fnm = "" Then
   MsgBox "ファイル名が指定されていません。"
   Exit Sub
  End If
  
  For Each Chk In AryNoUse
    If InStr(1, Fnm, Chk) <> 0 Then
      MsgBox "ファイル名に不適切な文字が含まれています。" & vbCrLf & "処理を中止します。", vbExclamation
      Exit Sub
    End If
  Next

   Application.DisplayAlerts = False
   S = myDir & "\" & Fnm & ".xls"
   If Dir(S) <> "" Then
     If MsgBox("既に存在します。上書きしますか", vbQuestion + vbYesNoCancel) = vbYes Then
      Kill S
     Else
      MsgBox "Noが選択されたので処理を中止します。"
      Exit Sub
     End If
   Else
     ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1.Value & ".xls"
     Application.DisplayAlerts = True
     Application.Quit
   End If

【24041】Re:名前を付けて保存
お礼  yamazaki  - 05/4/10(日) 19:49 -

引用なし
パスワード
   ▼kazu さん:
>こんな感じでどうでしょうか?
>
>
>On Error GoTo errmsg
>Dim Obj As Object
>Dim myDir As String
>Dim S As String
>
>  AryNoUse = Array("\", "/", ":", ",", ";", "*", "Print", """", "<", ">", "|")
>
>  Set Obj = CreateObject("Shell.Application"). _
>  BrowseForFolder(0, "保存したいフォルダを選択して「OK」ボタンをクリックして下さい。", 0)
>
>  If Obj Is Nothing Then Exit Sub
>
>  myDir = Obj.Self.Path
>  
>  If Obj.Title = "マイ コンピュータ" Then
>    MsgBox "マイコンピュータは選択しないで下さい。", vbExclamation
>    Exit Sub
>  End If
>  
>  UserForm1.Show
>
>
>errmsg:
>
>'-------------------------------------------------------------------------
>  Fnm = UserForm1.TextBox1.Value
>  If Fnm = "" Then
>   MsgBox "ファイル名が指定されていません。"
>   Exit Sub
>  End If
>  
>  For Each Chk In AryNoUse
>    If InStr(1, Fnm, Chk) <> 0 Then
>      MsgBox "ファイル名に不適切な文字が含まれています。" & vbCrLf & "処理を中止します。", vbExclamation
>      Exit Sub
>    End If
>  Next
>
>   Application.DisplayAlerts = False
>   S = myDir & "\" & Fnm & ".xls"
>   If Dir(S) <> "" Then
>     If MsgBox("既に存在します。上書きしますか", vbQuestion + vbYesNoCancel) = vbYes Then
>      Kill S
>     Else
>      MsgBox "Noが選択されたので処理を中止します。"
>      Exit Sub
>     End If
>   Else
>     ActiveWorkbook.SaveAs myDir & "\" & UserForm1.TextBox1.Value & ".xls"
>     Application.DisplayAlerts = True
>     Application.Quit
>   End If


kazu さん 返信ありがとうございます。やはり無理でした。なぜ無理なのか考えてみたところもしかすると、バージョンの問題ではないか?という結論に達しました。
ちなみにWin98でExcel2000を使用。
しかし考え方のヒントにはなりました。ありがとうございます。

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