Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
エクセルの名前が設定されたセルの検索について
投稿日時: 18/11/08 14:48:59
投稿者: 河童TKO

いつも大変お世話になっております。
 
AccessからExcelのセルへ値を更新するとき
名前が設定されたセルを検索してセルへ値を更新したいと思っています。
 
セル番地を指定すれば、セルへデータを入力できるのですが、
希望する処理は、セルの名前にある項目が含まれている場合という
条件の繰り返しでセルへデータを入力したいです。
 
セルの名前は
parts_1
parts_2
parts_3
のようにルールを決めて設定しています。
 
セルの名前に「parts_」が含まれている場合という条件で
繰り返し処理を設定するにはどの様にすれば良いでしょうか?
セルの名前に「parts_」が含まれているセル数は変化しますし、
1,2,3,6のように連番では無くなる可能性もあるので考慮したいです。
 
ご教示いただければ、幸いです。
 

    '部品管理表
    Dim Label As New Workbook
    '保存用book
    Dim lBook As Workbook
    Set lBook = exl.Workbooks.Add

    Set Label = exl.Workbooks.Open(CurrentProject.path & "\parts.xlsx")
        
    Label.Worksheets("部品管理表").Copy , lBook.Worksheets(lBook.Worksheets.Count)

    'セルの番地を指定するのではなく、
  'セルの名前に「parts_」が含まれている場合という条件にしたい
'    With lBook.Worksheets(lBook.Worksheets.Count)
'        .Cells(1, "C") = "test1"
'        .Cells(2, "E") = "test2"
'        .Cells(5, "H") = "test3"
'    End With

回答
投稿日時: 18/11/08 15:21:03
投稿者: sk

引用:
AccessからExcelのセルへ値を更新するとき
名前が設定されたセルを検索してセルへ値を更新したい

引用:
セルの名前は
parts_1
parts_2
parts_3

引用:
セルの名前に「parts_」が含まれている場合という条件で
繰り返し処理を設定する

引用:
With lBook.Worksheets(lBook.Worksheets.Count)
    .Cells(1, "C") = "test1"
    .Cells(2, "E") = "test2"
    .Cells(5, "H") = "test3"
End With

Dim lName As Excel.Name
 
For Each lName In lBook.Names
    If lName.Name Like "parts_*" Then
        lName.RefersToRange.Value = "test1"
    End If
Next
-----------------------------------------------------
 
同じ値を代入するだけならば、以上のようなコードを
記述なさればよろしいのではないかと。

投稿日時: 18/11/08 18:41:01
投稿者: 河童TKO

こんばんは。
sk様、お返事ありがとうございました。
 
追加条件で申し訳ありませんが、
セルと図形に名前を付けた場合、対応できるでしょうか?
 
lNameがセルか図形を判定して
セルの場合は、「test1」を入力
図形の場合は、非表示に設定
したいです。
 
  

   Dim lName As Excel.name
 
    For Each lName In lBook.Names
        If lName.name Like "parts_*" Then
            If TypeName(lName) <> Range Then 'セル範囲
                lName.RefersToRange.Value = "test1"
            Else '図形の場合は、非表示
'                .Shapes("parts_zukei").Visible = msoFalse
            End If
        End If
    Next
[/code]

回答
投稿日時: 18/11/09 09:48:04
投稿者: sk

引用:
Dim lName As Excel.Name

引用:
lNameがセルか図形を判定して

Excel.Name オブジェクトは「名前付きセル範囲」を参照するための
オブジェクトであって、図形を指し示すオブジェクトではありません。
 
引用:
図形の場合は、非表示に設定

Dim lWorksheet As Excel.Worksheet
Dim lShape As Excel.Shape
 
For Each lWorksheet In lBook.Worksheets
    For Each lShape In lWorksheet.Shapes
        If lShape.Name Like "parts_*" Then
            lShape.Visible = False
        End If
    Next
Next

投稿日時: 18/11/16 11:49:03
投稿者: 河童TKO

こんにちは。
sk様、ありがとうございます。
 
返信が遅くなりましたが、
希望通りの処理ができました。
 
セルと画像の処理を分ければ、
良かったんですね。