自分のマシンで完全に機能するマクロを作成しました(Windows64ビットおよびOffice32ビット)
しかし、クライアントは問題に直面しています。彼はWindows64ビットとOffice64ビットを使用しています。
理由はわかりませんがSheet.Activate
、彼のマシンで動作していません。以下のスクリーンプリントを参照してください。
あなたの入力に基づいて、私は「レコードシート」の宣言を見つけることができません。このコードをイベントルーチン「Workbook_open」に入力したので、どこかで宣言を行ったとは思えません。
応募したい場合
RecordSheet.Activate
あなたがすべき最低限のことは:
Set oRecordSheet = thisworkbook.sheets("Records")
oRecordSheet.activate
あなたのバージョンのOffice/Windowsがそれと関係があるのではないかと強く疑っています。VbaはMicrosoftによってサポートされなくなり、言語のさらなる開発は行われません。
クライアントの場合は、このクライアントがシートの名前を変更した可能性を考慮してください。
シートオブジェクトを適切に設定した場合、これも問題の原因である可能性があります。
編集:
メールで受け取ったファイルを確認したところ、上記の解決策でバグが修正されたことを確認しました。
全体を交換してください
UserForm_Initialize
サブルーチン:
Private Sub UserForm_Initialize()
Dim oRecordSheet As Excel.Worksheet
Set oRecordSheet = ThisWorkbook.Sheets("Expense Report")
oRecordSheet.Activate
EnableDisableConrols (False)
Call FillDropDowns
Navigator.Max = RecordSheet.UsedRange.Rows.Count
If RecordSheet.UsedRange.Rows.Count = 1 Then
RowNumber = 1
Else
RowNumber = 2
Call FillDataIntoControls
End If
End Sub
編集2:上記の解決策は正しいですが、実際にシートのコードネームがRecordSheetに設定されている場合は、この解決策も使用できます。ただし、コードネームはブックでのみ使用できることに注意してください。
参照が欠落している可能性があると思います。
Tools
->に移動しReferences
、不足しているものがリストされているかどうかを確認します
そこでチェックマークを外すと、のような基本的なものdate
が再び機能し始めます。これらの参照が実行中のコードにとって重要である場合は、64ビットに相当するものを検索する必要があります
参照の詳細-通常、「欠落」を解決すると修正されますが、ここから
あなたが説明していることは、破損した参照の典型です。これは、参照されたファイルが異なるバージョンであるか、コードが開発されたマシンとクライアントマシンの間の異なる場所にあることが原因である可能性があります。私たちの会社も、すべてのマシンを同じように構成するように努めていますが、管理することは本質的に不可能であることがわかりました。
任意のコードモジュールを開きます(または、[デバッグウィンドウを一番上に保持する]オプションを選択していない場合は、Ctrl-Gを使用してデバッグウィンドウを開きます)。[ツール]|[ツール]を選択します メニューバーからの参照。選択したすべての参照を調べます。
選択した参照のいずれかの前に「MISSING:」がある場合は、それらの選択を解除して、ダイアログから戻ります。選択を解除したばかりの参照が本当に必要な場合([すべてのモジュールをコンパイル]を実行することでわかります)、戻ってそれらを再度選択します。
「MISSING:」がない場合は、追加の参照をランダムに選択し、ダイアログから戻ってから、戻って、追加した参照の選択を解除します。それでも問題が解決しない場合は、選択した参照をできるだけ多く選択解除して(Officeではすべての選択を解除できない場合があります)、ダイアログから戻ってから、選択を解除した参照に戻って再度選択します。(注:参照を削除する前に、参照が何であるかを書き留めてください。戻ったときに参照の順序が異なるためです)
(補足として、Excelはすべての参照を調べる必要がなくなったため、VBA.xxxxとして明確化することができます。)
コードの最初の行は。を示していUserForm
ます。一部の広く使用されているフォームコントロール(ComCtl
ライブラリで定義されているもの)は、64ビットバージョンのOfficeには存在しないためUserForm
、問題である可能性が高くなります。
代わりに32ビットOfficeを使用するようにクライアントを説得するかUserForm
、影響を受けるコントロールを使用しないように変更しない限り、簡単な解決策はありません。
影響を受けるコントロールは、ImageCombo、ImageList、ListView、ProgressBar、Slider、StatusBar、TabStrip(通常のMSForms
ライブラリにはTabStripの代替バージョンがあります)、ツールバー、Treeviewです。
問題の詳細はこのスレッドで議論され、ここで確認されます