2017-01-26 5 views
0

ワークシートをアドインに移動して、新しいワークブックを全員に渡すことなくコードを更新できるようにしています。アドインコードがシート上に存在するActiveXコントロールを変更する必要がある場所に着くまで、このプロセスはかなり簡単でした。Excelでカスタムアドインを使用してActiveXコントロールを変更する

私はこれらを変更するために使用していた以前のコード:

If Sheet1.Range(RowHighlightToggle.LinkedCell).Value = True Then 
    RowHighlightToggle.Caption = "Row Highlight - On" 
    HighlightStatus = 0 
Else 
    RowHighlightToggle.Caption = "Row Highlight - Off" 
    HighlightStatus = 1 
End If 

RowHightlightToggle問題のActiveXコントロールであること。私はアドインの中でコーディングするときにこのボタンを参照する方法がわかりません。私はSheet1.RowHighlightToggle.LinkedCellをやってみましたが、それも私にエラーを与えています。私はSheet1のように通常Sheet1のようなものですが、Worksheetのように、対象のブックからコードネームを取得する関数を持っているので、アドイン内でSheet1を使用していません。私はリンクされたセルの値を非常に簡単に読むことができますが、コード内のボタンを何とか参照することなくボタンのキャプションを変更する方法はありません。

このアドインが作成されているブックには常にこのボタンが表示されます。アドインがそのブックにのみ表示され、その他のものには表示されないようにするための追加コードがあります。

アドインを通じてボタンを参照する方法や、キャプションをセルにリンクする方法があるので、キャプションを更新するためにセルの値を変更できますか?コントロールを想定し

答えて

1

もう少し研究を重ねた結果、OLEObjects、以下のサブコードを含む作業コードがあります。

Sub RowHighlightToggle() 

'-----Startup Code-------- 
With Application 
    .ScreenUpdating = False 
    .DisplayStatusBar = False 
    .DisplayAlerts = False 
End With 
'------------------------ 

Dim HighlightStatus As Long, AWSheet1 As Worksheet, ThisButton As Object 

If TargetWorkbook Is Nothing Then Set TargetWorkbook = ActiveWorkbook 

Set AWSheet1 = GetWsFromCodeName(TargetWorkbook, "Sheet1") 

Set ThisButton = AWSheet1.OLEObjects("RowHighlightToggle") 

    Call Common_Functions.StartUnlock 

    If AWSheet1.Range(ThisButton.LinkedCell).Value = True Then 
     ThisButton.Object.Caption = "Row Highlight - On" 
     HighlightStatus = 0 
    Else 
     ThisButton.Object.Caption = "Row Highlight - Off" 
     HighlightStatus = 1 
    End If 

    Call Common_Functions.StartLock 

    If Worksheets.Count > 6 Then 
     Call Common_Functions.SheetArrayBuild(TargetWorkbook) 
     For i = LBound(SheetArray) To UBound(SheetArray) 
      Sheets(SheetArray(i, 1)).Range("Z1").Value = HighlightStatus 
     Next i 
    End If 

'-----Finish Code-------- 
With Application 
    .ScreenUpdating = True 
    .DisplayStatusBar = True 
    .DisplayAlerts = True 
    .EnableEvents = True 
End With 
'------------------------ 

End Sub 

し、ブック

Function GetWsFromCodeName(wb As Workbook, CodeName As String) As Excel.Worksheet 
Dim ws As Excel.Worksheet 

    For Each ws In wb.Worksheets 
     If ws.CodeName = CodeName Then 
      Set GetWsFromCodeName = ws 
      Exit For 
     End If 
    Next ws 
End Function 
0

がSheet1の上にある、あなたは使用することができるはずです。

Sheet1.RowHightlightToggle.Caption = "Row Highlight - On" 

しかし、あなたはまた、図形のコレクションを使用して制御で得ることができます:

Sheet1.Shapes("RowHightlightToggle").DrawingObject.Object.Caption = "Row Highlight - On" 

それとも、もっと持ちます一般的なワークブック変数:

Dim userWorkbook as Workbook 
Set userWorkbook = Workbooks("UserData.xlsm") 
userWorkbook.Worksheets("Foo").Shapes("RowHightlightToggle").DrawingObject.Object.Caption = "Row Highlight - On" 
+0

なしfound.'可能性の高い原因コードへのボタンはそれほどの一部であり、実際のワークブックで実行していない 'メソッドまたはデータメンバからワークシートを取得するための機能私はシートを実際のコードネームで参照することはできません。 – tjb1

+0

私が追加したシェイプのアプローチを参照してください。 'Sheet'変数は、対象シートを参照する必要があります。 – ThunderFrame

+0

シェイプが機能しない - '指定された名前のアイテムが見つかりませんでした。 – tjb1

関連する問題