|
いつもお世話になります。
ファイルの指定法について教えてください。
UserForm3の規則(textbox内の文字で読取列を指定)に従い、Private Sub CommandButton3_Click()で開いた外部ファイル(シートはComboBox1で選択)から、CommandButton2_Click()にてデータを取込もうとしています。
以下のマクロで動いてはいるのですが、2つのファイルを操作しているので元ファイル(マクロのある)を操作するとき
>Workbooks("Mk4.XLS").Worksheets("条件表").Range("A3:A65536"))
のように指定しています。これですと将来ファイル名を変更したとき問題となるので良い方法を教えてください。Me.??で出来るのでしょうか?
___________________________________________________________
Private Sub CommandButton2_Click()
Dim DATA(2, 40)
'読みとり列番号の取得
For i = 2 To 35
DATA(0, i) = UserForm3.Controls("textbox" & i).Value
'読みとり列番号の数値化
If DATA(0, i) = "" Then
DATA(1, i) = ""
ElseIf Asc(Right(DATA(0,i), 1))>48 And Asc(Right(DATA(0,i),1))<58Then
DATA(1, i) = 0 '固定セルのフラグON
ElseIf Len(DATA(0, i)) = 2 Then
DATA(1,i)=(Asc(Left(DATA(0,i),1))-64)*26+Asc(Right(DATA(0,i),1))-64
Else
DATA(1, i) = Asc(DATA(0, i)) - 64
End If
Next i
l = Application.Max(Workbooks("Mk4.XLS").Worksheets("条件表").Range("A3:A65536")) ~~~~~~~~~~~~~~~~~~~~~~~~こことか
'読みとり行数の取得
With Workbooks(FILE_Name).Worksheets(Sheet_Name)
For i = 0 To 65534
If .Cells(65536 - i, DATA(1, 2)).Value <> "" Then
DATA_Row = .Cells(65536 - i, DATA(1, 2)).Row
Exit For
End If
Next i
End With
'上書きか追加か
If CheckBox1.Value = True Or l = 0 Then
k = Val(l) + 2
Else
With Workbooks("Mk4.XLS").Worksheets("条件表") '<==こことか
Range(.Cells(3, 1), .Cells(2 + l, 49)).ClearContents
k = 2
End With
End If
'ここから読込み
With Workbooks(FILE_Name).Worksheets(Sheet_Name)
For i = 1 To DATA_Row
If .Cells(i, DATA(1, 35)).Value <> "" Then
k = k + 1
Workbooks("Mk4.XLS").Worksheets("条件表").Cells(k, 1) = k - 2
For j = 2 To 34
If DATA(1, j) <> "" Then
If DATA(1, j) = 0 Then '固定セルの条件
Workbooks("Mk4.XLS").Worksheets("条件表").Cells(k, j) = _
.Range(DATA(0, j)).Value
Else
Select Case j
Case 4, 19
Workbooks("Mk4.XLS").Worksheets("条件表").Cells(k,j)="○"
Case Else
Workbooks("Mk4.XLS").Worksheets("条件表").Cells(k,j) = _
.Cells(i, DATA(1, j)).Value
End Select
End If
Else
Workbooks("Mk4.XLS").Worksheets("条件表").Cells(k, j) = ""
End If
Next j
End If
Next i
End With
Workbooks(FILE_Name).Close SaveChanges:=False
MsgBox " 読込みが終了しました!! "
Unload UserForm3
End Sub
________________________________________________________
Private Sub CommandButton3_Click()
varRet = Application.GetOpenFilename("EXCELファイル,*.xls")
If VarType(varRet) = vbBoolean Then
Exit Sub
Else
FILE_Pass.Value = varRet
For j = 1 To 256
If Left(Right(varRet, j), 1) = "\" Then
FILE_Name = Right(varRet, j - 1)
Exit For
End If
Next j
End If
Workbooks.Open Filename:=varRet
ComboBox1.Clear
For Each WS In Workbooks(FILE_Name).Worksheets
ComboBox1.AddItem WS.Name
Next
End Sub
______________________________________________________
あと自分の分かる範囲でマクロを書いていますので、御覧のように野暮ったいものとなっています。何かアドバイスを頂ければ幸いです。
|
|