私はデータ入力のために使用されるユーザーフォームを開くフォームコントロールでスプレッドシートに取り組んでいます。フォームのサブミットボタンは、セルの行を塗りつぶし、その行の最後の2つのセルに2つのボタンを追加します。これは、ユーザーが行う行数と、2つの新しいボタンが独自の別名で作成されるたびに挿入されます。しかし、これらはActiveXコントロールであり、同僚がファイルを開いてラップトップで使用しようとすると、他のWindows/Officeバージョンとの互換性の問題が発生しています。プログラムでフォームコントロールを追加する方法はありますか?
これは私が(それだけで異なる変数、基本的に他のボタンについても同様である)スプレッドシート上のコマンドボタンのいずれかを追加するために使用しているコードです:
Dim i As Long, Hght As Long
Dim Name As String, NName As String
i = 0
Hght = 305.25
NName = "cmdAction" & i
For Each OLEObject In ActiveSheet.OLEObjects
If Left(OLEObject.Name, 9) = "cmdAction" Then
Name = Right(OLEObject.Name, Len(OLEObject.Name) - 9)
If Name >= i Then
i = Name + 1
End If
NName = "cmdAction" & i
Hght = Hght + 27
End If
Next
Dim UpdateEntry As OLEObject, N%
Set UpdateEntry = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=Selection.Offset(0, 23).Left, Top:=Selection.Offset(0, 23).Top, Width:=72, Height _
:=24)
UpdateEntry.Name = NName
UpdateEntry.Object.Caption = "Edit Entry"
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
N = .CountOfLines
.InsertLines N + 1, "Private Sub " & NName & "_Click()"
.InsertLines N + 2, vbTab & "Code for button goes here"
.InsertLines N + 3, vbTab & "End Sub"
End With
それならば、私は思っていました同じことをすることは可能でしたが、作成されたボタンはActiveXではなくフォームコントロールです。
表示されるエラーは、実行時エラー32809:アプリケーション定義エラーまたはオブジェクト定義エラーです。大規模な調査の結果、別のバージョンのWindowsで変更されたシートが壊れてしまっていることが判明しました。修正する唯一の方法は、新しいシートを作成し、すべての内容を新しいシートにコピーし、破損したシートを削除し、新しいシートの名前を以前の名前に変更することです。これは機能しますが、ActiveXコントロールをコピーすることはできません。なぜなら、名前が変更され、適切なコードがその中にないからです。ユーザーフォームを開くために使用されるスプレッドシートのフォームコントロールはうまく動作します。私の唯一の解決策は、すべてのActiveXをフォームコントロールに変更することだと思います。
助けていただければ幸いです。
このようなことは一切していませんが、このリンクは使用していますか? [リンク](http://www.ozgrid.com/Excel/free-training/ExcelVBA2/excelvba2lesson21.htm) オブジェクトが必要なように見えます。 – Clusks
これは最初のように聞こえます。どうもありがとう。 – user6782845