|
こんにちは
▼わいわい さん:
>いつもお世話になります。
>ファイルの指定法について教えてください。
>UserForm3の規則(textbox内の文字で読取列を指定)に従い、Private Sub CommandButton3_Click()で開いた外部ファイル(シートはComboBox1で選択)から、CommandButton2_Click()にてデータを取込もうとしています。
>以下のマクロで動いてはいるのですが、2つのファイルを操作しているので元ファイル(マクロのある)を操作するとき
>>Workbooks("Mk4.XLS").Worksheets("条件表").Range("A3:A65536"))
>のように指定しています。これですと将来ファイル名を変更したとき問題となるので良い方法を教えてください。Me.??で出来るのでしょうか?
>
この件についてはハチさんが回答されている通りです
>______________________________________________________
>あと自分の分かる範囲でマクロを書いていますので、御覧のように野暮ったいものとなっています。何かアドバイスを頂ければ幸いです。
気が付いたところでは
Workbooks("Mk4.XLS").Worksheets("条件表")
が何度も出てきますので、メンテを考えると
Dim MWS As Worksheet
Set MWS = Workbooks("Mk4.XLS").Worksheets("条件表")
(または Set MWS = ThisWorkbook.Worksheets("条件表") )
として、
> l = Application.Max(Workbooks("Mk4.XLS").Worksheets("条件表").Range("A3:A65536"))
等を
l = Application.Max(MWS.Range("A3:A65536"))
のようにしておくと修正するのが1箇所ですみます
>'読みとり行数の取得
> 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
ここはループ処理をしなくても
Dim mR As Range
With Workbooks(FILE_Name).Worksheets(Sheet_Name)
Set mR = .Cells(65535, DATA(1, 2)).End(xlUp)
DATA_Row = mR.Row
End With
で求められます
_______________________________________________________
>Private Sub CommandButton3_Click()
> 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
ここもループ処理ではなく
j = InStrRev(varRet, "\")
FILE_Name = Right(varRet, Len(varRet) - j)
で求められます
|
|