| 
    
     |  | いつもお世話になります。 ファイルの指定法について教えてください。
 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
 ______________________________________________________
 あと自分の分かる範囲でマクロを書いていますので、御覧のように野暮ったいものとなっています。何かアドバイスを頂ければ幸いです。
 
 
 |  |