-2

さて、別のユーザーが編集できるが、それ以外の場合はロックできるスプレッドシートを作成しています。私がやりたいのは、3つのボタンを作成することです。「WhatIf」「ExitWhatif」および「Reset」

「もしも​​」は、ユーザーがデータを入力できるようにします。「Exitwhatif」を使用すると、ユーザーは入力モードを終了してデフォルトに戻すことができます。資料。次に、「リセット」により、ユーザーは「もしも」のままになりますが、すべての値がデフォルトにリセットされます。

次に、「もしも」ボタンを左上のどこかに表示したいのですが、クリックすると「終了」と「リセット」に置き換えられます

4

1 に答える 1

1

もう少し質問を説明することをお勧めしますが、これまでのところ、私が推測できることについては、次のような問題があります。

  • 数式とデータがロックされたExcelシートを用意します。
  • ページの編集を提案しますが、データへの「コンサルト」として変更を保存しません。

私は主に以下を提供することができます:

  • ベースページを保存するバックアップシートを作成します
  • 編集のためにシートのロックを解除します。
  • 編集を終了する場合は、バックアップからメインシートにデータを復元します。
  • 編集をリセットした場合は、終了と同じ手順を実行し、データのロックを再度解除します。(コードフローがどのようにグラフ化されたかについては、コピーされたシートのデータがロックされています)

これにより、次のコードが生成されます。

Sub BackUpData() 'this will be linked to you "what if" button
    Sheets("Data_Sheet").Select 'select shhet with data, just in case
    Range("A1:M56").Select ' range of your important data in your excel sheet
    Cells.Select
    Selection.Copy
    Sheets("BackUp_Sheet").Select
    Range("A1").Select     'lets paste the data in the same positión
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("Data_Sheet").Select
End Sub

これにより、データと数式のコピーが作成されます。データソースを壊さずにグラフをコピーすることも別の問題です。おそらく、この問題について詳しく説明することができます。チャートはありますか?

Sub RestoreData() 'this will be linked to you "Reset" and "Exit" button
    Sheets("BackUp_Sheet").Select 'select shhet with data, just in case
    Range("A1:M56").Select ' range of your important data in your excel sheet
    Cells.Select
    Selection.Copy
    Sheets("Data_Sheet").Select
    Range("A1").Select     'lets paste the data in the same positión
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

通常の改善の余地:

  • 範囲を動的に選択しますが、メモリの問題が発生する可能性があるため、すべてのシートを選択するわけではありません。(ラップトップでExcel 2007のすべてのセルをコピーしようとすると、リソースが不足します:P)。
  • Application.ScreenUpdatingでちらつきを取り除きます。
  • *backup_Sheet*が非表示になっているときにこれが機能するかどうかは確認していません。

もう1つの問題は、シート内のデータのロックを解除することです。

Sub UnlockMySheet()
        'password here won`t protect the business logic or the code from prying eyes, just the user from themselves
        ActiveWorkbook.Unprotect 
        ActiveSheet.Unprotect
        Range("D9,B13").Select ' select the editable cells
        Selection.Locked = False
        Selection.FormulaHidden = False
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        ActiveSheet.EnableSelection = xlUnlockedCells
        ActiveWorkbook.Protect Structure:=True, Windows:=True
End Sub

通常の改善の余地:

  • たぶん私は保護プロトコルを忘れて、ページをそのままにしておくだけです。(このコードを証明する時間はありません)。
  • スタックオーバーフローの集合的な心からの暗示。

つまり、今のところ

于 2011-08-06T13:26:00.487 に答える