何千もの古いファイルから新しくフォーマットされたファイルに情報を転送するのに役立つマクロを書き込もうとします。ほとんどが標準ですので、 "古い"本の指定範囲から "新しい"本の指定範囲に値を移すことができるマクロがあります(このサイトのおかげで比較的痛みがありません)。入力ボックスプロンプト(wb1)から範囲を取得し、定義された範囲(wb2)に値を転送します。
ただし、古いファイルの一部が非典型的にフォーマットされていて、範囲が自分のマクロで指定されたものと一致しません。だから、私は、これらのインスタンスでは、コピーする範囲をユーザに定義させることが理にかなっていると判断しました。
値を=に割り当てようとしましたが、コピー貼り付けを試しましたが、これまでのところどちらも動作していません。どんな手がかりも大歓迎です。
ここでのコードは、(私は別のものの束をしようとしてきたと述べたように、これは、ただ一回の反復である)、これまでです:
sub magic_select()
Dim wb As Workbook, wb2 As Workbook
Dim vfile As Variant
Dim name As String
Dim oldname As String
Dim Cvalves, Ovalves, breakers, safety_inst, procedure_ID, Pvalves, Pbreakers, electest As String
'set source workbook
Set wb = ActiveWorkbook
'open target workbook
vfile = Application.GetOpenFilename("Excel-Files,*.xls*", _
1, "Select One File to Open", , False)
'if nothing selected, exit sub
If TypeName(vfile) = "Boolean" Then Exit Sub
'open selected file
Workbooks.Open vfile
'set target workbook
Set wb2 = ActiveWorkbook
'procedure_ID = Application.InputBox(Prompt:="select procedure ID: one cell", Type:=8)
Cvalves = Application.InputBox(Prompt:="select valves to be locked closed", Type:=8)
Ovalves = Application.InputBox(Prompt:="select valves to be locked open", Type:=8)
breakers = Application.InputBox(Prompt:="select breakers to be opened and locked out", Type:=8)
safety_inst = Application.InputBox(Prompt:="select Special Safety Instructions", Type:=8)
Pvalves = Application.InputBox(Prompt:="select valves from Procedure(page 2)", Type:=8)
Pbreakers = Application.InputBox(Prompt:="select breakers from Procedure (page2)", Type:=8)
electest = Application.InputBox(Prompt:="select Electrical Test Procedure", Type:=8)
'copies all the appropriate values to blank form
'wb is blank form (copy to)
'wb2 is old LOTO form (copied from)
'edit values as needed
wb.Worksheets(1).Range("e11, e85").Value =
wb2.Worksheets(1).Range("e11").Value
wb.Worksheets(1).Range("E21:I45").Value = Range("Cvalves").Value
wb.Worksheets(1).Range("E50:I61").Value = Range("Ovalves").Value
wb.Worksheets(1).Range("E95:G121").Value = Range("breakers").Value
wb.Worksheets(1).Range("a124:a128").Value = Range("breakers").Val
wb.Worksheets(1).Range("h70, c132").Value = Range("procedure_ID").Value
wb.Worksheets(2).Range("a10:f54").Value = Range("Pvalves").Value
wb.Worksheets(2).Range("a60:f89").Value = Range("Pbreakers").Value
wb.Worksheets(2).Range("a92:a97").Value = Range("Electest").Value
name = wb2.name
oldname = "_done_" & name
'resaves old file under new name
wb2.SaveAs Filename:="xyz" & oldname, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
'closes old file
wb2.Close
'deletes old duplicate file
Kill vfile
'Set wb = ActiveWorkbook
'saves as new, separate LOTO form
wb.SaveAs Filename:="zyx" & name, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
're-open blank macro form
Workbooks.Open ("C:\Users\me.etc")
'closes new file
wb.Close
End Sub
ありがとうございました。私は壁の試みから一種の文字列としてそれらのdim'dを持っていた、ここに投稿するときにそれを変更することを忘れました。私は値を割り当てるだけで動作させることができました。それは、ユーザーの入力が多いためエラーが発生しやすいので、私はそれをカバーするためにいくつかの時間を費やす必要がある、私は値の転送がうれしい!私はVBAの初心者です。助けてくれてありがとう。 – Nmatz