web-dev-qa-db-ja.com

パス内の変数を使用してvbaを書き込む方法

これはこのサイトでの2番目の投稿であり、私はVBAに比較的慣れていません。

今日の質問は、

セルの値をパス文字列に追加して、ブックを保存するフォルダーを指定するにはどうすればよいですか。

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\"FileName1"\

FileName1 = Range("B6")
FileName2 = Range("A1")

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

前もって感謝します!

3
Kenny

述べられた質問への回答

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\" 

追加のフィードバックおよび修正されたコードその他のフィードバック。


回答する長い説明

文字列変数に値を割り当てる場合、最も一般的な方法は次のとおりです。

string = "This is my string value."

ただし、スクロールせずにすべてのテキストを開発画面に収めることができるように、次のコードのように、かなり長い文字列の構文でコードに表示されることがよくあります。

string = "This is my really, really, really long string value. I am making this " _
    & "as long as I can, while also having something to write."

_を削除して、すべてを1行に移動すると、次のようになります。

string = "This is my really, really, really long string value. I am making this " & "as long as I can, while also having something to write."

変数に割り当てられている文字列は、次のような方法で分割できることに注意してください。

string = "This is" & " my " & "string value."

' Returns the same result as:
string = "This is my string value."

さらに、文字列変数str_val = " my "がある場合、置換を使用して上記のサンプルを次のように記述できます。

string = "This is" & str_val & "string value."

追加のフィードバック

現在、コードの順序(以下の元のコードを参照)は次のとおりです。

  1. 変数を定義する
  2. パスに値を割り当て
  3. FileName1に値を割り当てます
  4. FileName2に値を割り当てます
  5. ファイルを保存

残念ながら、この順序に従うことは、ステップ2)では、FileName1の値がまだ割り当てられていないため、""の値がnull文字列であることを意味します。

したがって、従うべき順序は次のとおりです。

  1. 変数を定義する
  2. FileName1に値を割り当てます
  3. FileName2に値を割り当てます
  4. パスに値を割り当て
  5. ファイルを保存

文字列内の追加の変数

@Davesexcelによって一時的に投稿された回答(その後変更)があり、文字列内のfolder1およびfolder2も変数であると想定していました。 代替コードを添付しました。


元のコード

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\"FileName1"\

FileName1 = Range("B6")
FileName2 = Range("A1")

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

修正されたコード

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6")
FileName2 = Range("A1")

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"    

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

代替コード

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6")
FileName2 = Range("A1")

Path = "D:\" & folder1 & "\" & folder2 & "\Projects\The FILES\theFILES\" & FileName1 & "\"    

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
3
Mistella

アンパサンド記号をいくつか削除しました。また、使用する前に変数の値を割り当てる必要があります。

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6").Value
FileName2 = Range("A1").Value

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"

ActiveWorkbook.SaveAs Filename:=Path & FileName2 & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
3
Ricardo A

コードは行ごとに実行されます。最初に正しい行が必要です。

Dim Path As String
Dim FileName1 As String
Dim FileName2 As String

FileName1 = Range("B6").Value
FileName2 = Range("A1")
 Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"
0
Davesexcel

この行は間違っています:Path = "D:\ folder1\folder2\Projects\The FILES\theFILES \" FileName1 "\

... 3つの "マークが含まれているためです。オペレーティングシステム内のパス名には"文字が含まれていないため、実際のパスが何であるかはわかりません。ただし、VBA文字列の割り当てでは、文字列は2つの "文字だけで囲む必要があります。

"このような"

文字列内に文字「」を含める必要がある場合は、引用符を2重にする必要があります。たとえば、「この文字列には「文字が含まれています」という変数に文字列を割り当てるには、次のように記述する必要があります。

Str = "This string contains a "" character"

倍増に注意してください。

文字列を確認して、もう一度お試しください。

0
Chris Melville

行は次のようになります。

Path = "D:\folder1\folder2\Projects\The FILES\theFILES\" & FileName1 & "\"

これが私の例です:

入力は次のとおりです。

https://i.stack.imgur.com/7TwhP.png

ここにも私が保存しているフォルダがあります:

https://i.stack.imgur.com/y2bOZ.png

Public Sub saveFile()

Dim path As String
Dim nameOfPath As String
Dim nameOfFile As String

nameOfFile = Cells(2, 1)
nameOfPath = Cells(1, 1)
path = "Z:\" & nameOfPath

ActiveWorkbook.SaveAs filename:=path & nameOfFile & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

End Sub
0
learnAsWeGo